

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

# 有关更多信息，请参阅 Amazon EC2 Auto Scaling 的步进和简单扩展策略
<a name="as-scaling-simple-step"></a>

分步扩展和简单扩展策略可根据 CloudWatch 警报以预定义的增量扩展 Auto Scaling 组的容量。您可以定义单独的扩缩策略，以便在超过警报阈值时处理横向扩展（增加容量）和横向缩减（减少容量）。

自动扩缩组容量是以实例数来计量的，如果采用[实例权重](ec2-auto-scaling-mixed-instances-groups-instance-weighting.md)，则以容量单位计量。此外，所需容量和当前容量之间也存在差异。
+ 所需容量：您想在组中拥有的实例数（或容量单位）。所需容量可以手动调整，也可以使用扩缩策略自动调整。
+ 当前容量：组中已完成预热和冷却，目前正在运行并准备投入使用的实例数（或容量单位）。

通过步进缩放和简单扩展，您可以创建和管理调用扩展过程的 CloudWatch 警报。当警报被触发时，Amazon EC2 Auto Scaling 会启动与该警报关联的扩缩策略。

强烈建议您使用目标跟踪扩缩策略，根据类似于平均 CPU 利用率或每个目标的平均请求数等指标进行扩展。使用目标跟踪，可以通过在容量增加时减少以及在容量减少时增加的指标，按比例扩展或缩减实例数。这有助于确保 Amazon EC2 Auto Scaling 密切遵循应用程序的需求曲线。有关更多信息，请参阅 [目标跟踪扩展策略](as-scaling-target-tracking.md)。

