

# 高解像度メトリクスによる高速自動スケーリング
<a name="target-tracking-faster-auto-scaling"></a>

デフォルトでは、Amazon ECS は `CPUUtilization` および `MemoryUtilization` メトリクスを 60 秒の解像度で発行します。20 秒の解像度を設定して、サービスの自動スケーリングを高速化できます。

ターゲット追跡スケーリングポリシーには、以下の高解像度の事前定義済みメトリクスが利用可能です。


| PredefinedMetricType | 説明 | 
| --- | --- | 
| ECSServiceAverageCPUUtilizationHighResolution | 20 秒の解像度での平均 CPU 使用率 | 
| ECSServiceAverageMemoryUtilizationHighResolution | 20 秒の解像度での平均メモリ使用率 | 

## 高解像度メトリクスを使用して新しいサービスを作成し、自動スケーリングを高速化する
<a name="faster-auto-scaling-create-service"></a>

### コンソール
<a name="faster-auto-scaling-create-service-console"></a>

1. **[クラスター]** ページで、サービスを作成するクラスターを選択します。

1. **[サービス]** タブで、**[作成]** を選択します。

1. 「サービスの作成」フォームの**「モニタリング設定**」セクションで、**「メトリクス構成の追加**」を選択します。

1. **メトリクス名** で、高解像度で収集するメトリクスを選択します。[`CPUUtilization`] または [`MemoryUtilization`] を選択します。

1. **解像度 (秒)** で、**20** を選択します。

1. (オプション) 両方のメトリクスを高解像度で追加するには、**メトリクス設定を再度追加** を選択し、他のメトリクスに対して前の 2 つのステップを繰り返します。

1. **サービスの自動スケーリング** セクションで、**サービスの自動スケーリングを使用する** を選択します。

1. **[タスクの最小数]** に、サービスの自動スケーリングで使用するタスクの下限数を入力します。必要な数がこの数を下回ることはありません。

1. **[タスクの最大数]** に、サービスの自動スケーリングで使用するタスクの上限数を入力します。必要な数がこの数を超えることはありません。

1. [**スケーリングポリシータイプ**] で [**ターゲットの追跡**] を選択します。

1. **メトリクスタイプ** で、対応する高解像度メトリクスを選択します。たとえば、`CPUUtilization` を 20 秒の解像度で設定した場合は `ECSServiceAverageCPUUtilizationHighResolution` を選択し、`MemoryUtilization` を 20 秒の解像度で設定した場合は `ECSServiceAverageMemoryUtilizationHighResolution` を選択してください。

1. **ターゲット値** には、ターゲット使用率を入力します。サービスの自動スケーリングは、平均使用率が目標値になるまで、または指定した最大タスク数に達するまで、キャパシティをスケールアウトします。

1. **[追加設定]** で、以下の項目を設定します。

   1. **[スケールアウトのクールダウン期間]** には、前回のスケールアウトアクティビティが有効になるまで待機する時間を秒単位で入力します。

   1. **[スケールインのクールダウン期間]** に、スケールインアクティビティが完了してから別のスケールインアクティビティが開始されるまでの時間を秒単位で入力します。

1. **作成** を選択して サービスを作成します。

### AWS CLI
<a name="faster-auto-scaling-create-service-cli"></a>

