

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

# 使用实例横向缩减保护以控制实例终止
<a name="ec2-auto-scaling-instance-protection"></a>

实例横向缩减保护让您可以控制 Amazon EC2 Auto Scaling 可以终止哪些实例。此功能的一个常见用例是扩缩基于容器的工作负载。有关更多信息，请参阅 [设计您的应用程序以妥善处理实例终止](gracefully-handle-instance-termination.md)。

默认情况下，创建自动扩缩组时将禁用实例横向缩减保护。这意味着 Amazon EC2 Auto Scaling 可以终止该组中的任何实例。

您可以在自动扩缩组上启用实例横向缩减保护设置，在实例启动后立即对其进行保护。当实例状态为 `InService` 时，实例缩减保护启动。然后，如需控制哪些实例可以终止，请禁用自动扩缩组中单个实例的横向缩减保护设置。这样做可以继续保护某些实例免遭意外终止。

**Topics**
+ [注意事项](#instance-protection-considerations)
+ [更改自动扩缩组的横向缩减保护](#instance-protection-group)
+ [更改实例的横向缩减保护](#instance-protection-instance)

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

使用实例横向缩减保护时应注意以下事项：
+ 如果自动扩缩组中的所有实例都受横向缩减保护并且发生横向缩减事件，则该组的所需容量会递减。不过，自动扩缩组不能终止所需数量的实例，直到其实例横向缩减保护设置被禁用。在 Auto Scaling 组的**活动历史记录**中，如果 Auto Scaling 组中的所有实例都受到保护，在发生缩减事件时不会缩小，则会显示以下消息： AWS 管理控制台`Could not scale to desired capacity because all remaining instances are protected from scale in.`
+ 当您分离受横向缩减保护的实例时，其实例横向缩减保护设置就会失效。再次将实例附加到组时，它会继承组的当前实例横向缩减保护设置。当 Amazon EC2 Auto Scaling 启动新的实例或将暖池中的实例移入自动扩缩组时，该实例会继承自动扩缩组的实例横向缩减保护设置。
+ 实例缩减保护并不能针对以下情况保护 Auto Scaling 实例：
  + 实例未通过运行状况检查的情况下的运行状况检查更换。有关更多信息，请参阅 [自动扩缩组中实例的运行状况检查](ec2-auto-scaling-health-checks.md)。
  + 竞价型实例中断。当竞价型实例的容量不再可用或 Spot 价格超过您的最高价时，将终止该实例。
  + 容量块预留结束。Amazon EC2 会收回容量块实例，即使这些实例受到横向缩减保护。
  + 通过 `terminate-instance-in-auto-scaling-group` 命令手动终止。有关更多信息，请参阅 [终止您自动扩缩组中的实例（AWS CLI）](ec2-auto-scaling-scaling-manually.md#terminate-an-instance-aws-cli)。
  + 通过 Amazon EC2 控制台、CLI 命令和 API 操作手动终止。要保护 Auto Scaling 实例不被手动终止，请启用 Amazon EC2 终止保护。（这不会阻止 Amazon EC2 Auto Scaling 终止实例或通过 `terminate-instance-in-auto-scaling-group` 命令手动终止。） 有关在启动模板中启用 Amazon EC2 终止保护的信息，请参阅[使用高级设置创建启动模板](advanced-settings-for-your-launch-template.md)。

## 更改自动扩缩组的横向缩减保护
<a name="instance-protection-group"></a>

您可以启用或禁用 Auto Scaling 组的实例缩减保护设置。启用该功能后，该组启动的所有新实例都将启用实例横向缩减保护。

为自动扩缩组启用或禁用此设置不会影响现有的实例。

------
#### [ 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. 在 **Details**（详细信息）选项卡上，选择 **Advanced configurations**（高级配置）、**Edit**（编辑）。

1. 对于**实例横向缩减保护**，请选中或清除**启用实例扩缩保护**复选框，以根据需要启用或禁用此选项。

1. 选择**更新**。

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

**启用新自动扩缩组的横向缩减保护**  
使用以下 [create-auto-scaling-group](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/create-auto-scaling-group.html) 命令启用实例缩减保护。

```
aws autoscaling create-auto-scaling-group --auto-scaling-group-name my-asg --new-instances-protected-from-scale-in ...
```

**启用现有组的横向缩减保护**  
使用以下[update-auto-scaling-group](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/update-auto-scaling-group.html)命令为指定的 Auto Scaling 组启用实例缩减保护。

```
aws autoscaling update-auto-scaling-group --auto-scaling-group-name my-asg --new-instances-protected-from-scale-in
```

**禁用现有组的横向缩减保护**  
使用以下命令为指定组禁用实例缩减保护。

```
aws autoscaling update-auto-scaling-group --auto-scaling-group-name my-asg --no-new-instances-protected-from-scale-in
```

------

## 更改实例的横向缩减保护
<a name="instance-protection-instance"></a>

默认情况下，实例从其 Auto Scaling 组获取其实例缩减保护设置。但是，您可以在实例启动后对单个实例启用或禁用实例横向缩减保护。

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

**启用或禁用实例的横向缩减保护**

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

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

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

1. 在 **Instance management**（实例管理）选项卡的 **Instances**（实例）中，选择实例。

1. 要启用实例缩减保护，请依次选择 **Actions**（操作）和 **Set scale-in protection**（设置缩减保护）。系统提示时，选择 **Set scale-in protection**（设置缩减保护）。

1. 要禁用实例缩减保护，请依次选择 **Actions**（操作）和 **Remove scale-in protection**（删除缩减保护）。系统提示时，选择 **Remove scale-in protection**（删除缩减保护）。

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

**启用实例的横向缩减保护**  
使用以下 [set-instance-protection](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/set-instance-protection.html) 命令为指定的实例启用实例缩减保护。

```
aws autoscaling set-instance-protection --instance-ids i-5f2e8a0d --auto-scaling-group-name my-asg --protected-from-scale-in
```

**禁用实例的横向缩减保护**  
使用以下命令为指定实例禁用实例缩减保护。

```
aws autoscaling set-instance-protection --instance-ids i-5f2e8a0d --auto-scaling-group-name my-asg --no-protected-from-scale-in
```

------

**注意**  
请记住，实例横向缩减保护不能保证在发生人为错误时不会终止实例：例如，有人使用 Amazon EC2 控制台或 AWS CLI手动终止。要防止您的实例被意外终止，可使用 Amazon EC2 终止保护。但是，即使启用了终止保护和实例扩展保护，如果运行状况检查确定实例运行状况不佳或组本身被意外删除，保存到实例存储的数据也可能会丢失。与任何环境一样，最佳做法是频繁备份您的数据，或者在适合您的业务连续性要求时备份数据。