**Contents**
+ [分步扩缩策略的工作原理](#step-scaling-how-it-works)
+ [步进扩展的分步调整](#as-scaling-steps)
+ [扩展调整类型](#as-scaling-adjustment)
+ [实例预热](#as-step-scaling-warmup)
+ [注意事项](#step-scaling-considerations)
+ [为横向扩展创建步进扩缩策略](step-scaling-create-scale-out-policy.md)
+ [为横向缩减创建步进扩缩策略](step-scaling-create-scale-in-policy.md)
+ [简单扩展策略](simple-scaling-policies.md)

## 分步扩缩策略的工作原理
<a name="step-scaling-how-it-works"></a>

要使用步进缩放，您需要先创建一个 CloudWatch 警报，用于监控 Auto Scaling 组的指标。定义确定触发警报的指标、阈值和评估周期数。然后，创建步进扩缩策略，定义在突破警报阈值时如何扩缩您的组。对于扩缩调整类型，您可以使用自动扩缩组当前容量的百分比或容量单位。有关更多信息，请参阅 [扩展调整类型](#as-scaling-adjustment)。

在策略中添加分步调整。您可以根据警报的阈值突破大小定义不同的分步调整。例如：
+ 如果警报指标达到 60%，则横向扩展 10 个实例
+ 如果警报指标达到 75%，则横向扩展 30 个实例
+ 如果警报指标达到 85%，则横向扩展 40 个实例

当在指定的评估周期数内超过警报阈值时，Amazon EC2 Auto Scaling 将应用策略中定义的步进调整。针对其他警报触发情况，可以继续进行调整，直到警报状态恢复为 `OK`。

每个实例都有一个预热时间，以防止扩缩活动对短时间内发生的变化反应过快。您可以选择为扩缩策略配置预热时间。不过，建议使用默认实例预热，以便在预热时间发生变化时更轻松地更新所有扩缩策略。有关更多信息，请参阅 [为 Auto Scaling 组设置原定设置实例预热](ec2-auto-scaling-default-instance-warmup.md)。

简单扩缩策略与步进扩缩策略类似，不同之处在于这些策略基于单次扩缩调整，每次扩缩活动之间有一个冷却时间。有关更多信息，请参阅 [简单扩展策略](simple-scaling-policies.md)。

## 步进扩展的分步调整
<a name="as-scaling-steps"></a>

在创建分步扩展策略时，您可以指定一个或多个步进调整，这些步进调整会根据警报违规的大小自动扩展实例数量。每个分步调整指定以下内容：
+ 指标值的下限
+ 指标值的上限
+ 要扩展的数量（基于扩展调整类型） 

CloudWatch 根据与 CloudWatch 警报关联的指标的统计数据聚合指标数据点。超过警报时，将调用相应的扩缩策略。Amazon EC2 Auto Scaling 将聚合类型应用于来自的最新指标数据点 CloudWatch （而不是原始指标数据）。它将此聚合指标值与步进调整定义的上限和下限进行比较，以确定执行哪个步进调整。

您可以指定相对于违例阈值的上限和下限。例如，假设您针对指标高于 50% 时发出了 CloudWatch 警报并制定了扩展策略。然后，当指标低于 50% 时，又发出了另一个警报并采取横向缩减策略。对于每个策略，您可进行一组调整类型为 `PercentChangeInCapacity`（或控制台中的**组中占比**）的步进调整：


**示例：扩展策略的步进调整**  

| **下限** | **上限** | **调整** | 
| --- | --- | --- | 
|  0  |  10  |  0  | 
|  10  |  20  |  10  | 
|  20  |  null  |  30  | 


**示例：缩放策略的步进调整**  

| **下限** | **上限** | **调整** | 
| --- | --- | --- | 
|  -10  |  0  |  0  | 
|  -20  |  -10  |  -10  | 
|  null  |  -20  |  -30  | 

这将创建以下扩展配置。

```
Metric value

-infinity          30%    40%          60%     70%             infinity
-----------------------------------------------------------------------
          -30%      | -10% | Unchanged  | +10%  |       +30%        
-----------------------------------------------------------------------
```

现在，假设您在当前容量和所需容量均为 10 的自动扩缩组上使用此扩缩配置。以下几点总结了扩展配置相对于组的所需容量和当前容量的行为：
+ 在聚合指标值大于 40 并小于 60 时，将保留所需容量和当前容量。
+ 如果指标值达到 60，根据扩展策略的第二个分步调整 (增加 10 个实例的 10%)，组的所需容量将增加 1 个实例，总共达到 11 个实例。在新实例运行并且其指定的预热时间过期后，当前组容量将增加到 11 个实例。如果指标值即使在这一容量增加之后也上升到 70，则组的所需容量将再增加 3 个实例，达到 14 个实例。这基于扩展策略的第三个步进调整（添加 11 个实例的 30%，即 3.3 个实例，向下舍入到 3 个实例）。
+ 如果指标值降到 40，根据缩减策略的第二个分步调整 (删除 14 个实例的 10%，向下取整为 1 个实例)，组的所需容量将减小 1 个实例，达到 13 个实例。如果指标值即使在这一容量减少之后也下降至 30，则组的所需容量将再减少 3 个实例，达到 10 个实例。这基于缩减策略的第三个步进调整（移除 13 个实例的 30%，即 3.9 个实例，向下舍入为 3 个实例）。

为扩展策略指定步进调整时，请注意以下事项：
+ 如果使用 Amazon Web Services 管理控制台，则可以将上限和下限指定为绝对值。如果您使用 Amazon CLI 或 SDK，则需要指定相对于违规阈值的上限和下限。
+ 分步调整范围不能重叠或有间隙。
+ 只有一个分步调整可以有空下限 (负无穷)。如果一个分步调整有负下限，则必须有一个分步调整有空下限。
+ 只有一个分步调整可以有空上限 (正无穷)。如果一个分步调整有正上限，则必须有一个分步调整有空上限。
+ 同一分步调整中的上限和下限不能为空。
+ 如果指标值高于违例阈值，则含下限而不含上限。如果指标值低于违例阈值，则不含下限而含上限。

## 扩展调整类型
<a name="as-scaling-adjustment"></a>

您可以根据您选择的扩展调整类型来定义执行最佳扩展操作的扩展策略。您可以将调整类型指定为 Auto Scaling 组当前容量的百分比或以容量单位指定。通常，一个容量单位表示一个实例，除非您使用实例权重功能。

对于步进扩展和简单扩展，Amazon EC2 Auto Scaling 支持以下调整类型：
+ `ChangeInCapacity` — 将当前组容量增加或减少指定的值。正值将增加容量，负调整值将减小容量。例如：如果组的当前容量为 3，调整值为 5，那么当执行此策略时，我们会向容量添加 5 个容量单位，共计 8 个容量单位。
+ `ExactCapacity` — 将组的当前容量更改为指定值。为此调整类型指定一个非负值。例如：如果当前组容量为 3，调整值为 5，则当执行此策略时，我们会将容量更改为 5 个容量单位。
+ `PercentChangeInCapacity` — 将当前组容量增加或减少指定的百分比。正值将增加容量，负值将减少容量。例如：如果当前容量为 10，调整值为 10%，那么当执行此策略时，我们会向容量添加 1 个容量单位，总共 11 个容量单位。
**注意**  
如果得出的值不是整数，将按如下所示进行取整：  
大于 1 的值向下取整。例如，`12.7` 取整为 `12`。
0 和 1 之间的值舍入到 1。例如，`.67` 取整为 `1`。
0 和 -1 之间的值舍入到 -1。例如，`-.58` 取整为 `-1`。
小于 -1 的值向上取整。例如，`-6.67` 取整为 `-6`。

通过 `PercentChangeInCapacity`，您还可以使用 `MinAdjustmentMagnitude` 参数指定要扩展的最小实例。例如，假定您创建一个增加 25% 的策略，并且您指定最小增量为 2 个实例。如果您有一个 Auto Scaling 组包含 4 个实例，而要执行该扩展策略，则 4 的 25% 就是 1 个实例。但是，因为您指定了最小增量 2，则将添加 2 个实例。

使用[实例权重](ec2-auto-scaling-mixed-instances-groups-instance-weighting.md)时，将 `MinAdjustmentMagnitude` 参数设置为非零值的效果会发生变化。该值以容量单位为单位。如需设置所要扩展的最小实例数，请将此参数设置为至少与最大实例权重一样大的值。

如果您使用实例权重，请记住，自动扩缩组的当前容量可以根据需要超过所需容量。如果要递减的绝对数或百分比表示递减的数量小于当前容量和所需容量之间的差值，则不会执行任何扩展操作。在您查看超过警报阈值时扩缩策略的结果时，必须考虑这些行为。例如，假设所需容量为 30，当前容量为 32。超过警报时，如果扩缩策略将所需容量减少 1，则不会执行扩缩操作。

## 实例预热
<a name="as-step-scaling-warmup"></a>

对于扩缩步骤，您可以指定新启动实例的预热时间（单位为秒）。在指定的预热时间过期前，实例不会计入自动扩缩组的聚合 EC2 实例指标。

当实例处于预热时间，仅当未预热实例的指标值大于策略的警报阈值上限时，您的扩缩策略才会横向扩展。

如果组再次横向扩展，则仍在预热的实例将计算为下一横向扩展活动所需容量的一部分。因此，落入同一分步调整中的多个警报违例只会导致一个扩展活动。旨在持续 (但不过度) 扩大。

例如，假设您通过两个步骤创建策略。第一步，当指标达到 60 时，增加 10％；第二步，当指标达到70％时，增加 30％。自动扩缩组的所需容量和当前容量为 10。在聚合指标值小于 60 时，所需容量和当前容量不变。假设指标达到 60，因此添加 1 个实例（10 个实例中的 10%）。然后，在新实例仍在预热期间，指标达到 62。扩缩策略根据当前容量（仍为 10）计算新的所需容量。不过，组的所需容量已经增加至 11 个实例，因此，扩展策略不会进一步增加所需的容量。如果指标在新实例仍在预热时增长到 70，我们应添加 3 个实例（10 个实例的 30%）。但该组的所需容量已经是 11，所以我们只添加 2 个实例，因为新的所需容量为 13 个实例。

当横向扩展活动正在进行时，通过扩缩策略启动的所有横向缩减活动都将被阻止，直到实例完成预热。当实例完成预热后，如果发生横向缩减事件，那么在计算新的所需容量时，当前正在终止的任何实例都将计入该组的当前容量。因此不会从 Auto Scaling 组中删除更多实例。例如，当实例已经终止时，如果警报超出将所需容量减 1 的相同步进调整范围，则不会执行扩缩操作。

**默认 值**  
如果未设置任何值，则扩缩策略将使用默认值，即为该组定义的[默认实例预热](ec2-auto-scaling-default-instance-warmup.md)值。如果默认实例预热为空，则将回退到[默认冷却时间](ec2-auto-scaling-scaling-cooldowns.md#set-default-cooldown)值。

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

使用分步和简单扩缩策略时，需要注意以下事项：
+ 考虑是否可以足够准确地预测应用程序上的分步调整，以便使用分步扩缩。如果您的扩缩指标的升高或降低与可扩展目标的容量成比例，则建议您使用目标跟踪扩缩策略。您仍然可以选择使用步进扩展作为附加策略来实现更高级的配置。例如，您可以在利用率达到特定级别时配置更积极的响应。
+ 确保在横向扩展和横向缩减之间选择足够的余量，以防止摇摆。摆动是横向缩减和横向扩展的无限循环。也就是说，如果采取扩展操作，则指标值将更改并启动另一个相反方向的扩展操作。