1. [create-service](https://docs.aws.amazon.com/cli/latest/reference/ecs/create-service.html) コマンドを使用して、モニタリング設定でサービスを作成します。

   ```
   aws ecs create-service --region {{us-east-1}} \
       --cluster {{my-cluster}} \
       --service-name {{my-service}} \
       --task-definition {{my-app:1}} \
       --desired-count 2 \
       --monitoring "metricConfigurations=[{metricNames=[CPUUtilization,MemoryUtilization],resolutionSeconds=20}]"
   ```

1. [register-scalable-target](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/register-scalable-target.html) コマンドを使用して、スケーラブルなターゲットとしてサービスを登録します。

   ```
   aws application-autoscaling register-scalable-target \
       --service-namespace ecs \
       --resource-id service/{{my-cluster}}/{{my-service}} \
       --scalable-dimension ecs:service:DesiredCount \
       --min-capacity {{1}} \
       --max-capacity {{10}} \
       --region {{us-east-1}}
   ```

1. [put-scaling-policy](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/put-scaling-policy.html) コマンドを使用して、高解像度の事前定義されたメトリクスを使用してターゲット追跡スケーリングポリシーを作成します。

   ```
   aws application-autoscaling put-scaling-policy \
       --service-namespace ecs \
       --resource-id service/{{my-cluster}}/{{my-service}} \
       --scalable-dimension ecs:service:DesiredCount \
       --policy-name {{my-highres-cpu-policy}} \
       --policy-type TargetTrackingScaling \
       --target-tracking-scaling-policy-configuration '{
           "TargetValue": {{50.0}},
           "PredefinedMetricSpecification": {
               "PredefinedMetricType": "ECSServiceAverageCPUUtilizationHighResolution"
           }
       }' \
       --region {{us-east-1}}
   ```

1. [describe-scaling-policies](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/describe-scaling-policies.html) コマンドを使用して、ポリシーが作成されたことを確認します。

   ```
   aws application-autoscaling describe-scaling-policies \
       --service-namespace ecs \
       --resource-id service/{{my-cluster}}/{{my-service}} \
       --scalable-dimension ecs:service:DesiredCount \
       --region {{us-east-1}}
   ```

## 既存のサービスを更新して高解像度メトリクスを使用し、より高速な自動スケーリングを実現します
<a name="faster-auto-scaling-update-service"></a>

既存のサービスを更新して高解像度のメトリクスを使用し、サービスの自動スケーリングを高速化するプロセスは、2 つのステップで構成されます。まず、サービスデプロイをトリガーするモニタリング解像度を更新する必要があります。デプロイが正常に完了し、すべてのタスクが 20 秒の解像度でメトリクスを出力したら、高解像度のスケーリングポリシーを設定できます。

**重要**  
以前のサービスで 60 秒のメトリクス解像度を使用していた場合、スケーリングポリシー用の高解像度メトリクスは、サービスを 20 秒のメトリクス解像度を使用するように更新し、サービスのデプロイが完了した後にのみ、Amazon ECS コンソールで利用可能になります。

### コンソール
<a name="faster-auto-scaling-update-service-console"></a>

**ステップ 1: モニタリング解像度を更新する**  


1. **[クラスター]** ページで、更新するサービスが含まれているクラスターを選択します。

1. **サービス** セクションで、サービスを選択し、**更新** を選択します。

1. 更新サービスフォームの **Monitoring configuration** セクションで、**Add metric configuration ** を選択します。

1. **メトリクス名** で、高解像度で収集するメトリクスを選択します。[`CPUUtilization`] または [`MemoryUtilization`] を選択します。

1. **解像度 (秒)** で、**20** を選択します。

1. (オプション) 両方のメトリクスを高解像度で追加するには、**メトリクス設定を再度追加** を選択し、他のメトリクスに対して前の 2 つのステップを繰り返します。

1. **[更新]** を選択して変更を送信します。これにより、サービスのデプロイがトリガーされます。

1. デプロイが完了するまで待ちます。**デプロイ** タブのサービスの詳細ページで進行状況をモニタリングできます。
**注記**  
サービスの自動スケーリングセクションでは、デプロイが成功し、すべてのタスクが 20 秒間隔でデータを出力するようになるまで、高解像度スケーリングメトリクスのオプションはグレー表示されます。

**ステップ 2: 高解像度スケーリングポリシーを設定する**  


デプロイが完了したら、次のいずれかの方法を使用してスケーリングポリシーを設定します。

オプション A: サービスの詳細ページ  

1. サービスの詳細ページで、[**サービスの自動スケーリング**] タブを選択します。

1. **スケーリングポリシーの作成** (または既存のポリシーの編集) を選択します。

1. [**スケーリングポリシータイプ**] で [**ターゲットの追跡**] を選択します。

1. **メトリクスタイプ** で、高解像度メトリクスを選択します。例えば、`ECSServiceAverageCPUUtilizationHighResolution`、`ECSServiceAverageMemoryUtilizationHighResolution` です。

1. **ターゲット値** には、ターゲット使用率を入力します。

1. **[追加設定]** で、以下の項目を設定します。

   1. **[スケールアウトのクールダウン期間]** には、前回のスケールアウトアクティビティが有効になるまで待機する時間を秒単位で入力します。

   1. **[スケールインのクールダウン期間]** に、スケールインアクティビティが完了してから別のスケールインアクティビティが開始されるまでの時間を秒単位で入力します。

1. **[スケーリングポリシーを作成する]** を選択します。

オプション B: サービスフォームの更新  

1. [サービスの詳細] ページで、**[更新]** を選択します。

1. **サービスの自動スケーリング** セクションで、**サービスの自動スケーリングを使用する** (まだ有効になっていない場合) を選択します。

1. **最小タスク数** には、下限を入力します。

1. **最大タスク数** には、上限を入力します。

1. [**スケーリングポリシータイプ**] で [**ターゲットの追跡**] を選択します。

1. **メトリクスタイプ** で、高解像度メトリクスを選択します (デプロイの完了後に有効になりました）。

1. **ターゲット値** には、ターゲット使用率を入力します。

1. **追加設定**で、**スケールアウトクールダウン期間** と **スケールインクールダウン期間** を設定します。

1. **[更新]** を選択して変更を送信します。

### AWS CLI
<a name="faster-auto-scaling-update-service-cli"></a>

**ステップ 1: モニタリング解像度を更新する**  


1. [update-service](https://docs.aws.amazon.com/cli/latest/reference/ecs/update-service.html) コマンドを使用して、モニタリング設定でサービスを更新します。

   ```
   aws ecs update-service --region {{us-east-1}} \
       --cluster {{my-cluster}} \
       --service {{my-service}} \
       --monitoring "metricConfigurations=[{metricNames=[CPUUtilization,MemoryUtilization],resolutionSeconds=20}]"
   ```

1. デプロイが完了するまで待ちます。[describe-services](https://docs.aws.amazon.com/cli/latest/reference/ecs/describe-services.html) コマンドを使用し、デプロイのステータスを確認することで、進行状況をモニタリングできます。

   ```
   aws ecs describe-services --region {{us-east-1}} \
       --cluster {{my-cluster}} \
       --services {{my-service}}
   ```

1. デプロイが完了したら、サービスリビジョンを説明することで、監視設定が有効になっていることを確認します。`describe-services` 出力からアクティブなサービスリビジョン ARN を取得し、以下を実行します。

   ```
   aws ecs describe-service-revisions --region {{us-east-1}} \
       --service-revision-arns {{arn:aws:ecs:us-east-1:012345678910:service-revision/my-cluster/my-service/1234567890123456789}}
   ```

   モニタリング設定がレスポンスに表示されることを確認します。

   ```
   {
       "serviceRevisions": [
           {
               ...
               "monitoring": {
                   "metricConfigurations": [
                       {
                           "metricNames": ["CPUUtilization", "MemoryUtilization"],
                           "resolutionSeconds": 20
                       }
                   ]
               }
           }
       ]
   }
   ```

**ステップ 2: 高解像度スケーリングポリシーを設定する**  


1. まだ登録されていない場合は[register-scalable-target](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/register-scalable-target.html) コマンドを使用して、サービスをスケーラブルターゲットとして登録します。

   ```
   aws application-autoscaling register-scalable-target \
       --service-namespace ecs \
       --resource-id service/{{my-cluster}}/{{my-service}} \
       --scalable-dimension ecs:service:DesiredCount \
       --min-capacity {{1}} \
       --max-capacity {{10}} \
       --region {{us-east-1}}
   ```

1. [put-scaling-policy](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/put-scaling-policy.html) コマンドを使用して、高解像度の事前定義されたメトリクスを使用してターゲット追跡スケーリングポリシーを作成します。以下の例では、50% の CPU 使用率を対象としています。

   ```
   aws application-autoscaling put-scaling-policy \
       --service-namespace ecs \
       --resource-id service/{{my-cluster}}/{{my-service}} \
       --scalable-dimension ecs:service:DesiredCount \
       --policy-name {{my-highres-cpu-policy}} \
       --policy-type TargetTrackingScaling \
       --target-tracking-scaling-policy-configuration '{
           "TargetValue": {{50.0}},
           "PredefinedMetricSpecification": {
               "PredefinedMetricType": "ECSServiceAverageCPUUtilizationHighResolution"
           }
       }' \
       --region {{us-east-1}}
   ```

1. ポリシーが作成されたことを確認します。

   ```
   aws application-autoscaling describe-scaling-policies \
       --service-namespace ecs \
       --resource-id service/{{my-cluster}}/{{my-service}} \
       --scalable-dimension ecs:service:DesiredCount \
       --region {{us-east-1}}
   ```

## 高速サービス自動スケーリングを検証する
<a name="faster-auto-scaling-validate"></a>

**パート 1: 高解像度メトリクスが公開されていることを確認する**  


1. [CloudWatch console] (CloudWatch のコンソール) に移動する。

1. ナビゲーションペインで、**[メトリクス]** 、**[すべてのメトリクス]** の順に選択します。

1. **AWS/ECS** 名前空間を選択します。

1. **ClusterName, ServiceName** を選択します。

1. サービスの `CPUUtilization` および `MemoryUtilization` メトリクスを見つけます。

1. 期間を **20 秒** に設定します。データポイントは 20 秒間隔で表示され、高解像度メトリクスがアクティブであることを確認します。

**パート 2: スケーリングポリシーが高解像度メトリクスを使用していることを確認する**  


1. サービスの詳細ページで、[**サービスの自動スケーリング**] タブを選択します。

1. 既存のスケーリングポリシーを表示し、メトリクスが高解像度バリアント (`ECSServiceAverageCPUUtilizationHighResolution` または `ECSServiceAverageMemoryUtilizationHighResolution`) に設定されていることを確認します。

1. または、 CLI を使用して検証します。

   ```
   aws application-autoscaling describe-scaling-policies \
       --service-namespace ecs \
       --resource-id service/{{my-cluster}}/{{my-service}} \
       --scalable-dimension ecs:service:DesiredCount \
       --region {{us-east-1}}
   ```

   レスポンスの `PredefinedMetricType` が高解像度メトリクスに設定されていることを確認します。

## 考慮事項
<a name="faster-auto-scaling-considerations"></a>
+ 設定変更をモニタリングすると、新しいサービスリビジョンが作成され、サービスのデプロイが必要になります。高解像度スケーリングメトリクスは、デプロイが完了し、すべてのタスクが 20 秒の解像度で出力されるまで使用できません。
+ 高解像度メトリクスは、Application Load Balancer と Network Load Balancer を使用するサービスでサポートされています。ターゲットグループを使用しない Classic Load Balancer を使用するサービスはサポートされていません。
+ 高解像度メトリクスは、`CODE_DEPLOY` または `EXTERNAL` デプロイコントローラータイプを使用するサービスではサポートされていません。
+ `DescribeServiceRevisions` を使用して、サービスのモニタリング設定を表示できます。モニタリング設定は `CreateService` または `UpdateService` レスポンスでは返されません。