创建预测性扩展策略 - Amazon EC2 Auto Scaling
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

创建预测性扩展策略

以下过程可帮助您使用 Amazon Web Services Management Console 或创建预测性扩展策略 Amazon CLI。

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

创建预测式扩展策略(控制台)

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

按照以下程序,使用预定义的指标(每个目标的 CPU、网络 I/O 或应用程序负载均衡器请求数)创建预测性扩缩策略。创建预测性扩缩策略的最简单方式,是使用预定义指标。如果您希望使用自定义指标,请参阅 通过控制台创建预测性扩缩策略(自定义指标)

创建预测式扩展策略
  1. 访问 https://console.aws.amazon.com/ec2/,打开 Amazon EC2 控制台,然后从导航窗格中选择 Auto Scaling Groups(Auto Scaling 组)。

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

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

  3. 自动扩展选项卡的扩展策略中,选择创建预测式扩展策略

  4. 输入策略的名称。

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

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

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

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

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

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

    如果您的扩展指标是... 然后目标利用率表示...
    CPU

    每个实例理想情况下应使用的 CPU 百分比。

    网络输入

    每个实例理想情况下应接收的平均每分钟字节数。

    网络输出

    每个实例理想情况下应发出的平均每分钟字节数。

    每目标的 Application Load Balancer 请求计数

    每个实例理想情况下应接收的平均每分钟请求数。

  8. (可选)对于预启动实例,请选择您希望在预测调用增加负载之前启动实例的距离。

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

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

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

  11. 选择创建预测式扩展策略

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

要使用自定义指标创建预测性扩缩策略,您必须执行以下操作:

  • 您必须提供原始查询,让 Amazon EC2 Auto Scaling 与中的指标进行交互 CloudWatch。有关更多信息,请参阅使用自定义指标进行高级预测性扩展策略配置。为确保 Amazon EC2 Auto Scaling 可以从中提取指标数据 CloudWatch,请确认每个查询都返回了数据点。使用 CloudWatch 控制台或 CloudWatch GetMetricDataAPI 操作进行确认。

    注意

    我们在 Amazon EC2 Auto Scaling 控制台中的 JSON 编辑器中提供了示例 JSON 负载。这些示例为您提供了添加由提供的其他 CloudWatch 指标 Amazon 或您之前发布到的指标所需的键值对的参考。 CloudWatch您可以将这些示例负载作为起点,然后根据需要进行自定义。

  • 如果您使用任何指标数学,则必须手动构造适合您的独特应用场景的 JSON。有关更多信息,请参阅使用指标数学表达式。在策略中使用指标数学之前,请确认基于指标数学表达式的指标查询有效并返回了单个时间序列。使用 CloudWatch 控制台或 CloudWatch GetMetricDataAPI 操作进行确认。

如果因提供的数据错误(例如自动扩缩组名称出错),您的查询出现错误,则预测将没有任何数据。要排查自定义指标问题,请参阅 注意事项和问题排查

创建预测式扩展策略
  1. 访问 https://console.aws.amazon.com/ec2/,打开 Amazon EC2 控制台,然后从导航窗格中选择 Auto Scaling Groups(Auto Scaling 组)。

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

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

  3. 自动扩展选项卡的扩展策略中,选择创建预测式扩展策略

  4. 输入策略的名称。

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

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

  6. 对于 Metrics(指标),选择 Custom metric pair(自定义指标对)。

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

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

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

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

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

  8. (可选)对于预启动实例,请选择您希望在预测调用增加负载之前启动实例的距离。

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

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

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

  11. 选择创建预测式扩展策略

创建预测式扩展策略 (Amazon CLI)

使用以下方法为您 Amazon CLI 的 Auto Scaling 组配置预测性扩展策略。将每个用户输入占位符替换为您自己的信息。

有关您可以指定的 CloudWatch 指标的更多信息,请参阅 Amazon EC2 Auto Scaling API 参考PredictiveScalingMetricSpecification中的。

示例 1:创建预测但不扩展的预测式扩展策略

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

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

要从命令行创建策略,请在指定配置文件的情况下运行该put-scaling-policy命令,如以下示例所示。

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:预测和扩展的预测式扩展策略

对于允许 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命令,如以下示例所示。

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 Resource Name (ARN)。

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

示例 3:可扩展大于最大容量的预测式扩展策略

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

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

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

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

要创建此策略,请使用指定的配置文件运行put-scaling-policy命令,如以下示例所示。

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 Resource Name (ARN)。

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