

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

# Amazon EC2 Auto Scaling 的缩放冷却时间
<a name="ec2-auto-scaling-scaling-cooldowns"></a>

**重要**  
作为最佳实践，我们建议您不要使用简单扩缩策略和扩缩冷却。目标跟踪扩缩策略或步进扩缩策略更能提升扩缩性能。对于随着扩缩指标值的减小或增加而按比例更改 Auto Scaling 组大小的扩缩策略，我们建议采用[目标跟踪](as-scaling-target-tracking.md)而不是简单扩缩或分步扩缩。

当您为自动扩缩组创建简单的扩缩策略时，我们建议您同时配置扩缩冷却。

在您的 Auto Scaling 组启动或终止实例后，它首先等待冷却时间结束，然后才能启动简单扩缩策略启动的任何扩缩活动。冷却时间的用途是让您的自动扩缩组在先前的扩缩活动产生明显的作用之前保持稳定，防止其启动或终止其他实例。

例如，假设一个有关 CPU 利用率的简单扩缩策略建议启动两个实例。Amazon EC2 Auto Scaling 会启动两个实例，然后暂停扩缩活动，直到冷却时间结束。冷却时间结束后，简单扩缩策略启动的任何扩缩活动都可以恢复。如果 CPU 利用率再次超过告警阈值上限，则 Auto Scaling 组将再次横向扩展，而冷却时间也会再次生效。不过，如果两个实例足以将指标值降为正常水平，该组会保持其当前大小。

**Topics**
+ [注意事项](#cooldown-considerations)
+ [生命周期挂钩可能会导致额外的延迟](#cooldowns-lifecycle-hooks)
+ [更改原定设置冷却时间](#set-default-cooldown)
+ [为特定的简单扩缩策略设置冷却时间](#cooldowns-scaling-specific)

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

在使用简单扩缩策略和扩缩冷却时，应注意以下事项：
+ 目标跟踪扩缩策略和步进扩缩策略可以立即启动横向扩展活动，而无需等待冷却时间结束。相反，每当您的自动扩缩组启动实例时，单个实例都有一个预热时间。有关更多信息，请参阅 [为 Auto Scaling 组设置原定设置实例预热](ec2-auto-scaling-default-instance-warmup.md)。
+ 当横向扩展活动正在进行时，所有目标跟踪和步进扩缩横向缩减活动都将被阻止，直到实例完成预热。当自动扩缩组处于冷却时间时，横向缩减活动也可能会延迟。
+ 当计划的操作在计划的时间开始时，它还可能会立即启动扩缩活动，而无需等待冷却时间结束。
+ 如果实例运行不正常，Amazon EC2 Auto Scaling 不会等到冷却时间结束才替换运行不正常的实例。
+ 当多个实例启动或终止时，冷却时间（无论是原定设置冷却还是特定于扩缩策略的冷却）会从最后一个实例完成启动或终止时开始生效。
+ 当您手动扩展 Auto Scaling 组时，预设情况下不会等待冷却时间结束。但是，在使用 Amazon CLI 或 SDK 进行手动缩放时，您可以覆盖此行为并遵守默认的冷却时间。
+ 预设情况下，Elastic Load Balancing 会等待 300 秒，以便完成注销（Connection Draining）过程。如果组位于 Elastic Load Balance 负载均衡器后面，它将等待终止的实例完成注销，然后再开始计算冷却时间。

## 生命周期挂钩可能会导致额外的延迟
<a name="cooldowns-lifecycle-hooks"></a>

如果触发了[生命周期钩子](lifecycle-hooks.md)，则冷却时间将在您完成生命周期操作后或超时时间结束后开始计算。例如，假设某个 Auto Scaling 组具有一个有关实例启动的生命周期钩子。当应用程序需求增加时，该组会启动实例以增加容量。由于存在生命周期钩子，所以实例将置于等待状态，并且由简单扩缩策略触发的扩缩活动将被暂停。当实例进入 `InService` 状态时，冷却时间开始。冷却时间结束后，将恢复简单扩缩策略活动。

启用 Elastic Load Balancing 时，对于横向缩减，冷却时间从选择终止的实例开始连接耗尽（取消注册延迟）时开始。冷却时间不会等待连接耗尽完成或生命周期挂钩完成其操作。这意味着，横向缩减事件的结果反映在组的容量中后，因简单扩缩策略触发的任何扩缩活动都可以立即恢复。否则，等待所有三个活动（Connection Draining、生命周期钩子和冷却时间）完成会显著增加 Auto Scaling 组暂停扩缩所需的时间量。

## 更改原定设置冷却时间
<a name="set-default-cooldown"></a>

首次在 Amazon EC2 Auto Scaling 控制台中创建 Auto Scaling 组时，您将无法设定原定设置冷却。预设情况下，此冷却时间设置为 300 秒（5 分钟）。如果需要，您可以在创建组后更新此设置。

**更改原定设置冷却时间（控制台）**  
创建 Auto Scaling 组后，在 **Details**（详细信息）选项卡上，依次选择**Advanced configurations**（高级配置）、**Edit**（编辑）。对于 **Default cooldown**（原定设置冷却），请根据实例启动时间或其他应用程序需求选择所需的时长。

**更改原定设置冷却时间（Amazon CLI）**  
使用以下命令更改新的或现有 Auto Scaling 组的原定设置冷却。如果未定义原定设置冷却，则使用 300 秒的原定设置。
+ [create-auto-scaling-group](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/create-auto-scaling-group.html)
+ [update-auto-scaling-group](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/update-auto-scaling-group.html)

要确认默认冷却时间值，请使用[describe-auto-scaling-groups](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/describe-auto-scaling-groups.html)命令。

## 为特定的简单扩缩策略设置冷却时间
<a name="cooldowns-scaling-specific"></a>

预设情况下，所有简单扩缩策略都使用为 Auto Scaling 组定义的原定设置冷却时间。要设置特定简单扩缩策略的冷却时间，请在创建或更新策略时使用可选的冷却参数。在为策略指定冷却时间时，它将覆盖原定设置冷却。

对于扩缩策略特定的冷却时间，一个常见的使用场景是横向缩减策略。由于此策略是要终止实例，Amazon EC2 Auto Scaling 需要较短的时间来确定是否终止其他实例。终止实例应该是比启动实例快得多的操作。因此，300 秒的默认冷却时间太长。在这种情况下，为横向缩减策略设置一个具有较低值的扩缩策略特定冷却时间，可让该组更快横向缩减，从而帮助降低成本。

要在控制台中创建或更新简单扩缩策略，请在创建该组之后选择 **Automatic scaling**（弹性伸缩）选项卡。要使用创建或更新简单的扩展策略 Amazon CLI，请使用[put-scaling-policy](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/put-scaling-policy.html)命令。有关更多信息，请参阅 [步进和简单扩展策略](as-scaling-simple-step.md)。