有时,您可能会获得有关未来应用程序需求的其他信息,预测计算无法考虑这些信息。例如,预测计算值可能会低估即将开展的市场营销活动所需的容量。您可以使用计划操作在未来时段内临时覆盖预测。计划操作可以循环运行,也可以在出现一次性需求波动的特定日期和时间运行。
例如,您可以创建一个任务数高于预测值的计划操作。在运行时,Amazon ECS 会更新服务中的最小任务数。由于预测性扩缩是针对任务数进行优化的,因此最小任务数高于预测值的计划操作将会被执行。这样可以防止任务数低于预期数量。要停止覆盖预测值,请使用第二个计划操作将最小任务数恢复为原始设置。
以下过程概述了在将来期间覆盖预测的步骤。
重要
本主题假设您尝试覆盖预测,以扩展到比预测更高的容量。如果需要在不受预测性扩缩策略干扰的情况下暂时减少任务数,则请改用仅预测模式。使用“仅预测”模式时,预测性扩缩将会继续生成预测,但不会自动增加任务数。然后,您可以监控资源利用率,并根据需要手动减少所需任务数。
步骤 1:(可选)分析时间序列数据
首先分析预测时间序列数据。这是一个可选步骤,但如果您想了解预测的详细信息,它会很有帮助。
-
检索预测
创建预测后,您可以查询预测中的特定时间段。查询的目的是获得特定时间段的时间序列数据的完整视图。
您的查询最多可以包含两天的未来预测数据。如果您已经使用了一段时间预测式扩展,您还可以访问过去的预测数据。但是,开始和结束时间之间的最长持续时间为 30 天。
若要使用 get-predictive-scaling-forecast AWS CLI 命令获取预测,请在命令中提供以下参数:
-
在
resource-id
参数中输入集群的名称。 -
在
--policy-name
参数中输入策略的名称。 -
在
--start-time
参数中输入开始时间以仅返回在指定时间或之后的预测数据。 -
在
--end-time
参数中输入结束时间以仅返回在指定时间之前的预测数据。
aws application-autoscaling get-predictive-scaling-forecast \ --service-namespace ecs \ --resource-id service/MyCluster/test \ --policy-name
cpu40-predictive-scaling-policy
\ --scalable-dimension ecs:service:DesiredCount \ --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" }
此响应包括两个预测:
LoadForecast
和CapacityForecast
。LoadForecast
显示每小时负载预测。CapacityForecast
显示每小时处理预测负载所需的容量的预测值,同时保持TargetValue
为 40.0(平均 CPU 利用率为 40%)。 -
-
确定目标时间段
确定应发生一次性需求波动的小时数。请记住,预测中显示的日期和时间以 UTC 为单位。
步骤 2:创建两个计划操作
接下来,在应用程序的负载高于预测负载的特定时间段内创建两个计划操作。例如,如果您的营销活动会在有限时间段内使网站的流量增加,则可计划一个一次性操作以在其启动时更新最小容量。然后,安排另一个操作,以便在事件结束时将最小容量返回到原始设置。
-
在 Clusters(集群)页面上,选择集群。
-
在“集群详细信息”页面,找到服务部分,然后选择服务。
此时系统会显示服务详细信息页面。
-
选择服务自动扩缩。
此时将显示策略页面。
-
选择计划操作,然后选择创建。
此时将显示“创建计划”操作页面。
-
对于 操作名称,输入唯一的名称。
-
对于时区,请选择时区。
列出的所有时区均来自 IANA 时区数据库。有关详细信息,请参阅 List of tz database time zones
。 -
对于启动时间,输入操作启动的日期和时间。
-
对于 Recurrence (重复次数),选择 Once (一次)。
-
对于任务调整下的“最小值”,输入一个小于或等于最大任务数的值。
-
选择创建计划操作。
此时将显示策略页面。
-
配置第二个计划操作,以在事件结束时将最小任务数恢复为原始设置。预测性扩缩只能在设置的最小值小于预测值时扩缩任务数。
为一次性事件创建两个计划操作 (AWS CLI)
要使用 AWS CLI 创建计划操作,请使用 put-scheduled-update-group-action 命令。
例如,让我们定义一个时间表,在 5 月 19 日下午 5:00 时保持最少三个实例的容量,持续 8 小时。以下命令显示如何实现此方案。
第一个 put-scheduled-update-group-action 命令指示 Amazon EC2 Auto Scaling 在 2021 年 5 月 19 日 UTC 下午 5:00 更新指定 Auto Scaling 组的最小容量。
aws autoscaling put-scheduled-update-group-action --scheduled-action-name
my-event-start
\ --auto-scaling-group-namemy-asg
--start-time "2021-05-19T17:00:00Z
" --minimum-capacity3
第二个命令指示 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-namemy-asg
--start-time "2021-05-20T01:00:00Z
" --minimum-capacity1
将这些计划操作添加到 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 ECS 服务。