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

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

Amazon EC2 Auto Scaling 的计划扩缩

计划扩缩使您可以按照可预测的负载变化来设置您自己的扩缩计划。例如,假设您的 Web 应用程序的流量会在每周的星期三开始增加,并在星期四保持高流量状态,然后在星期五开始下降。您可以配置 Amazon EC2 Auto Scaling 的计划,以在星期三增加容量并在星期五减少容量。

要使用计划的缩放,请创建计划操作。计划操作会作为时间和日期的函数自动执行。创建计划操作时,您可以指定缩放活动应该在何时发生,以及缩放操作的新的所需大小、最小大小和最大大小。您可以创建仅扩展一次或按重复计划扩展的计划操作。

注意事项

创建计划的操作时,请记住以下内容:

  • 计划操作将最小、最大和所需大小设置为由计划操作在计划操作所指定的时间指定的大小。请求可以选择只包含这些大小中的一个。例如,您可以创建仅指定所需容量的计划操作。但是,在某些情况下,您必须包括最小和最大大小,以确保您在操作中指定的新所需容量不超出这些限制。

  • 预设情况下,您设置的重复计划采用协调世界时 (UTC)。您可以更改时间以符合本地时区或您的网络中其他部分的时区。如果您指定的时区遵守 Daylight Saving Time (DST),它会自动调整 DST。

  • 您可以暂时关闭 Auto Scaling 组的计划扩展,方法是暂停 ScheduledActions 过程。这有助于防止计划操作处于活动状态,而无需将其删除。然后,当您想要再次使用时,您可以恢复计划的扩展。有关更多信息,请参阅 暂停和恢复 Auto Scaling 组的进程

  • 可以保证同组内计划操作的执行顺序正确,但不保证跨组的计划操作的执行顺序正确。

  • 计划操作的执行时间一般为几秒钟。然而,该操作可能会比计划的开始时间延迟最多两分钟。因为系统将按照计划操作的顺序来执行 Auto Scaling 组内的操作,所以计划开始时间彼此接近的计划操作可能需要更长时间才能执行。

定期安排

您可以创建计划的操作,根据定期计划调整 Auto Scaling 组。

要使用 Amazon CLI 或 SDK 创建重复性的计划,请指定一个 cron 表达式和时区来描述何时重复执行该计划操作。您可以选择指定开始时间和/或结束时间的日期和时间。

若要使用 Amazon Web Services Management Console 中,指定定定期操作的重复模式、时区、开始时间和可选结束时间。所有重复模式选项都基于 cron 表达式。或者,您可以编写您自己的 Cron 表达式。

受支持的 cron 表达式格式由用空格分隔的五个字段组成:[Minute] [Hour] [Day_of_Month] [Month_of_Year] [Day_of_Week]。例如,Cron 表达式 30 6 * * 2 配置每周二的早上 6:30 再执行的计划操作。星号用作通配符,以匹配字段的所有值。有关 cron 表达式的其他示例,请参阅 https://crontab.guru/examples.html。有关以此格式编写您自己的 cron 表达式的信息,请参阅 Crontab

仔细选择您的开始时间和结束时间。记住以下内容:

  • 如果您指定开始时间,Amazon EC2 Auto Scaling 将在该时间执行操作,然后根据重复计划执行操作。

  • 如果指定结束时间,则操作在此时间之后停止重复。在到达计划操作的结束时间后,它不会保留在您的账户中。

  • 当使用 Amazon CLI 或 SDK 时,开始时间和结束时间必须设置为 UTC。

创建和管理计划操作(控制台)

使用本部分中的过程可以使用 Amazon Web Services Management Console。

如果您使用控制台创建计划操作并指定遵守夏令时 (DST) 的时区,则循环计划以及开始和结束时间都会自动调整 DST。

创建计划的操作

