

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 创建自动扩缩组的预测性扩展策略
<a name="predictive-scaling-create-policy"></a>

以下过程可帮助您使用 AWS 管理控制台 或创建预测性扩展策略 AWS CLI。

如果自动扩缩组为新组，则必须提供至少 24 小时的数据，然后 Amazon EC2 Auto Scaling 才会为其生成预测。

**Topics**
+ [创建预测式扩展策略（控制台）](#predictive-scaling-policy-console)
+ [创建预测式扩展策略 (AWS CLI）](#predictive-scaling-policy-aws-cli)

## 创建预测式扩展策略（控制台）
<a name="predictive-scaling-policy-console"></a>

如果这是您第一次创建预测性扩展策略，则建议您使用控制台在*仅预测*模式下创建多个预测性扩展策略。这样便可测试不同指标和目标值的潜在影响。您可以为每个 Auto Scaling 组创建多个预测式扩展策略，但只能将其中一个策略用于主动扩展。

### 通过控制台创建预测性扩缩策略（预定义指标）
<a name="create-a-predictive-scaling-policy-in-the-console"></a>

按照以下程序，使用预定义的指标（每个目标的 CPU、网络 I/O 或应用程序负载均衡器请求数）创建预测性扩缩策略。创建预测性扩缩策略的最简单方式，是使用预定义指标。如果您希望使用自定义指标，请参阅 [通过控制台创建预测性扩缩策略（自定义指标）](#create-a-predictive-scaling-policy-in-the-console-custom-metrics)。

**创建预测式扩展策略**

1. 在上打开 Amazon EC2 控制台 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)，然后从导航窗格中选择 A **uto Scaling Gro** ups。

1. 选中您的自动扩缩组旁边的复选框。

   这时将在页面底部打开一个拆分窗格。

1. 在**自动扩展**选项卡的**扩展策略**中，选择**创建预测式扩展策略**。

1. 输入策略的名称。

1. 启用**根据预测进行扩展**，授予 Amazon EC2 Auto Scaling 立即开始扩展的权限。

   若要将策略保持在*仅预测*模式，请保持**根据预测进行扩展**关闭状态。

1. 对于**指标**，从选项列表中选择指标。选项包括 **CPU**、**网络输入**、**网络输出**、**Application Load Balancer 请求计数**和**自定义指标对**。

   如果您选择**每目标的 Application Load Balancer 请求计数**，请在**目标组**中选择目标组。**每目标的 Application Load Balancer 请求计数**仅在您已将 Application Load Balancer 目标组附加到 Auto Scaling 组时才支持。

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

1. 对于**目标利用率**，请输入 Amazon EC2 Auto Scaling 应维护的目标值。Amazon EC2 Auto Scaling 可向外扩展您的容量直到平均利用率达到目标利用率，或直到达到您指定的最大实例数。    
[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/autoscaling/ec2/userguide/predictive-scaling-create-policy.html)

1. （可选）对于**预启动实例**，请选择您希望在预测调用增加负载之前启动实例的距离。

1. （可选）对于 **Max capacity behavior**（最大容量行为），请选择当预测容量超过定义的最大值时，是否允许 Amazon EC2 Auto Scaling 横向扩展至高于该组最大容量的水平。通过开启此设置，您将可以在预测您的流量会触及最大值期间进行横向扩展。

1. （可选）对于**高于预测容量的缓冲区最大容量**，选择在预测容量接近或超过最大容量时要使用的附加容量。该值是作为相对于预测容量的百分比指定的。例如，如果缓冲区为 10，这意味着 10% 的缓冲区。因此，如果预测容量为 50，最大容量为 40，则有效的最大容量是 55。

   如果设置为 0，Amazon EC2 Auto Scaling 可以将容量扩展到高于最大容量，直至等于但不能超过预测容量的水平。

1. 选择**创建预测式扩展策略**。

### 通过控制台创建预测性扩缩策略（自定义指标）
<a name="create-a-predictive-scaling-policy-in-the-console-custom-metrics"></a>

按照以下程序，使用自定义指标创建预测性扩缩策略。自定义指标可以包括提供的其他指标 CloudWatch 或您发布到的指标 CloudWatch。要使用每个目标的 CPU、网络 I/O 或应用程序负载均衡器请求数指标，请参阅 [通过控制台创建预测性扩缩策略（预定义指标）](#create-a-predictive-scaling-policy-in-the-console)。

要使用自定义指标创建预测性扩缩策略，您必须执行以下操作：
+ 您必须提供原始查询，让 Amazon EC2 Auto Scaling 与中的指标进行交互 CloudWatch。有关更多信息，请参阅 [使用自定义指标的高级预测性扩展策略](predictive-scaling-customized-metric-specification.md)。为确保 Amazon EC2 Auto Scaling 可以从中提取指标数据 CloudWatch，请确认每个查询都返回了数据点。使用 CloudWatch 控制台或 CloudWatch [GetMetricData](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_GetMetricData.html)API 操作进行确认。
**注意**  
我们在 Amazon EC2 Auto Scaling 控制台中的 JSON 编辑器中提供了示例 JSON 负载。这些示例为您提供了添加由提供的其他 CloudWatch 指标 AWS 或您之前发布到的指标所需的键值对的参考。 CloudWatch您可以将这些示例负载作为起点，然后根据需要进行自定义。
+ 如果您使用任何指标数学，则必须手动构造适合您的独特应用场景的 JSON。有关更多信息，请参阅 [使用指标数学表达式](using-math-expression-examples.md)。在策略中使用指标数学之前，请确认基于指标数学表达式的指标查询有效并返回了单个时间序列。使用 CloudWatch 控制台或 CloudWatch [GetMetricData](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_GetMetricData.html)API 操作进行确认。

如果因提供的数据错误（例如自动扩缩组名称出错），您的查询出现错误，则预测将没有任何数据。要排查自定义指标问题，请参阅 [预测性扩展策略中自定义指标的注意事项](custom-metrics-troubleshooting.md)。

**创建预测式扩展策略**

1. 在上打开 Amazon EC2 控制台 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)，然后从导航窗格中选择 A **uto Scaling Gro** ups。

1. 选中您的自动扩缩组旁边的复选框。

   这时将在页面底部打开一个拆分窗格。

1. 在**自动扩展**选项卡的**扩展策略**中，选择**创建预测式扩展策略**。

1. 输入策略的名称。

1. 启用**根据预测进行扩展**，授予 Amazon EC2 Auto Scaling 立即开始扩展的权限。

   若要将策略保持在*仅预测*模式，请保持**根据预测进行扩展**关闭状态。

1. 对于 **Metrics**（指标），选择 **Custom metric pair**（自定义指标对）。

   1. 对于**加载指标**，选择**自定义 CloudWatch 指标**以使用自定义指标。构造包含策略的负载指标定义的 JSON 负载，然后将其粘贴到 JSON 编辑器框中，替换其中已有的内容。

   1. 对于**缩放指标**，请选择**自定义 CloudWatch 指标**以使用自定义指标。构造包含策略的扩缩指标定义的 JSON 负载，然后将其粘贴到 JSON 编辑器框中，替换其中已有的内容。

   1. （可选）要添加自定义容量指标，请选中 **Add custom capacity metric**（添加自定义容量指标）复选框。构造包含策略的容量指标定义的 JSON 负载，然后将其粘贴到 JSON 编辑器框中，替换其中已有的内容。

      如果您的容量指标数据跨越多个自动扩缩组，则只需启用此选项即可创建新的容量时间序列。在这种情况下，必须使用指标数学将数据聚合成单个时间序列。

1. 对于**目标利用率**，请输入 Amazon EC2 Auto Scaling 应维护的目标值。Amazon EC2 Auto Scaling 可向外扩展您的容量直到平均利用率达到目标利用率，或直到达到您指定的最大实例数。

1. （可选）对于**预启动实例**，请选择您希望在预测调用增加负载之前启动实例的距离。

1. （可选）对于 **Max capacity behavior**（最大容量行为），请选择当预测容量超过定义的最大值时，是否允许 Amazon EC2 Auto Scaling 横向扩展至高于该组最大容量的水平。通过开启此设置，您将可以在预测您的流量会触及最大值期间进行横向扩展。

1. （可选）对于**高于预测容量的缓冲区最大容量**，选择在预测容量接近或超过最大容量时要使用的附加容量。该值是作为相对于预测容量的百分比指定的。例如，如果缓冲区为 10，这意味着 10% 的缓冲区。因此，如果预测容量为 50，最大容量为 40，则有效的最大容量是 55。

   如果设置为 0，Amazon EC2 Auto Scaling 可以将容量扩展到高于最大容量，直至等于但不能超过预测容量的水平。

1. 选择**创建预测式扩展策略**。

## 创建预测式扩展策略 (AWS CLI）
<a name="predictive-scaling-policy-aws-cli"></a>

使用以下方法为您 AWS CLI 的 Auto Scaling 组配置预测性扩展策略。将每个 {{user input placeholder}} 替换为您自己的信息。

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

### 示例 1：创建预测但不扩展的预测式扩展策略
<a name="predictive-scaling-configuration-ex1"></a>

以下示例策略显示了完整的策略配置，该配置使用 CPU 利用率指标进行预测式扩展，其中目标利用率为 `40`。默认使用 `ForecastOnly` 模式，除非您明确指定要使用的模式。将此配置保存在名为 `config.json` 的文件中。

```
{
    "MetricSpecifications": [
        {
            "TargetValue": {{40}},
            "PredefinedMetricPairSpecification": {
                "PredefinedMetricType": "{{ASGCPUUtilization}}"
            }
        }
    ]
}
```

要从命令行创建策略，请在指定配置文件的情况下运行该[put-scaling-policy](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/put-scaling-policy.html)命令，如以下示例所示。

```
aws autoscaling put-scaling-policy --policy-name {{cpu40-predictive-scaling-policy}} \
  --auto-scaling-group-name {{my-asg}} --policy-type PredictiveScaling \
  --predictive-scaling-configuration {{file://config.json}}
```

如果成功，此命令将返回策略的 Amazon Resource Name (ARN)。

```
{
  "PolicyARN": "arn:aws:autoscaling:region:account-id:scalingPolicy:2f4f5048-d8a8-4d14-b13a-d1905620f345:autoScalingGroupName/my-asg:policyName/cpu40-predictive-scaling-policy",
  "Alarms": []
}
```

### 示例 2：预测和扩展的预测式扩展策略
<a name="predictive-scaling-configuration-ex2"></a>

对于允许 Amazon EC2 Auto Scaling 预测和扩展的策略，请添加值为 `ForecastAndScale` 的属性 `Mode`。以下示例显示了使用 Application Load Balancer 请求计数指标的策略配置。目标利用率是 `1000`，并且预测式扩展设置为 `ForecastAndScale` 模式。

```
{
    "MetricSpecifications": [
        {
            "TargetValue": {{1000}},
            "PredefinedMetricPairSpecification": {
                "PredefinedMetricType": "{{ALBRequestCount}}",
                "ResourceLabel": "{{app/my-alb/778d41231b141a0f/targetgroup/my-alb-target-group/943f017f100becff}}"
            }
        }
    ],
    "Mode": "ForecastAndScale"
}
```

要创建此策略，请使用指定的配置文件运行[put-scaling-policy](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/put-scaling-policy.html)命令，如以下示例所示。

```
aws autoscaling put-scaling-policy --policy-name {{alb1000-predictive-scaling-policy}} \
  --auto-scaling-group-name {{my-asg}} --policy-type PredictiveScaling \
  --predictive-scaling-configuration {{file://config.json}}
```

如果成功，此命令将返回策略的 Amazon 资源名称（ARN）。

```
{
  "PolicyARN": "arn:aws:autoscaling:region:account-id:scalingPolicy:19556d63-7914-4997-8c81-d27ca5241386:autoScalingGroupName/my-asg:policyName/alb1000-predictive-scaling-policy",
  "Alarms": []
}
```

### 示例 3：可扩展大于最大容量的预测式扩展策略
<a name="predictive-scaling-configuration-ex3"></a>

以下示例显示如何创建一个策略，该策略可以在您需要它来处理高于正常负载时扩展高于组的最大大小限制。预设情况下，Amazon EC2 Auto Scaling 的 EC2 扩展容量不会超过您定义的最大容量。但是，如果让它扩展更高，容量稍微增加以避免性能或可用性问题，可能会有所帮助。

要为 Amazon EC2 Auto Scaling 提供空间，以便在容量预计达到或非常接近组的最大大小时配置额外容量，请指定 `MaxCapacityBreachBehavior` 和 `MaxCapacityBuffer` 属性，如以下示例所示。您必须指定值为 `IncreaseMaxCapacity` 的 `MaxCapacityBreachBehavior`。您的组可以具有的最大实例数取决于 `MaxCapacityBuffer` 值。

```
{
    "MetricSpecifications": [
        {
            "TargetValue": {{70}},
            "PredefinedMetricPairSpecification": {
                "PredefinedMetricType": "{{ASGCPUUtilization}}"
            }
        }
    ],
    "MaxCapacityBreachBehavior": "{{IncreaseMaxCapacity}}",
    "MaxCapacityBuffer": {{10}}
}
```

在本示例中，该策略配置为使用 10% 缓冲区 (`"MaxCapacityBuffer": 10`)，因此如果预测容量为 50 并且最大容量为 40，则实际的最大容量为 55。如果策略可以将容量扩展到高于最大容量以等于但不超过预测容量，则缓冲区为 0 (`"MaxCapacityBuffer": 0`)。

要创建此策略，请使用指定的配置文件运行[put-scaling-policy](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/put-scaling-policy.html)命令，如以下示例所示。

```
aws autoscaling put-scaling-policy --policy-name {{cpu70-predictive-scaling-policy}} \
  --auto-scaling-group-name {{my-asg}} --policy-type PredictiveScaling \
  --predictive-scaling-configuration {{file://config.json}}
```

如果成功，此命令将返回策略的 Amazon 资源名称（ARN）。

```
{
  "PolicyARN": "arn:aws:autoscaling:region:account-id:scalingPolicy:d02ef525-8651-4314-bf14-888331ebd04f:autoScalingGroupName/my-asg:policyName/cpu70-predictive-scaling-policy",
  "Alarms": []
}
```