

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

# 实例维护策略
<a name="ec2-auto-scaling-instance-maintenance-policy"></a>

您可以为自动扩缩组配置实例维护策略，以满足导致实例被替换的事件（例如实例刷新或运行状况检查过程）期间的特定容量要求。

例如，假设您有一个自动扩缩组，该组具有少量实例。当运行状况检查显示实例受损时，您需要避免因终止实例然后更换实例而造成的潜在中断。通过实例维护策略，您可以确保 Amazon EC2 Auto Scaling 首先启动一个新实例，然后等待其完全准备就绪，然后再终止运行状况不佳的实例。

实例维护策略还可以帮助您在同时更换多个实例时最大限度地减少任何潜在的中断。您可以为策略设置最低和最高运行正常百分比参数，并且在替换实例时，自动扩缩组只能在该最小-最大范围内增加和减少容量。范围越大，可以同时替换的实例的数量就会增加。

**Topics**
+ [自动扩缩组的实例维护策略](instance-maintenance-policy-overview-and-considerations.md)
+ [为自动扩缩组设置实例维护策略](set-instance-maintenance-policy-on-group.md)

# 自动扩缩组的实例维护策略
<a name="instance-maintenance-policy-overview-and-considerations"></a>

本主题概述了可用选项，并介绍了创建实例维护策略时需要考虑的内容。

