为 Auto Scaling 组创建预测性扩展策略 - Amazon A EC2 uto Scaling

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

为 Auto Scaling 组创建预测性扩展策略

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

如果 Auto Scaling 组是新的,则它必须提供至少 24 小时的数据,Amazon A EC2 uto Scaling 才能为其生成预测。

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

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

使用以下过程使用预定义指标(CPU网络 I/O 或每个目标的 Application Load Balancer 请求数)创建预测性扩展策略。创建预测性扩缩策略的最简单方式,是使用预定义指标。如果您希望使用自定义指标,请参阅 通过控制台创建预测性扩缩策略(自定义指标)

创建预测式扩展策略
  1. 在上打开亚马逊EC2控制台 https://console.aws.amazon.com/ec2/,然后从导航窗格中选择 A uto Scaling Gro ups。

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

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

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

  4. 输入策略的名称。

  5. 开启 “基于预测扩展”,授予 Amazon A EC2 uto Scaling 立即开始扩展的权限。

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

  6. 对于指标,从选项列表中选择指标。选项包括 “网络输入” CPU、“网络输”、“App lication Load Balancer 请求计数” 和 “自定义指标对”。

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

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

  7. 对于目标利用率,输入 Amazon A EC2 uto Scaling 应保持的目标值。Amazon A EC2 uto Scaling 会扩展您的容量,直到平均利用率达到目标利用率或达到您指定的最大实例数。

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

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

    网络输入

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

    网络输出

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

    每目标的 Application Load Balancer 请求计数

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

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

  9. (可选)对于最大容量行为,请选择当预测容量超过定义的最大容量时,是否让 Amazon A EC2 uto Scaling 向外扩展到高于组的最大容量。通过开启此设置,您将可以在预测您的流量会触及最大值期间进行横向扩展。

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

    如果设置为 0,Amazon A EC2 uto Scaling 可能会将容量扩展到高于最大容量以等于但不超过预测容量。

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

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

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

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

    注意

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

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

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

创建预测式扩展策略
  1. 在上打开亚马逊EC2控制台 https://console.aws.amazon.com/ec2/,然后从导航窗格中选择 A uto Scaling Gro ups。

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

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

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

  4. 输入策略的名称。

  5. 开启 “基于预测扩展”,授予 Amazon A EC2 uto Scaling 立即开始扩展的权限。

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

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

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

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

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

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

  7. 对于目标利用率,输入 Amazon A EC2 uto Scaling 应保持的目标值。Amazon A EC2 uto Scaling 会扩展您的容量,直到平均利用率达到目标利用率或达到您指定的最大实例数。

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

  9. (可选)对于最大容量行为,请选择当预测容量超过定义的最大容量时,是否让 Amazon A EC2 uto Scaling 向外扩展到高于组的最大容量。通过开启此设置,您将可以在预测您的流量会触及最大值期间进行横向扩展。

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

    如果设置为 0,Amazon A EC2 uto Scaling 可能会将容量扩展到高于最大容量以等于但不超过预测容量。

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

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

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

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

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

以下示例策略显示了一个完整的策略配置,该配置使用CPU利用率指标进行预测性扩展,目标利用率为40ForecastOnly默认情况下使用 mode,除非您明确指定要使用哪种模式。将此配置保存在名为 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 资源名称 (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 A EC2 uto Scaling 进行预测和扩展的策略,请添加值为的属性ModeForecastAndScale。以下示例显示了使用 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 资源名称 (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 A EC2 uto Scaling 不会将您的EC2容量扩展到高于您定义的最大容量。但是,如果让它扩展更高,容量稍微增加以避免性能或可用性问题,可能会有所帮助。

要在 Amazon A EC2 uto 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 资源名称 (ARN)。

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