完成以下过程可创建计划的操作以扩展您的 Auto Scaling 组。

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

  2. 选中您的 Auto Scaling 组旁边的复选框。

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

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

  4. 为计划操作输入名称

  5. 适用于所需容量最小值最大值中,选择新的所需组大小以及新的最小和最大容量。

  6. 对于 Recurrence(循环),请选择下列可用选项之一。

    • 如果您想要按循环计划进行扩展,请选择 Amazon EC2 Auto Scaling 运行计划操作的频率。

      • 如果您选择以 Every 开头的选项,则将为您创建 Cron 表达式。

      • 如果您选择 Cron,请输入 Cron 表达式,此表达式指定了执行操作的时间。

    • 如果只想缩放一次,请选择 Once(一次)。

  7. 对于时区,请选择时区。默认为 Etc/UTC

    注意

    列出的所有时区均来自 IANA 时区数据库。有关更多信息,请参阅https://en.wikipedia.org/wiki/List_of_tz_database_time_zones

  8. 定义日期和时间特定开始时间

    • 如果您选择了循环计划,则开始时间将定义循环系列中第一个计划操作的运行时间。

    • 如果您选择了 Once 作为重复,则开始时间定义运行计划操作的日期和时间。

  9. (可选)对于循环计划,您可以通过选择设置 End Time,然后选择一个日期和时间 End Time

  10. 选择创建。控制台将显示 Auto Scaling 组的计划操作。

验证时间、日期和时区

要验证您的时间、日期和时区是否配置正确,在适用于 Auto Scaling 组的 Automatic scaling(弹性伸缩)选项卡上,选中 Scheduled actions(计划的操作)表中的 Start time(开始时间)、End time(结束时间)和 Time zone(时区)值。

Amazon EC2 Auto Scaling 显示您当地时间的开始时间结束时间值,对指定日期和时间应用 UTC 偏移。UTC 偏移量是本地时间与 UTC 之间的差值,以小时和分钟为单位。时区的值显示您请求的时区,例如 America/New_York

