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

使用计划操作来覆盖 Amazon ECS 的预测值

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

例如,您可以创建一个任务数高于预测值的计划操作。在运行时,Amazon ECS 会更新服务中的最小任务数。由于预测性扩缩是针对任务数进行优化的,因此最小任务数高于预测值的计划操作将会被执行。这样可以防止任务数低于预期数量。要停止覆盖预测值,请使用第二个计划操作将最小任务数恢复为原始设置。

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

重要

本主题假设您尝试覆盖预测,以扩展到比预测更高的容量。如果需要在不受预测性扩缩策略干扰的情况下暂时减少任务数,则请改用仅预测模式。使用“仅预测”模式时,预测性扩缩将会继续生成预测,但不会自动增加任务数。然后,您可以监控资源利用率,并根据需要手动减少所需任务数。

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

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

  1. 检索预测

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

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

    若要使用 get-predictive-scaling-forecast Amazon 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" }

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

  2. 确定目标时间段

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

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

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

  1. https://console.aws.amazon.com/ecs/v2 打开控制台。

  2. Clusters(集群)页面上,选择集群。

  3. 在“集群详细信息”页面,找到服务部分,然后选择服务。

    此时系统会显示服务详细信息页面。

  4. 选择服务自动扩缩

    此时将显示策略页面。

  5. 选择计划操作,然后选择创建

    此时将显示“创建计划”操作页面。

  6. 对于 操作名称,输入唯一的名称。

  7. 对于时区,请选择时区。

    列出的所有时区均来自 IANA 时区数据库。有关详细信息,请参阅 List of tz database time zones

  8. 对于启动时间,输入操作启动的日期时间

  9. 对于循环,选择一次

  10. 对于任务调整下的“最小值”,输入一个小于或等于最大任务数的值。

  11. 选择创建计划操作

    此时将显示策略页面。

  12. 配置第二个计划操作,以在事件结束时将最小任务数恢复为原始设置。预测性扩缩只能在设置的最小值小于预测值时扩缩任务数。

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

要使用 Amazon 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 更新指定自动扩缩组的最小容量。

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

将这些计划操作添加到自动扩缩组后,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 服务