

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

# Amazon EC2 Auto Scaling 的计划扩缩
<a name="ec2-auto-scaling-scheduled-scaling"></a>

借助计划扩缩，您可以根据可预测的负载变化来设置应用程序的自动扩缩。您可以创建计划操作，在特定时间增加或减少组的所需容量。

例如，您每周遇到规律的流量模式，即负载在一周的中间增加，而在接近周末时会下降。您可以在 Amazon EC2 Auto Scaling 中配置与此模式一致的扩缩计划：
+ 周三上午，一项计划操作通过增加先前设置的自动扩缩组所需容量来增加容量。
+ 周五晚上，另一项计划操作通过降低先前设置的自动扩缩组所需容量来减少容量。

利用这些计划的扩展操作，您可以优化成本和性能。您的应用程序有足够的容量来处理一周中间的流量高峰，但不会在其他时间过度预置不需要的容量。

您可以同时使用计划扩缩和扩缩策略，以获得两种扩缩方法的优势。运行计划的扩缩操作后，扩缩策略可以继续决定是否进一步扩缩容量。这有助于确保您有足够的容量来处理应用程序的负载。当您的应用程序扩展以满足需求时，当前容量必须在计划操作设置的最小容量和最大容量范围内。

**Topics**
+ [计划扩缩的工作原理](#scheduled-scaling-how-it-works)
+ [定期安排](#scheduled-scaling-recurring-schedules)
+ [时区](#scheduled-scaling-time-zone)
+ [注意事项](#scheduled-scaling-considerations)
+ [限制](#scheduled-scaling-limitations)
+ [创建计划的操作](scheduled-scaling-create-scheduled-action.md)
+ [查看计划操作详细信息](scheduled-scaling-view-scheduled-actions.md)
+ [删除计划的操作](scheduled-scaling-delete-scheduled-action.md)

## 计划扩缩的工作原理
<a name="scheduled-scaling-how-it-works"></a>

要使用计划扩缩，请创建指示 Amazon EC2 Auto Scaling 在特定时间执行扩缩活动的*计划操作*。创建计划操作时，请指定自动扩缩组、应进行扩缩活动的时间以及可选的新最小容量和新最大容量。您可以创建仅缩放一次或按循环计划缩放的计划操作。

在指定的时间，Amazon EC2 Auto Scaling 通过将当前容量与指定的所需容量进行比较，根据新容量值进行扩缩。
+ 如果当前容量小于指定的所需容量，Amazon EC2 Auto Scaling 会横向扩展（或添加实例）以达到指定的所需容量。
+ 如果当前容量大于指定的所需容量，Amazon EC2 Auto Scaling 会横向缩减（或移除实例）以达到指定的所需容量。

计划操作会设置指定日期和时间组的所需、最小和最大容量。一次只能为其中一种容量（例如，所需容量）创建计划操作。但是，在某些情况下，您必须包括最小和最大容量，以确保您在操作中指定的所需容量不会超出这些限制。

## 定期安排
<a name="scheduled-scaling-recurring-schedules"></a>

要使用 AWS CLI 或 SDK 创建定期计划，请指定 cron 表达式和时区来描述该计划操作何时重演。您可以选择指定开始时间和/或结束时间的日期和时间。

要使用创建重复计划 AWS 管理控制台，请指定计划操作的重复模式、时区、开始时间和可选的结束时间。所有重复模式选项都基于 cron 表达式。或者，您可以编写您自己的 Cron 表达式。

受支持的 cron 表达式格式由用空格分隔的五个字段组成：[Minute] [Hour] [Day\$1of\$1Month] [Month\$1of\$1Year] [Day\$1of\$1Week]。例如，Cron 表达式 `30 6 * * 2` 配置每周二的早上 6:30 再执行的计划操作。星号用作通配符，以匹配字段的所有值。有关 cron 表达式的其他示例，请参见[https://crontab.guru/examples.html](https://crontab.guru/examples.html)。有关以此格式编写您自己的 cron 表达式的信息，请参阅 [Crontab](http://crontab.org)。

仔细选择您的开始时间和结束时间。记住以下内容：
+ 如果您指定开始时间，Amazon EC2 Auto Scaling 将在该时间执行操作，然后根据重复计划执行操作。
+ 如果指定结束时间，则操作在此时间之后停止重复。在到达计划操作的结束时间后，它不会保留在您的账户中。
+ 如果周期性时间与结束时间完全匹配，则 Amazon EC2 Auto Scaling 将不会在结束时间执行计划操作。
+ 使用 AWS CLI 或 SDK 时，必须以 UTC 格式设置开始时间和结束时间。

## 时区
<a name="scheduled-scaling-time-zone"></a>

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

有效值是互联网编号分配机构（IANA）时区数据库中时区的规范名称。例如，美国东部时间通常标识为 `America/New_York`。有关更多信息，请参阅 [https://www.iana.org/time-zones](https://www.iana.org/time-zones)。

基于位置的时区（如 `America/New_York`）会根据 DST 自动调整。但是，基于 UTC 的时区（如 `Etc/UTC` 是绝对时间，不会针对 DST 进行调整。

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

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

## 注意事项
<a name="scheduled-scaling-considerations"></a>

创建计划的操作时，请记住以下内容：
+ 可以保证同组内计划操作的执行顺序正确，但不保证跨组的计划操作的执行顺序正确。
+ 计划操作的运行时间一般为几秒钟。然而，该操作可能会比计划的开始时间延迟最多两分钟。因为系统将按照计划操作的顺序来执行 Auto Scaling 组内的操作，所以计划开始时间彼此接近的计划操作可能需要更长时间才能执行。
+ 您可以暂时关闭 Auto Scaling 组的计划扩展，方法是暂停 `ScheduledActions` 过程。这有助于防止计划操作处于活动状态，而无需将其删除。然后，当您想要再次使用时，您可以恢复计划的扩展。有关更多信息，请参阅 [暂停和恢复 Amazon EC2 Auto Scaling 进程](as-suspend-resume-processes.md)。
+ 创建计划操作后，您可以更新除名称之外的任何设置。
+ 当同一自动扩缩组内多个计划操作的 cron 表达式相同时，执行顺序将变为未定义的任意顺序。为确保行为的可预测性，各计划操作可使用唯一的计划开始时间。

## 限制
<a name="scheduled-scaling-limitations"></a>
+ 每个 Auto Scaling 组，计划操作的名称必须是唯一的。
+ 计划的操作必须具有唯一时间值。如果您尝试计划在已计划另一个扩展活动的时间进行活动，则该调用将被拒绝，并返回一个错误消息，指示已存在已存在已计划启动时间的计划操作。
+ 您最多可以为每个 Auto Scaling 组创建 125 个计划的操作。

# 创建计划的操作
<a name="scheduled-scaling-create-scheduled-action"></a>

要为自动扩缩组创建计划操作，请使用以下方法之一：

------
#### [ Console ]

**创建计划的操作**

1. 在上打开 Amazon EC2 控制台 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)，然后从导航窗格中选择 A **uto Scaling Gro** ups。

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

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

1. 在 **Automatic scaling**（自动扩展）选项卡上的 **Scheduled actions**（计划操作）中，选择 **Create scheduled action**（创建计划操作）。

1. 为计划操作输入**名称**。

1. 适用于**所需容量**、**最小值**、**最大值**中，选择新的所需组容量以及新的最小和最大大小限制。所需容量必须大于等于组的最小大小，小于等于组的最大大小。

1. 对于 **Recurrence**（循环），请选择下列可用选项之一。
   + 如果您想要按循环计划进行扩展，请选择 Amazon EC2 Auto Scaling 运行计划操作的频率。
     + 如果您选择以 **Every** 开头的选项，则将为您创建 Cron 表达式。
     + 如果您选择 **Cron**，请输入 Cron 表达式，此表达式指定了执行操作的时间。
   + 如果只想缩放一次，请选择 **Once**（一次）。

1. 对于**时区**，请选择时区。默认值为 `Etc/UTC`。

   列出的所有时区均来自 IANA 时区数据库。欲了解更多信息，请参阅 [https://en.wikipedia。 org/wiki/List\$1of\$1tz\$1database\$1time\$1zones。](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones)

1. 定义日期和时间**特定开始时间**。
   + 如果您选择了循环计划，则开始时间将定义循环系列中第一个计划操作的运行时间。
   + 如果您选择了 **Once** 作为重复，则开始时间定义运行计划操作的日期和时间。

1.  （可选）对于循环计划，您可以通过选择**设置 End Time**，然后选择一个日期和时间 **End Time**。

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

------
#### [ AWS CLI ]

要创建计划的操作，可以使用以下示例命令之一。将每个 *user input placeholder* 替换为您自己的信息。

**示例：仅扩展一次**  
使用以下带有`--start-time "YYYY-MM-DDThh:mm:ssZ"`和`--desired-capacity`选项的 [put-scheduled-update-group-action](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/put-scheduled-update-group-action.html) 命令。

```
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
```

**示例：根据周期性计划来计划扩展**  
使用以下带有`--recurrence "cron expression"`和`--desired-capacity`选项的 [put-scheduled-update-group-action](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/put-scheduled-update-group-action.html) 命令。

```
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
```

默认情况下，Amazon EC2 Auto Scaling 会根据 UTC 时区运行指定的周期性计划。要指定不同的时区，请包含 `--time-zone` 选项和 IANA 时区的名称，如下例所示。

```
--time-zone "America/New_York"
```

欲了解更多信息，请参阅 [https://en.wikipedia。 org/wiki/List\$1of\$1tz\$1database\$1time\$1zones。](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones)

------

# 查看计划操作详细信息
<a name="scheduled-scaling-view-scheduled-actions"></a>

要查看自动扩缩组即将执行的计划操作的详细信息，请使用以下方法之一：

------
#### [ Console ]

**查看计划操作详细信息**

1. 在上打开 Amazon EC2 控制台 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)，然后从导航窗格中选择 A **uto Scaling Gro** ups。

1. 选择您的 Auto Scaling 组。

1. 在**自动扩缩**选项卡的**计划操作**中，您可以查看即将执行的计划操作。

请注意，控制会以您的当地时间显示**开始时间**和**结束时间**值，并采用指定日期和时间生效的 UTC 偏移。UTC 偏移量是本地时间与 UTC 之间的差值，以小时和分钟为单位。**时区**的值显示您请求的时区，例如 `America/New_York`。

------
#### [ AWS CLI ]

使用以下 [describe-scheduled-actions](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/describe-scheduled-actions.html) 命令。

```
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
    }
  ]
}
```

------

## 验证扩缩活动
<a name="scheduled-scaling-verify-scaling-activities"></a>

要验证与计划扩缩相关联的扩缩活动，请参阅 [验证 Auto Scaling 组的扩缩活动](as-verify-scaling-activity.md)。

# 删除计划的操作
<a name="scheduled-scaling-delete-scheduled-action"></a>

要删除计划操作，请使用以下方法之一：

------
#### [ Console ]

**删除计划操作**

1. 在上打开 Amazon EC2 控制台 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)，然后从导航窗格中选择 A **uto Scaling Gro** ups。

1. 选择您的 Auto Scaling 组。

1. 在 **Automatic scaling**（自动扩展）选项卡上的 **Scheduled actions**（计划操作）中，选择计划操作。

1. 依次选择 **Actions**（操作）和 **Delete**（删除）。

1. 当系统提示进行确认时，选择 **Yes, Delete**（是，删除）。

------
#### [ AWS CLI ]

使用以下 [delete-scheduled-action](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/delete-scheduled-action.html) 命令。

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

------