

# 使用高分辨率指标创建目标跟踪服务自动扩缩
<a name="target-tracking-faster-auto-scaling"></a>

默认情况下，Amazon ECS 以 60 秒的分辨率发布 `CPUUtilization` 和 `MemoryUtilization` 指标。您可以配置 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. （可选）要以高分辨率添加两个指标，请再次选择**添加指标配置**，然后对另一个指标重复前两个步骤。

1. 在**服务自动扩缩**部分中，选择**使用服务自动扩缩**。

1. 对于**最小任务数**，输入供服务自动扩缩使用的任务数的下限。所需计数不会低于此计数。

1. 对于**最大任务数**，输入供服务自动扩缩使用的任务数的上限。所需计数不会高于此计数。

1. 对于**扩展策略类型**，选择**目标跟踪**。

1. 对于**指标类型**，选择相应的高分辨率指标。例如，配置 `CPUUtilization` 为 20 秒分辨率时选择 `ECSServiceAverageCPUUtilizationHighResolution`，配置 `MemoryUtilization` 为 20 秒分辨率时选择 `ECSServiceAverageMemoryUtilizationHighResolution`。

1. 在**目标值**中，输入目标利用率百分比。服务自动扩缩可横向扩展您的容量直到平均利用率达到目标值，或直到达到您指定的最大任务数。

1. 在**其他设置**下面，请配置以下内容。

   1. 对于**横向扩展冷却时间**，请输入等待先前的横向扩展活动生效的时长（以秒为单位）。

   1. 对于**横向缩减冷却时间**，请输入在一个横向缩减活动完成之后、另一个横向缩减活动开始之前的时长（以秒为单位）。

1. 选择**创建**以创建服务。

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

1. 使用 [create-service](https://docs.amazonaws.cn/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.amazonaws.cn/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.amazonaws.cn/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.amazonaws.cn/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>

更新现有服务以使用高分辨率指标，从而加快自动扩缩速度，此过程分为两个步骤。您必须先更新监控分辨率，这将触发服务部署。部署成功完成并且所有任务都以 20 秒的分辨率发出指标后，您可以配置高分辨率扩缩策略。

**重要**  
如果您的服务之前使用的是 60 秒的指标分辨率，则只有在您将服务更新为使用 20 秒的指标分辨率并且服务部署完成后，Amazon ECS 控制台才会显示用于扩缩策略的高分辨率指标。

### 控制台
<a name="faster-auto-scaling-update-service-console"></a>

**步骤 1：更新监控分辨率**  


1. 在**集群**页面上，选择包含要更新的服务的集群。

1. 在**服务**部分中，选择服务并选择**更新**。

1. 在“更新服务”窗体的**监控配置**部分中，选择**添加指标配置**。

1. 在**指标名称**中，选择要以高分辨率收集的指标。选择 `CPUUtilization` 或 `MemoryUtilization`。

1. 对于**分辨率（秒）**，选择 **20**。

1. （可选）要以高分辨率添加两个指标，请再次选择**添加指标配置**，然后对另一个指标重复前两个步骤。

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. 选择**更新**以提交更改。

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

**步骤 1：更新监控分辨率**  


1. 使用 [update-service](https://docs.amazonaws.cn/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.amazonaws.cn/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.amazonaws.cn/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.amazonaws.cn/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 控制台。

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 秒的分辨率发出之后，高分辨率扩缩指标才可用。
+ 对于使用应用程序负载均衡器和网络负载均衡器的服务，支持高分辨率指标。不支持使用不带目标组的经典负载均衡器的服务。
+ 对于使用 `CODE_DEPLOY` 或 `EXTERNAL` 部署控制器类型的服务，不支持高分辨率指标。
+ 您可以使用 `DescribeServiceRevisions` 查看服务的监控配置。监控配置不在 `CreateService` 或 `UpdateService` 响应中返回。