

# 为 Amazon ECS 服务自动扩缩创建预测式扩缩策略
<a name="predictive-scaling-create-policy"></a>

创建预测性扩缩策略，以便 Amazon ECS 根据历史数据自动增加或减少服务运行的任务数。

**注意**  
一项新服务需要提供至少 24 小时的数据，然后才能生成预测。

## 控制台
<a name="predictive-scaling-policy-aws-console"></a>

1. 除了用于创建和更新服务的标准 IAM 权限之外，您还需要额外权限。有关更多信息，请参阅 [Amazon ECS 服务自动扩缩所需的 IAM 权限](auto-scaling-IAM.md)。

1. 请确定要用于策略的指标。可供使用的指标如下：
   +  **ECSServiceAverageCPUUtilization**：服务应使用的平均 CPU 使用率。
   + **ECSServiceAverageMemoryUtilization**：服务应使用的平均内存使用率。
   + **ALBRequestCountPerTarget**：任务理想情况下应接收的平均每分钟请求数。

   您也可以使用自定义指标。您需要定义以下值：
   + 负载：该指标应准确代表应用程序的全部负载，并且是应用程序中对扩展最重要的方面。
   + 扩缩指标：衡量应用程序理想利用率的最佳预测指标。

1. 在 [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2) 打开控制台。

1. 在 **Clusters**（集群）页面上，选择集群。

1. 在“集群详细信息”页面，找到**服务**部分，然后选择服务。

   此时系统会显示服务详细信息页面。

1. 选择**服务自动扩缩**，然后选择**设置任务数**。

1. 在 **Amazon ECS 服务任务计数**下，选择**使用自动扩缩**。

   此时将显示**任务计数部分**。

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

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

   1. 选择**保存**。

      此时将显示策略页面。

1. 选择**创建扩缩策略**。

   此时将显示**创建策略**页面。

1. 对于**扩缩策略类型**，选择**预测式扩缩**。

1. 对于 **Policy name**（策略名称），请输入策略的名称。

1. 对于**指标对**，从选项列表中选择指标。

   如果您选择了**每目标的应用程序负载均衡器请求计数**，请在**目标组**中选择目标组。**每目标的应用程序负载均衡器请求计数**仅在您已为服务附加应用程序负载均衡器目标组时才支持。

   如果您选择**自定义指标对**，请从**负载指标**和**扩缩指标**的列表中选择单个指标。

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

1. 选择**创建扩缩策略**。

## AWS CLI
<a name="predictive-scaling-policy-aws-cli"></a>

使用 AWS CLI 按如下方式为 Amazon ECS 服务配置预测式扩缩策略。将每个*用户输入占位符*替换为您自己的信息。

有关您可以指定的 CloudWatch 指标的更多信息，请参阅《Amazon EC2 Auto Scaling API 参考》**中的 [PredictiveScalingMetricSpecification](https://docs.aws.amazon.com/autoscaling/ec2/APIReference/API_PredictiveScalingMetricSpecification.html)。

### 示例 1：具有预定义内存的预测式扩缩策略。
<a name="predictive-scaling-cli-example-one"></a>

以下是具有预定义内存配置的策略的示例。

```
cat policy.json
{
    "MetricSpecifications": [
        {
            "TargetValue": 40,
            "PredefinedMetricPairSpecification": {
                "PredefinedMetricType": "ECSServiceMemoryUtilization"
            }
        }
    ],
    "SchedulingBufferTime": 3600,
    "MaxCapacityBreachBehavior": "HonorMaxCapacity",
    "Mode": "ForecastOnly"
}
```

以下示例演示了如何通过运行指定配置文件的 [put-scaling-policy](https://docs.aws.amazon.com/cli/latest/reference/autoscaling/put-scaling-policy.html) 命令来创建策略。

```
aws application-autoscaling put-scaling-policy \
--service-namespace ecs \
--region us-east-1 \
--policy-name predictive-scaling-policy-example \
--resource-id service/MyCluster/test \
--policy-type PredictiveScaling \
--scalable-dimension ecs:service:DesiredCount \
--predictive-scaling-policy-configuration file://policy.json
```

如果成功，该命令会返回策略的 ARN。

```
{
    "PolicyARN": "arn:aws:autoscaling:us-east-1:012345678912:scalingPolicy:d1d72dfe-5fd3-464f-83cf-824f16cb88b7:resource/ecs/service/MyCluster/test:policyName/predictive-scaling-policy-example",
    "Alarms": []
}
```

### 示例 2：具有预定义 CPU 的预测式扩缩策略。
<a name="predictive-scaling-cli-example-two"></a>

以下是具有预定义 CPU 配置的策略的示例。

```
cat policy.json
{
    "MetricSpecifications": [
        {
            "TargetValue": 0.00000004,
            "PredefinedMetricPairSpecification": {
                "PredefinedMetricType": "ECSServiceCPUUtilization"
            }
        }
    ],
    "SchedulingBufferTime": 3600,
    "MaxCapacityBreachBehavior": "HonorMaxCapacity",
    "Mode": "ForecastOnly"
}
```

以下示例演示了如何通过运行指定配置文件的 [put-scaling-policy](https://docs.aws.amazon.com/cli/latest/reference/autoscaling/put-scaling-policy.html) 命令来创建策略。

```
aws aas put-scaling-policy \
--service-namespace ecs \
--region us-east-1 \
--policy-name predictive-scaling-policy-example \
--resource-id service/MyCluster/test \
--policy-type PredictiveScaling \
--scalable-dimension ecs:service:DesiredCount \
--predictive-scaling-policy-configuration file://policy.json
```

如果成功，该命令会返回策略的 ARN。

```
{
    "PolicyARN": "arn:aws:autoscaling:us-east-1:012345678912:scalingPolicy:d1d72dfe-5fd3-464f-83cf-824f16cb88b7:resource/ecs/service/MyCluster/test:policyName/predictive-scaling-policy-example",
    "Alarms": []
}
```