使用计划操作覆盖预测值 - Amazon EC2 Auto Scaling
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

使用计划操作覆盖预测值

有时,您可能会获得有关未来应用程序需求的其他信息,预测计算无法考虑这些信息。例如,预测计算可能会低估即将举行的市场营销活动所需的容量。您可以使用计划操作在未来时段内临时覆盖预测。计划操作可以循环运行,也可以在出现一次性需求波动的特定日期和时间运行。

例如,您可以创建具有高于预测容量的最小容量的计划操作。运行时,Amazon EC2 Auto Scaling 会更新 Auto Scaling 组的最小容量。由于预测式扩展可针对容量进行优化,因此执行最小容量高于预测值的计划操作。这样可以防止容量低于预期。要停止覆盖预测,请使用第二个计划操作将最小容量恢复到其原始设置。

以下过程概述了在将来期间覆盖预测的步骤。

步骤 1:(可选)分析时间序列数据

首先分析预测时间序列数据。这是一个可选步骤,但如果您想了解预测的详细信息,它会很有帮助。

  1. 检索预测

    创建预测后,您可以查询预测中的特定时间段。查询的目的是获得特定时间段的时间序列数据的完整视图。

    您的查询最多可以包含两天的未来预测数据。如果您已经使用了一段时间预测式扩展,您还可以访问过去的预测数据。但是,开始和结束时间之间的最长持续时间为 30 天。

    要使用命令获取预测,get-predictive-scaling-forecast Amazon CLI 请在命令中提供以下参数:

    • --auto-scaling-group-name 参数中输入 Auto Scaling 组的名称。

    • --policy-name 参数中输入策略的名称。

    • --start-time 参数中输入开始时间以仅返回在指定时间或之后的预测数据。

    • --end-time 参数中输入结束时间以仅返回在指定时间之前的预测数据。

    aws autoscaling get-predictive-scaling-forecast --auto-scaling-group-name my-asg \ --policy-name cpu40-predictive-scaling-policy \ --start-time "2021-05-19T17:00:00Z" \ --end-time "2021-05-19T23:00:00Z"

    如果成功,该命令将返回类似于以下示例的数据。

    { "LoadForecast": [ { "Timestamps": [ "2021-05-19T17:00:00+00:00", "2021-05-19T18:00:00+00:00", "2021-05-19T19:00:00+00:00", "2021-05-19T20:00:00+00:00", "2021-05-19T21:00:00+00:00", "2021-05-19T22:00:00+00:00", "2021-05-19T23:00:00+00:00" ], "Values": [ 153.0655799339254, 128.8288551285919, 107.1179447150675, 197.3601844551528, 626.4039934516954, 596.9441277518481, 677.9675713779869 ], "MetricSpecification": { "TargetValue": 40.0, "PredefinedMetricPairSpecification": { "PredefinedMetricType": "ASGCPUUtilization" } } } ], "CapacityForecast": { "Timestamps": [ "2021-05-19T17:00:00+00:00", "2021-05-19T18:00:00+00:00", "2021-05-19T19:00:00+00:00", "2021-05-19T20:00:00+00:00", "2021-05-19T21:00:00+00:00", "2021-05-19T22:00:00+00:00", "2021-05-19T23:00:00+00:00" ], "Values": [ 2.0, 2.0, 2.0, 2.0, 4.0, 4.0, 4.0 ] }, "UpdateTime": "2021-05-19T01:52:50.118000+00:00" }

    此响应包括两个预测:LoadForecastCapacityForecastLoadForecast 显示每小时负载预测。CapacityForecast 显示每小时处理预测负载所需的容量的预测值,同时保持 TargetValue 为 40.0(平均 CPU 利用率为 40%)。

  2. 确定目标时间段

    确定应发生一次性需求波动的小时数。请记住,预测中显示的日期和时间以 UTC 为单位。

步骤 2:创建两个计划操作

接下来,在应用程序的负载高于预测负载的特定时间段内创建两个计划操作。例如,如果您的营销活动会在有限时间段内使网站的流量增加,则可计划一个一次性操作以在其启动时更新最小容量。然后,安排另一个操作,以便在事件结束时将最小容量返回到原始设置。

为一次性事件创建两个计划操作(控制台)
  1. 访问 https://console.aws.amazon.com/ec2/,打开 Amazon EC2 控制台,然后从导航窗格中选择 Auto Scaling Groups(Auto Scaling 组)。

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

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

  3. Automatic scaling(自动扩展)选项卡上的 Scheduled actions(计划操作)中,选择 Create scheduled action(创建计划操作)。

  4. 填写以下计划操作设置:

    1. 为计划操作输入名称

    2. 对于最小值,输入 Auto Scaling 组的最小新容量。最小值必须小于或等于组的最大大小。如果最小值大于该组的最大大小,则必须更新最大值

    3. 对于 Recurrence (重复次数),选择 Once (一次)

    4. 对于时区,请选择时区。如果未选择任何时区,预设情况下使用 ETC/UTC

    5. 定义特定开始时间

  5. 选择创建

    控制台将显示 Auto Scaling 组的计划操作。

  6. 配置第二个计划操作,以在事件结束时将最小容量返回原始设置。预测式扩展只能在设置最小值小于预测值时扩展容量。

为一次性事件创建两个计划操作 (Amazon CLI)

要使用创建计划操作,请使用 put-scheduled-update-group-action 命令。 Amazon CLI

例如,让我们定义一个时间表,在 5 月 19 日下午 5:00 时保持最少三个实例的容量,持续 8 小时。以下命令显示如何实现此方案。

第一个put-scheduled-update-group操作命令指示 Amazon EC2 Auto Scaling 在世界标准时间 2021 年 5 月 19 日下午 5:00 更新指定 Auto Scaling 组的最小容量。

aws autoscaling put-scheduled-update-group-action --scheduled-action-name my-event-start \ --auto-scaling-group-name my-asg --start-time "2021-05-19T17:00:00Z" --minimum-capacity 3

第二个命令指示 Amazon EC2 Auto Scaling 将该组的最小容量设置为 2021 年 5 月 20 日 UTC 上午 1:00。

aws autoscaling put-scheduled-update-group-action --scheduled-action-name my-event-end \ --auto-scaling-group-name my-asg --start-time "2021-05-20T01:00:00Z" --minimum-capacity 1

将这些计划操作添加到 Auto Scaling 组后,Amazon EC2 Auto Scaling 将执行以下操作:

  • 2021 年 5 月 19 日下午 5:00,第一个计划的操作将运行。如果组中当前已少于三个实例,则该组会扩展到三个实例。在此期间和接下来的八小时内,如果预测容量高于实际容量,或者如果有动态扩展策略生效,Amazon EC2 Auto Scaling 可以继续向外扩展。

  • 2021 年 5 月 20 日上午 1:00,将运行第二个计划的操作。这将在事件结束时将最小容量恢复为其原始设置。

根据重复性计划进行扩展

要覆盖每周相同时间段的预测,请创建两个计划操作,并使用 cron 表达式提供时间和日期逻辑。

此 cron 表达式格式包含五个空格分隔的字段:[Minute] [Hour] [Day_of_Month] [Month_of_Year] [Day_of_Week]。字段可以包含任何允许的值,包括特殊字符。

例如,下面的 cron 表达式在每周二上午 6:30 运行操作。星号用作通配符,以匹配字段的所有值。

30 6 * * 2

另请参阅

有关如何创建、列出、编辑和删除计划操作的更多信息,请参阅 Amazon EC2 Auto Scaling 的计划扩缩