

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

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

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

要使用创建重复计划 Amazon Web Services 管理控制台，请指定计划操作的重复模式、时区、开始时间和可选的结束时间。所有重复模式选项都基于 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 将不会在结束时间执行计划操作。
+ 使用 Amazon 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 点开始。

如果您使用创建计划操作 Amazon Web Services 管理控制台 并指定遵守 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 个计划的操作。