**Topics**
+ [概述](#instance-maintenance-policy-overview)
+ [核心概念](#instance-maintenance-policy-core-concepts)
+ [实例预热](#instance-maintenance-policy-instance-warm-up)
+ [运行状况检查宽限期](#instance-maintenance-policy-health-check-grace-period)
+ [扩展您的自动扩缩组](#instance-maintenance-policy-scaling-limits)
+ [应用场景示例](#instance-maintenance-policy-scenarios)

## 概述
<a name="instance-maintenance-policy-overview"></a>

当您为自动扩缩组创建实例维护策略时，该策略会影响导致实例被替换的 Amazon EC2 Auto Scaling 事件。这样可以在同一自动扩缩组中实现更一致的替换行为。它还允许您根据需要优化群组的可用性或成本。

在控制台中，有以下配置选项可用：
+ **终止前启动** – 必须先配置新实例，然后才能终止现有实例。对于偏向于可用性而不是成本节约的应用程序来说，这种方法是一个不错的选择。
+ **终止并启动** – 在终止现有实例的同时配置新实例。对于偏向于节省成本而不是可用性的应用程序来说，这种方法是一个不错的选择。对于启动容量不应超过当前可用容量的应用程序来说，这也是一个不错的选择，即使在替换实例时也是如此。
+ **自定义策略** – 此选项允许您在替换实例时使用自定义的最小和最大容量范围来设置策略。这种方法可以帮助您在成本和可用性之间取得适当的平衡。

自动扩缩组的默认设置是没有实例维护策略，这会使它以默认行为响应实例维护事件。下表描述了默认行为。


**实例维护事件默认行为**  

|  事件  |  说明  |  默认 行为  | 
| --- | --- | --- | 
|  运行状况检查失败  |  当实例未通过运行状况检查时自动发生。Amazon EC2 Auto Scaling 替换运行状况检查失败的实例。有关运行状况检查失败的原因，请参阅 [自动扩缩组中实例的运行状况检查](ec2-auto-scaling-health-checks.md)。  |  终止并启动。  | 
|  实例刷新  |  在启动实例刷新时发生。根据您的配置，实例刷新可以一次替换一个实例，一次替换多个实例，也可以一次替换全部实例。有关更多信息，请参阅 [使用实例刷新更新自动扩缩组中的实例](asg-instance-refresh.md)。  |  终止并启动。  | 
|  最大实例生命周期  |  当实例达到您为自动扩缩组指定的最大实例生命周期时，会自动发生。Amazon EC2 Auto Scaling 替代已达到实例最大使用寿命的实例。有关更多信息，请参阅 [基于最大实例生命周期替换 Auto Scaling 实例](asg-max-instance-lifetime.md)。  |  终止并启动。  | 
|  再平衡  |  如果存在导致组不平衡的潜在变化，则会自动发生。Amazon EC2 Auto Scaling 在以下情况下重新平衡该组： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/autoscaling/ec2/userguide/instance-maintenance-policy-overview-and-considerations.html)  |  在终止之前启动。 Amazon EC2 Auto Scaling 最多可超出组的规模限制，最高可超过其*最大容量*的 10%。但是，如果您使用容量再平衡，则最多只能超过*所需容量*的 10%。  | 

在以下情况下，Amazon EC2 Auto Scaling 将继续默认终止并启动。因此，当其中一种情况发生时，您的组容量可能会低于您的实例维护策略的下限阈值。
+ 当实例意外终止时，例如由于人为行为。Amazon EC2 Auto Scaling 会立即替换不再运行的实例。有关更多信息，请参阅 [Amazon EC2 运行状况检查](health-checks-overview.md#instance-health-detection)。
+ 当 Amazon EC2 作为计划事件的一部分重启、停止或停用实例时，Amazon EC2 Auto Scaling 可以启动替代实例。有关这些事件的更多信息，请参阅《Amazon EC2 用户指南》**中的[实例的计划事件](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/monitoring-instances-status-check_sched.html)。
+ 当 Amazon EC2 竞价服务启动竞价型实例时会中断，竞价型实例随后被强制终止。

对于竞价型实例，如果您在自动扩缩组上启用了容量再平衡，则该实例可能已经有一个来自我们在启动竞价中断之前启动的不同竞价池中的待处理实例。有关容量重新平衡的工作方式的详细信息，请参阅 [Auto Scaling 进行容量再平衡以替换存在风险的竞价型实例](ec2-auto-scaling-capacity-rebalancing.md)。

但是，由于不能保证竞价型实例保持可用状态，并且可以在两分钟内发出竞价型实例中断通知后终止，因此，如果实例在新实例启动之前中断，则可能会超过您的实例维护政策的下限阈值。

## 核心概念
<a name="instance-maintenance-policy-core-concepts"></a>

在您开始之前，请熟悉以下核心概念和术语：

**所需容量**  
*所需容量*是自动扩缩组在创建时的容量。这也是该组在没有附加任何扩展条件时尝试保持的容量。

**实例维护政策**  
*实例维护策略*控制是否在因实例维护事件而终止现有实例之前先配置实例。它还决定了您的自动扩缩组可能在多大程度上低于或超过所需容量才能同时替换多个实例。

**最高运行正常百分比**  
*最高运行正常百分比*是替换实例时您的自动扩缩组可以增加到的所需容量的百分比。它表示组中可以处于运行状态且运行状况良好或待处理以支持您的工作负载的最大百分比。在控制台中，使用**终止前启动**选项或**自定义策略**选项时，您可以设置最高运行正常百分比。有效值为 100–200%。

**最低运行正常百分比**  
*最低运行正常百分比*是在替换实例时保持正常运行、运行良好且随时可用于支持您的工作负载的所需容量的百分比。成功完成首次运行状况检查并且经过指定的预热时间后，该实例被视为运行状况良好，可以随时使用。在控制台中，使用**终止并启动**选项或**自定义策略**选项时，您可以设置最低运行正常百分比。有效值为 0–100%。  
要更快地替换实例，您可以指定较低的最低运行正常百分比。但是，如果运行正常的实例不足，则可用性可能会降低。我们建议选择一个合理的值，以便在需要替换多个实例的情况下保持可用性。

## 实例预热
<a name="instance-maintenance-policy-instance-warm-up"></a>

如果您的实例在进入`InService`状态后需要时间进行初始化，请为您的自动扩缩组启用默认实例预热。使用默认实例预热，您可以防止实例在准备就绪之前计入最低运行正常百分比。这可以确保 Amazon EC2 Auto Scaling 在终止现有实例之前考虑需要多长时间才能有足够的容量来支持工作负载。

此外，启用默认实例预热功能后，您可以改进用于动态扩展的 Amazon CloudWatch 指标。如果您的 Auto Scaling 组有任何扩展策略，则当该组向外扩展时，它将使用相同的默认预热期，以防止在实例完成初始化之前将其计入 CloudWatch 指标。

有关更多信息，请参阅 [为 Auto Scaling 组设置原定设置实例预热](ec2-auto-scaling-default-instance-warmup.md)。

## 运行状况检查宽限期
<a name="instance-maintenance-policy-health-check-grace-period"></a>

Amazon EC2 Auto Scaling 会根据您的自动扩缩组所使用的运行状况检查的状态来确定实例是否运行正常。有关更多信息，请参阅 [自动扩缩组中实例的运行状况检查](ec2-auto-scaling-health-checks.md)。

为确保这些运行状况检查尽快开始，请勿将组的运行状况检查宽限期设置得过高，而应设置得足够高，以便 Elastic Load Balancing 运行状况检查确定目标是否可用于处理请求。有关更多信息，请参阅 [设置自动扩缩组的运行状况检查宽限期](health-check-grace-period.md)。

## 扩展您的自动扩缩组
<a name="instance-maintenance-policy-scaling-limits"></a>

实例维护策略仅适用于实例维护事件，并不阻止手动或自动扩缩组。

当您的自动扩缩组中附加了扩展策略或计划操作时，它们可以在实例维护事件发生时并行运行。在这种情况下，他们可以增加或减少组的所需容量，但只能在您定义的扩展限制范围内。有关这些限制的更多信息，请参阅[为自动扩缩组设置扩缩限制](asg-capacity-limits.md)。

## 应用场景示例
<a name="instance-maintenance-policy-scenarios"></a>

在典型情况下，您的实例维护策略和所需容量可能如下所示：
+ 最低运行正常百分比 = 90%
+ 最高运行正常百分比 = 120%
+ 所需容量 = 100

在任何实例维护事件中，您的自动扩缩组可能少则有 90 个实例，而多则有 120 个实例。事件发生后，该组恢复到拥有 100 个实例的状态。

当您对具有暖池的自动扩缩组使用实例维护策略时，最低和最高运行正常百分比将分别应用于自动扩缩组和暖池。

例如，假设这是您的配置：
+ 最低运行正常百分比 = 90%
+ 最高运行正常百分比 = 120%
+ 所需容量 = 100
+ 暖池大小 = 10

如果您启动实例刷新以回收该组的实例，Amazon EC2 Auto Scaling 会先替换自动扩缩组中的实例，然后替换温池中的实例。虽然 Amazon EC2 Auto Scaling 仍在努力替换自动扩缩组中的实例，但该组可能少则有 90 个实例，而多则有 120 个实例 完成组的操作后，Amazon EC2 Auto Scaling 可以替换暖池中的实例。发生这种情况时，温暖池可能少则有 9 个实例，而多则有 12 个实例。

# 为自动扩缩组设置实例维护策略
<a name="set-instance-maintenance-policy-on-group"></a>

您可以在创建自动扩缩组时创建实例维护策略。也可以为现有的组创建此功能。

通过为自动扩缩组设置实例维护策略，您不必再为实例刷新功能指定最低和最高运行正常百分比，除非您想覆盖实例维护策略。

在控制台中，Amazon EC2 Auto Scaling 提供了可帮助您入门的选项。

**Topics**
+ [设置实例维护政策](set-instance-maintenance-policy.md)
+ [删除实例维护策略](remove-instance-maintenance-policy.md)

# 设置实例维护政策
<a name="set-instance-maintenance-policy"></a>

要在自动扩缩组上设置实例维护策略，请使用以下方法之一：

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

**为新的组设置实例维护策略（控制台）**

1. 按照 [使用启动模板创建 Auto Scaling 组](create-asg-launch-template.md) 中的说明完成过程中的每个步骤，直到步骤 11。

1. 在**配置组大小和扩展策略**中，对于**所需容量**，输入要启动的初始实例数。

1. 在**扩展**部分的**扩展限制**下，如果**所需容量**的新值大于**所需的最小容量**和**最大所需容量**，则**所需的最大容量**将自动增加到新的所需容量值。您可以按需更改这些限制。

1. 对于**自动扩缩**，请选择是否要创建目标跟踪扩展策略。您也可以在创建自动扩缩组后再创建此策略。

   如果您选择**目标跟踪扩展策略**，请按照 [创建目标跟踪扩缩策略](policy_creating.md) 中的说明创建策略。

1. 在**实例维护策略**部分，选择下列可用选项之一：
   + **终止前启动**：必须先配置新实例，然后才能终止现有实例。对于偏向于可用性而不是成本节约的应用程序来说，这是一个不错的选择。
   + **终止并启动**：在终止现有实例的同时配置新实例。对于偏向于节省成本而不是可用性的应用程序来说，这是一个不错的选择。对于启动容量不应超过当前可用容量的应用程序来说，它也是一个不错的选择。
   + **自定义策略**：此选项允许您在替换实例时使用自定义的最小和最大容量范围来设置策略。这可以帮助您在成本和可用性之间取得适当的平衡。

1. 对于**设置运行正常百分比**，为以下一个或两个字段输入值。根据您在上一步中选择的选项，启用的字段会有所不同。
   + **最小**：设置继续替换实例所需的最低运行正常百分比。
   + **最大**：设置替换实例时可能的最高运行正常百分比。

1. 展开**根据所需容量在更换期间查看容量**部分，以确认**最小值**和**最大值**的值如何适用于您的组。使用的确切值取决于所需的容量值，如果组发生扩缩，该值将发生变化。

1. 继续完成[使用启动模板创建 Auto Scaling 组](create-asg-launch-template.md)中的步骤。

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

**为新组设置实例维护策略 (AWS CLI)**  
将该`--instance-maintenance-policy`选项添加到[create-auto-scaling-group](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/create-auto-scaling-group.html)命令中。以下示例对名为的新自动扩缩组设置实例维护策略`my-asg`。

```
aws autoscaling create-auto-scaling-group \
  --launch-template LaunchTemplateName=my-launch-template,Version='1' \
  --auto-scaling-group-name my-asg \
  --min-size 1 \
  --max-size 10 \
  --desired-capacity 5 \
  --default-instance-warmup 20 \
  --instance-maintenance-policy '{
      "MinHealthyPercentage": 90,
      "MaxHealthyPercentage": 120       
    }' \
  --vpc-zone-identifier "subnet-5e6example,subnet-613example,subnet-c93example"
```

------

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

**为现有的组设置实例维护策略（控制台）**

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

1. 在屏幕顶部的导航栏中，选择您在其中创建了自动扩缩组的 AWS 区域 。

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

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

1. 在**详细信息**选项卡上，选择**实例维护策略**，**编辑**。

1. 要为组设置实例维护策略，请选择下列可用选项之一：
   + **终止前启动**：必须先配置新实例，然后才能终止现有实例。对于偏向于可用性而不是成本节约的应用程序来说，这是一个不错的选择。
   + **终止并启动**：在终止现有实例的同时配置新实例。对于偏向于节省成本而不是可用性的应用程序来说，这是一个不错的选择。对于启动容量不应超过当前可用容量的应用程序来说，它也是一个不错的选择。
   + **自定义策略**：此选项允许您在替换实例时使用自定义的最小和最大容量范围来设置策略。这可以帮助您在成本和可用性之间取得适当的平衡。

1. 对于**设置运行正常百分比**，为以下一个或两个字段输入值。根据您在上一步中选择的选项，启用的字段会有所不同。
   + **最小**：设置继续替换实例所需的最低运行正常百分比。
   + **最大**：设置替换实例时可能的最高运行正常百分比。

1. 展开**根据所需容量在更换期间查看容量**部分，以确认**最小值**和**最大值**的值如何适用于您的组。使用的确切值取决于所需的容量值，如果组发生扩缩，该值将发生变化。

1. 选择**更新**。

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

**为现有组设置实例维护策略 (AWS CLI)**  
将该`--instance-maintenance-policy`选项添加到[update-auto-scaling-group](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/update-auto-scaling-group.html)命令中。以下示例为指定的自动扩缩组设置实例维护策略。

```
aws autoscaling update-auto-scaling-group --auto-scaling-group-name my-asg \
  --instance-maintenance-policy '{
      "MinHealthyPercentage": 90,
      "MaxHealthyPercentage": 120       
    }'
```

------

# 删除实例维护策略
<a name="remove-instance-maintenance-policy"></a>

如果您想停止在自动扩缩组使用实例维护策略，则可以将其删除。

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

**删除实例维护策略（控制台）**

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

1. 在屏幕顶部的导航栏中，选择您在其中创建了自动扩缩组的 AWS 区域 。

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

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

1. 在**详细信息**选项卡上，选择**实例维护策略**，**编辑**。

1. 选择**无实例维护策略**。

1. 选择**更新**。

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

**删除实例维护策略 (AWS CLI)**  
将该`--instance-maintenance-policy`选项添加到[update-auto-scaling-group](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/update-auto-scaling-group.html)命令中。以下示例从指定的自动扩缩组删除实例维护策略。

```
aws autoscaling update-auto-scaling-group --auto-scaling-group-name my-asg \
  --instance-maintenance-policy '{
      "MinHealthyPercentage": -1,
      "MaxHealthyPercentage": -1       
    }'
```

------