基于位置的时区(如 America/New_York)会根据夏令时自动调整。但是,基于 UTC 的时区(如 Etc/UTC 是绝对时间,不会针对 DST 进行调整。

例如对于您有一个定期计划,其时区为 America/New_York。第一个扩缩操作发生在 America/New_York DST 开始之前的时区。下一个扩缩操作发生在 America/New_York DST 开始之后的时区。第一个动作从当地时间 UTC-5 上午 8 点开始,而第二个时间从当地时间 UTC-4 凌晨 8 点开始。

更新计划的操作

创建计划操作后,您可以更新除名称之外的任何设置。

更新计划的操作
  1. 访问 https://console.aws.amazon.com/ec2/,打开 Amazon EC2 控制台,然后从导航窗格中选择 Auto Scaling Groups(Auto Scaling 组)。

  2. 选中您的 Auto Scaling 组旁边的复选框。

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

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

  4. 选择 Actions(操作)和 Edit(编辑)。

  5. 进行必要更改,然后选择 Save changes(保存更改)。

删除计划的操作

当您不再需要计划操作时,可以将其删除。

删除计划操作
  1. 访问 https://console.aws.amazon.com/ec2/,打开 Amazon EC2 控制台,然后从导航窗格中选择 Auto Scaling Groups(Auto Scaling 组)。

  2. 选择您的 Auto Scaling 组。

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

  4. 依次选择 Actions(操作)和 Delete(删除)。

  5. 当系统提示进行确认时,选择 Yes, Delete(是,删除)。

创建和管理计划操作 (Amazon CLI)

您可以使用创建和更新计划操作,这些操作只能缩放一次,也可以按循环计划缩放put-scheduled-update-group-行动命令。

创建仅发生一次的计划操作

要在指定的日期和时间仅弹性伸缩可扩展 Auto Scaling 小组一次,请使用 --start-time "YYYY-MM-DDThh:mm:ssZ" 选项。

示例:仅向外扩展一次

要在特定时间增加 Auto Scaling 组中正在运行的实例数量,请使用以下命令。

在为 --start-time(世界协调时 2021 年 3 月 31 日上午 8 点)指定的日期和时间,如果组中当前包含 3 个以下实例,则该组扩展到 3 个实例。

aws autoscaling put-scheduled-update-group-action --scheduled-action-name my-one-time-action \ --auto-scaling-group-name my-asg --start-time "2021-03-31T08:00:00Z" --desired-capacity 3
示例:仅向内扩展一次

要在特定时间减少 Auto Scaling 组中正在运行的实例数量,请使用以下命令。

在为 --start-time(世界协调时 2021 年 3 月 31 日下午 4 点)指定的日期和时间,如果组中当前包含多个实例,则该组缩减到 1 个实例。

aws autoscaling put-scheduled-update-group-action --scheduled-action-name my-one-time-action \ --auto-scaling-group-name my-asg --start-time "2021-03-31T16:00:00Z" --desired-capacity 1

创建按重复计划运行的计划操作

要按重复计划来计划扩缩,请使用 --recurrence "cron expression" 选项。

以下是指定 cron 表达式的计划操作的示例。

在指定的计划期间(每天凌晨 9:00 (UTC)),如果组当前已少于 3 个实例,则将向外扩展至 3 个实例。如果组当前有 3 个以上的实例,它可以扩展到 3 个实例。

aws autoscaling put-scheduled-update-group-action --scheduled-action-name my-recurring-action \ --auto-scaling-group-name my-asg --recurrence "0 9 * * *" --desired-capacity 3

创建指定时区的重复计划操作

默认情况下,计划操作设置为 UTC 时区。要指定不同的时区,请包含 --time-zone 选项并指定 IANA 时区的规范名称(例如,America/New_York)。有关更多信息,请参阅https://en.wikipedia.org/wiki/List_of_tz_database_time_zones

以下是创建重复计划操作以扩展容量时使用 --time-zone 选项的示例。

按照指定的计划(每周一至周五本地时间下午 6:00),如果组当前具有少于 2 个实例,则它将扩展到 2 个实例。如果组当前有 2 个以上的实例,则它可以扩展到 2 个实例。

aws autoscaling put-scheduled-update-group-action --scheduled-action-name my-recurring-action \ --auto-scaling-group-name my-asg --recurrence "0 18 * * 1-5" --time-zone "America/New_York" \ --desired-capacity 2

描述计划的操作

要描述 Auto Scaling 组的计划操作,请使用以下内容describe-scheduled-actions命令。

aws autoscaling describe-scheduled-actions --auto-scaling-group-name my-asg

如果成功,该命令返回类似以下内容的输出。

{ "ScheduledUpdateGroupActions": [ { "AutoScalingGroupName": "my-asg", "ScheduledActionName": "my-recurring-action", "Recurrence": "30 0 1 1,6,12 *", "ScheduledActionARN": "arn:aws:autoscaling:us-west-2:123456789012:scheduledUpdateGroupAction:8e86b655-b2e6-4410-8f29-b4f094d6871c:autoScalingGroupName/my-asg:scheduledActionName/my-recurring-action", "StartTime": "2020-12-01T00:30:00Z", "Time": "2020-12-01T00:30:00Z", "MinSize": 1, "MaxSize": 6, "DesiredCapacity": 4 } ] }

删除计划的操作

要删除计划操作,请使用以下命令delete-scheduled-action命令。

aws autoscaling delete-scheduled-action --auto-scaling-group-name my-asg \ --scheduled-action-name my-recurring-action

限制

  • 每个 Auto Scaling 组,计划操作的名称必须是唯一的。

  • 计划的操作必须具有唯一时间值。如果您尝试计划在已计划另一个扩展活动的时间进行活动,则该调用将被拒绝,并返回一个错误消息,指示已存在已存在已计划启动时间的计划操作。

  • 您最多可以为每个 Auto Scaling 组创建 125 个计划的操作。