

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

# 替换自动扩缩组中的实例
<a name="ec2-auto-scaling-group-replacing-instances"></a>

Amazon EC2 Auto Scaling 提供的功能允许您在进行更新后替换自动扩缩组中的 Amazon EC2 实例，例如添加具有新亚马逊机器映像（AMI）的新启动模板或添加新实例类型。它还可以让您选择将更新包含在替换实例的同一操作中，从而帮助您简化更新。

本部分包含有助于您实现以下功能的信息：
+ 启动实例刷新以替换 Auto Scaling 组中的实例。
+ 声明描述所需配置的特定更新，并将 Auto Scaling 组更新为所需配置。
+ 跳过替换已更新的实例。
+ 使用检查点分阶段更新实例并在特定时间点对您的实例执行验证。
+ 使用烘焙时间在实例刷新结束时暂停，以验证实例的运行状况。
+ 达到检查点时通过电子邮件接收通知。
+ 使用回滚将自动扩缩组恢复到其以前使用的配置。
+ 如果实例刷新由于某种原因失败，或者您指定的任何 Amazon CloudWatch 警报进入`ALARM`状态，则自动回滚。
+ 限制实例的生命周期，以便在整个自动扩缩组中提供一致的软件版本和实例配置。
+ 在不终止实例的情况下替换根卷，同时保留网络接口、非根卷和 IAM 策略。

**Topics**
+ [实例刷新](asg-instance-refresh.md)
+ [最大实例生命周期](asg-max-instance-lifetime.md)

# 使用实例刷新更新自动扩缩组中的实例
<a name="asg-instance-refresh"></a>

您可以使用实例刷新以更新自动扩缩组中的实例。当配置更改要求您替换实例或其根卷时，此功能非常有用，尤其是在您的 Auto Scaling 组包含大量实例的情况下。

实例刷新可以提供帮助的情况包括：
+ 跨自动扩缩组部署新的亚马逊机器映像（AMI）或用户数据脚本。您可以创建包含更改的新启动模板，然后使用实例刷新立即推出更新。
+ 将您的实例迁移到新实例类型，以利用最新的改进和优化。
+ 将自动扩缩组从使用启动配置切换为使用启动模板。您可以将启动配置复制到启动模板，然后使用实例刷新将实例更新为新模板。有关迁移到启动模板的更多信息，请参阅[将自动扩缩组迁移到启动模板](migrate-to-launch-templates.md)。
+ 应用安全补丁或软件更新，同时保持长时间运行的实例状态，并避免 GPU 或 Mac 实例等特殊实例类型的容量限制。

**Topics**
+ [实例刷新的工作原理](instance-refresh-overview.md)
+ [了解默认值](understand-instance-refresh-default-values.md)
+ [启动实例刷新](start-instance-refresh.md)
+ [监控实例刷新](check-status-instance-refresh.md)
+ [替换根卷](replace-root-volume.md)
+ [取消实例刷新](cancel-instance-refresh.md)
+ [通过回滚撤消更改](instance-refresh-rollback.md)
+ [使用跳过匹配](asg-instance-refresh-skip-matching.md)
+ [添加检查点](asg-adding-checkpoints-instance-refresh.md)

# 自动扩缩组中实例刷新的工作原理
<a name="instance-refresh-overview"></a>

本主题描述了实例刷新的工作原理，并介绍有效使用该功能需要了解的主要概念。

**Topics**
+ [工作原理](#instance-refresh-how-it-works)
+ [核心概念](#instance-refresh-core-concepts)
+ [运行状况检查宽限期](#instance-refresh-health-check-grace-period)
+ [实例类型兼容性](#instance-type-compatibility)
+ [限制](#instance-refresh-limitations)

## 工作原理
<a name="instance-refresh-how-it-works"></a>

要刷新自动扩缩组中的实例，您可以定义一个新配置，其中包含应用程序的最新版本以及您要进行的任何其他更新。

实例刷新支持两种更新实例的策略：
+ **滚动策略（默认）**-根据您的喜好终止实例并分批启动新实例。这可确保您的 Auto Scaling 组在整个更新过程中保持其所需的容量和可用性。
+ **替换根卷策略** — 通过仅替换根卷来更新实例，而不终止实例。这样可以保留实例网络接口、非根 EBS 卷和实例存储数据。

替换根卷策略的要求：
+ 您的 Auto Scaling 组必须使用混合实例策略
+ 混合实例策略中的所有替代项都必须指定 `ImageId` 
+ AMIs 必须只包含一个根卷
+ 所有实例都必须与该组的启动模板配置相匹配
+ 您必须使用包含`ImageId`替代项的混合实例策略的所需配置开始实例刷新。

启用跳过匹配后，Auto Scaling 会将每个实例的当前 AMI ID 与所需配置 IDs 中的 AMI 进行比较。它仅替换 AMI IDs 不匹配的实例，从而允许您跳过已经更新的实例。

### 执行实例刷新
<a name="instance-refresh-process"></a>

开始刷新实例，根据该配置将现有实例替换为新实例。

1. 创建新的启动模板或使用所需配置更改（例如，新的亚马逊机器映像（AMI））更新现有模板。有关更多信息，请参阅 [为 Auto Scaling 组创建启动模板](create-launch-template.md)。

1. 使用 Amazon EC2 Auto Scaling 控制台或软件开发工具包开始实例刷新： AWS CLI
   + 指定新启动模板或您创建的启动模板版本。这将用于启动新实例。
   + 设置首选的最小和最大运行正常百分比。这可以控制同时替换多少个实例，以及是否在终止旧实例之前启动新实例。
   + 配置任何可选设置，例如：
     + **检查点**：在完成一定比例的替换后暂停实例刷新以验证进度。
     + **烘焙时间**：在实例刷新结束时暂停以验证实例的运行状况，在此之后才视为实例刷新已完成。
     + **跳过匹配**：将旧实例与新配置进行比较，仅替换不匹配的实例。当您从控制台开始实例刷新时，默认情况下会开启跳过匹配。
     + **多个实例类型**：作为所需配置的一部分，应用新的或更新的[混合实例策略](ec2-auto-scaling-mixed-instances-groups.md)。

实例刷新开始后，Amazon EC2 Auto Scaling 将：
+ 根据最小和最大运行正常百分比分批替换实例。
+ 如果最小运行正常百分比设置为 100%，则应先启动新实例，然后再终止旧实例。这可确保始终保持所需容量。
+ 检查实例的运行状况，让它们有时间进行预热，然后再替换更多实例。
+ 终止并替换被发现运行状况不佳的实例。
+ 实例刷新成功后，使用新的配置更改自动更新自动扩缩组设置。
+ 先替换 `InService` 实例，然后再替换暖池中的实例。

以下流程图说明了将最小运行正常百分比设置为 100% 时终止前启动的行为。

![\[该图显示当最小运行正常百分比设置为 100% 时实例刷新如何工作。\]](http://docs.aws.amazon.com/zh_cn/autoscaling/ec2/userguide/images/instance-refresh-high-level-flowchart-diagram.png)


**注意**  
仅当您尚未设置实例维护策略或需要覆盖实例维护策略时，才需要指定实例刷新的最小和最大运行正常百分比。有关更多信息，请参阅 [实例维护策略](ec2-auto-scaling-instance-maintenance-policy.md)。  
同样，仅当您尚未启用默认预热或需要覆盖默认预热时，才需要为实例刷新指定实例预热期。有关更多信息，请参阅 [为 Auto Scaling 组设置原定设置实例预热](ec2-auto-scaling-default-instance-warmup.md)。

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

在您开始之前，请熟悉以下实例刷新核心概念：

**最低运行正常百分比**  
*最小运行正常百分比*是实例刷新期间保持可用、运行正常且随时可用的所需容量的百分比。例如，如果最低运行正常百分比为 90%，最高运行正常百分比为 100%，那么一次将替换的容量百分比为 10%。如果新的实例未通过运行状况检查，Amazon EC2 Auto Scaling 将终止并替换这些实例。如果实例刷新无法启动任何运行正常的实例，则它最终将失败，使组中其他的 90% 保持不变。如果新的实例保持正常运行并完成其预热期，Amazon EC2 Auto Scaling 可以继续替换其他实例。  
实例刷新可以一次替换一个实例，一次替换多个实例，也可以一次替换全部实例。要一次替换一个实例，请将最低和最高运行正常百分比均设置为 100%。这会将实例刷新的行为更改为在终止之前启动，从而防止组的容量降至其所需容量的 100% 以下。要一次替换全部实例，将最低运行正常百分比设置为 0%。

**最高运行正常百分比**  
*最高运行正常百分比*是替换实例时您的自动扩缩组可以增加到的所需容量的百分比。最小值和最大值之间的差值不能大于 100。范围越大，可以同时替换的实例的数量就会增加。

**实例预热**  
*实例预热*是从新实例的状态变为 `InService` 之时起到其被视为已完成初始化之时止需要经过的时间段。在实例刷新期间，如果实例通过其运行状况检查，确定新启动的实例正常运行后，Amazon EC2 Auto Scaling 不会立即继续进行下一个实例替换。它会等待预热期结束，然后继续替换下一个实例。如果应用程序在响应请求之前仍需要一些初始化时间，此功能可能很有用。  
实例预热与默认实例预热的工作方式相同。因此，同样的扩缩注意事项也适用。有关更多信息，请参阅 [为 Auto Scaling 组设置原定设置实例预热](ec2-auto-scaling-default-instance-warmup.md)。

**所需配置**  
*所需配置*是您希望 Amazon EC2 Auto Scaling 在自动扩缩组中部署的新配置。例如，您可以为实例指定新的启动模板和新的实例类型。在实例刷新期间，Amazon EC2 Auto Scaling 会将 Auto Scaling 组更新为所需配置。如果在实例刷新期间发生向外扩展事件，Amazon EC2 Auto Scaling 将启动具有所需配置而不是该组的当前设置的新实例。实例刷新成功后，Amazon EC2 Auto Scaling 会更新自动扩缩组的设置，以反映您在实例刷新过程中指定的新所需配置。

**跳过匹配**  
跳过匹配将通知 Amazon EC2 Auto Scaling 忽略已有最新更新的实例。这样，您就无需替换超过所需数量的实例。当您希望确保自动扩缩组使用特定版本的启动模板，并且只替换那些使用其他版本的实例时，这是很有用的。

**检查点**  
*检查点*是实例刷新在指定时间内暂停的时间点。实例刷新可以包含多个检查点。Amazon EC2 Auto Scaling 会针对每个检查点发出事件。因此，您可以添加一条 EventBridge 规则，将事件发送到目标（例如 Amazon SNS），以便在到达检查点时收到通知。达到某个检查点后，您将有机会验证您的部署。如果发现任何问题，您可以取消实例刷新，或回滚实例。分阶段部署更新的能力是检查点的一个关键优势。如果不使用检查点，则会持续执行滚动替换。

要详细了解在开始实例刷新时可以配置的所有默认设置，请参阅 [了解实例刷新的默认值](understand-instance-refresh-default-values.md)。

## 运行状况检查宽限期
<a name="instance-refresh-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-type-compatibility"></a>

在更改实例类型之前，最好验证它是否适用于您的启动模板。这确认了与您指定的 AMI 的兼容性。例如，如果您从半虚拟化（PV）AMI 启动了原始实例，但希望更改为仅受硬件虚拟机（HVM）AMI 支持的最新一代实例类型。在这种情况下，您必须在启动模板中使用 HVM AMI。

要在不启动实例的情况下确认实例类型的兼容性，请使用带 `--dry-run` 选项的 [run-instances](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/run-instances.html) 命令，如以下示例所示。

```
aws ec2 run-instances --launch-template LaunchTemplateName=my-template,Version='1' --dry-run
```

有关如何确定兼容性的信息，请参阅《Amazon EC2 用户指南》**中的[更改实例类型的兼容性](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/resize-limitations.html)。

## 限制
<a name="instance-refresh-limitations"></a>
+ **总持续时间**：实例刷新可继续主动替换实例的最长时间为 14 天。
+ **加权组特有的行为差异**：如果配置混合实例组的实例权重大于或等于该组的所需容量，则 Amazon EC2 Auto Scaling 可能会一次性替换所有 `InService` 实例。为避免这种情况，请遵循 [配置自动扩缩组以使用实例权重](ec2-auto-scaling-mixed-instances-groups-instance-weighting.md) 主题中的建议。指定所需容量，该容量大于在自动扩缩组中使用权重时的最大权重。
+ **一小时超时**：当实例刷新因等待替换备用实例或横向缩减保护实例，或者新实例没有通过运行状况检查而无法继续进行替换时，Amazon EC2 Auto Scaling 将持续重试一个小时。它还将提供状态消息以帮助您解决问题。如果问题在一小时后仍然存在，则操作失败。这样做的目的是在出现临时问题时给它时间恢复。
+ **通过用户数据部署代码**：跳过匹配不会检查通过用户数据脚本部署的代码更改。如果您使用用户数据提取新代码并在新实例上安装这些更新，则建议您关闭跳过匹配功能，以确保所有实例都能收到您的最新代码，即使没有启动模板版本更新也是如此。
+ **更新限制**：如果您在具有所需配置的实例刷新处于活动状态时，尝试更新自动扩缩组的启动模板、启动配置或混合实例策略，则请求将失败，并显示以下验证错误：`An active instance refresh with a desired configuration exists. All configuration options derived from the desired configuration are not available for update while the instance refresh is active.`
+ **基于属性的实例选择**：如果自动扩缩组使用基于属性的实例选择（在混合实例策略中指定 `InstanceRequirements`），则不支持以下实例刷新参数：
  + **SkipMatching**-如果您使用已`InstanceRequirements`配置的 Auto Scaling 组中的`SkipMatching`参数启动实例刷新，则实例刷新将失败。
  + **DesiredConfiguration**-如果您使用已`InstanceRequirements`配置的 Auto Scaling 组中的`DesiredConfiguration`参数启动实例刷新，则实例刷新将失败。

  如果需要对使用基于属性的实例选择的自动扩缩组执行实例刷新，请在不使用这些参数的情况下启动实例刷新。
+ 根卷替换不支持 Elastic Load Balancing。

# 了解实例刷新的默认值
<a name="understand-instance-refresh-default-values"></a>

在开始刷新实例之前，您可以自定义影响实例刷新的各种首选项。某些首选项默认值会有所不同，具体取决于您使用的是控制台还是命令行（AWS CLI 或 AWS SDK）。

下表列出了实例刷新设置的默认值。


| 设置 | AWS CLI 或者 AWS SDK | Amazon EC2 Auto Scaling 控制台 | 
| --- | --- | --- | 
| CloudWatch 警报 | 已禁用（空白） | 已禁用 | 
| 自动回滚 | 已禁用 (false) | 已禁用 | 
| 烘烤时间 | Zero | Zero | 
| 检查点 | 已禁用 (false) | 已禁用 | 
| 检查点延迟 | 1 小时（3600 秒） | 1 小时 | 
| 实例预热 | [默认实例预热](ec2-auto-scaling-default-instance-warmup.md)（如果已定义），否则为[运行状况检查宽限期](health-check-grace-period.md)。 | [默认实例预热](ec2-auto-scaling-default-instance-warmup.md)（如果已定义），否则为[运行状况检查宽限期](health-check-grace-period.md)。 | 
| 最高运行正常百分比 | 根据实例维护策略而有所不同。如果没有实例维护策略，则默认为 100%（空白）。 | 根据实例维护策略而有所不同。如果没有实例维护策略，则默认为 100%（空白）。 | 
| 最低运行正常百分比 | 根据实例维护策略而有所不同。如果没有实例维护策略，则默认为 90%。 | 根据实例维护策略而有所不同。如果没有实例维护策略，则默认为 90%。 | 
| 横向缩减保护实例 | Wait | 忽略 | 
| 跳过匹配 | 已禁用 (false) | 已启用 | 
| 备用实例 | Wait | 忽略 | 

各设置的描述如下所示：

**CloudWatch 警报 (`AlarmSpecification`)**  
 CloudWatch 警报规格。 CloudWatch 警报可用于识别任何问题，并在警报进入`ALARM`状态时使操作失败。有关更多信息，请参阅 [使用自动回滚启动实例刷新](instance-refresh-rollback.md#instance-refresh-using-auto-rollback)。

**自动回滚 (`AutoRollback`)**  
控制在实例刷新失败时 Amazon EC2 Auto Scaling 是否将自动扩缩组回滚到其先前的配置。有关更多信息，请参阅 [通过手动或自动回滚撤消更改](instance-refresh-rollback.md)。

**烘焙时间 `BakeTime`**  
实例刷新结束后等待的时间，在此之后才视为实例刷新已完成。

**检查点 (`CheckpointPercentages`)**  
控制 Amazon EC2 Auto Scaling 是否分阶段替换实例。如果您需要在替换所有实例之前对实例进行验证，则此功能非常有用。有关更多信息，请参阅 [将检查点添加到实例刷新](asg-adding-checkpoints-instance-refresh.md)。

**检查点延迟 (`CheckpointDelay`)**  
在到达检查点之后与继续操作之前需要等待的时间量（以秒为单位）。有关更多信息，请参阅 [将检查点添加到实例刷新](asg-adding-checkpoints-instance-refresh.md)。

**实例预热 (`InstanceWarmup`)**  
以秒为单位的时间段，在此期间，Amazon EC2 Auto Scaling 等待新实例被认为已完成初始化，然后继续替换下一个实例。如果您已经正确定义了自动扩缩组的默认实例预热，则无需更改实例预热（除非您想覆盖默认）。有关更多信息，请参阅 [为 Auto Scaling 组设置原定设置实例预热](ec2-auto-scaling-default-instance-warmup.md)。

**最高运行正常百分比 (`MaxHealthyPercentage`)**  
替换实例时可增加到自动扩缩组所需容量的百分比。

**最低运行正常百分比 (`MinHealthyPercentage`)**  
在可继续操作之前必须处于服务状态、运行正常且准备好使用的自动扩缩组所需容量的百分比。

**横向缩减保护实例 (`ScaleInProtectedInstances`)**  
控制若找到受保护无法横向缩减的实例时 Amazon EC2 Auto Scaling 要采取的操作。有关这些实例的更多信息，请参阅 [使用实例横向缩减保护以控制实例终止](ec2-auto-scaling-instance-protection.md)。  
Amazon EC2 Auto Scaling 提供以下选项：  
+ **替换**（`Refresh`）：替换受横向缩减保护的实例。
+ **忽略**（`Ignore`）：忽略受横向缩减保护的实例，并继续替换未受保护的实例。
+ **等待**（`Wait`）：等待一小时，以删除横向缩减保护。如果您不这样做，实例刷新将失败。

**跳过匹配 (`SkipMatching`)**  
控制 Amazon EC2 Auto Scaling 是否会跳过替换与所需配置匹配的实例。如果未指定所需配置，则会跳过替换相关实例，这些实例的启动模板和实例类型与自动扩缩组在实例刷新启动之前使用的启动模板和实例类型相同。有关更多信息，请参阅 [使用实例刷新和跳过匹配](asg-instance-refresh-skip-matching.md)。

**备用实例 (`StandbyInstances`)**  
控制 Amazon EC2 Auto Scaling 会在实例处于 `Standby` 状态时做什么。有关这些实例的更多信息，请参阅 [临时从 Auto Scaling 组中移除实例](as-enter-exit-standby.md)。  
Amazon EC2 Auto Scaling 提供以下选项：  
+ **终止**（`Terminate`）：终止处于 `Standby` 状态的实例。
+ **忽略**（`Ignore`）：忽略处于 `Standby` 状态的实例，并继续替换处于 `InService` 状态的实例。
+ **等待**（`Wait`）：等待一小时让实例恢复服务。如果您不这样做，实例刷新将失败。

# 使用 AWS 管理控制台 或开始刷新实例 AWS CLI
<a name="start-instance-refresh"></a>

**重要**  
您可以回滚正在进行的实例刷新，以撤消任何更改。要使此功能起作用，自动扩缩组在启动实例刷新之前必须满足使用回滚的先决条件。有关更多信息，请参阅 [通过手动或自动回滚撤消更改](instance-refresh-rollback.md)。

以下过程可帮助您使用 AWS 管理控制台 或启动实例刷新 AWS CLI。

## 启动实例刷新（控制台）
<a name="start-instance-refresh-console"></a>

如果这是您第一次开启实例刷新，则使用控制台将有助于您了解可用的功能和选项。

### 在控制台中开启实例刷新（基本步骤）
<a name="starting-an-instance-refresh-in-the-console"></a>

如果您以前没有为 Auto Scaling 组定义[混合实例策略](ec2-auto-scaling-mixed-instances-groups.md)，请使用下面的步骤。如果您以前定义了混合实例策略，请参阅 [在控制台中开启实例刷新（混合实例组）](#starting-an-instance-refresh-in-the-console-mig) 以开启实例刷新。

**启动实例刷新**

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

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

   将在 **Auto Scaling group**（Auto Scaling 组）页面底部打开一个拆分窗格。

1. 在 **Instance refresh**（实例刷新）选项卡上的 **Active instance refresh**（活跃实例刷新）中，选择 **Start instance refresh**（开启实例刷新）。

1. 对于**可用性设置**，请执行以下操作：

   1. 对于**实例替换方法**：
      + 如果您*尚未*在自动扩缩组上设置实例维护策略，则**实例替换方法**的默认设置为**终止并启动**。这是实例刷新的旧版默认行为。
      + 如果您在自动扩缩组上设置了实例维护策略，它将为**实例替换方法**提供默认值。要覆盖实例维护策略，请选择**覆盖**。覆盖仅适用于当前的实例刷新。下次启动实例刷新时，这些值将重置为实例维护策略的默认值。

      以下步骤介绍如何更新实例替换方法。

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

      1. 对于**设置运行正常百分比**，为以下一个或两个字段输入值。启用字段因所选择的**实例替换方法**的选项而异。
         + **最小**：设置继续进行实例刷新所需的最低运行正常百分比。
         + **最大**：设置实例刷新期间可能的最高运行正常百分比。

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

      1. 展开**为无效的替换大小设置回退行为**部分，然后选择是通过**违反最高运行正常百分比**来确定可用性的优先级，还是通过**违反最低运行正常百分比**。

         对于非常小的组，不建议保留默认的**违反最低运行正常百分比**选项。如果自动扩缩组中只有一个实例时，启动实例刷新可能会导致中断。

         如果您使用的自动扩缩组还没有实例维护策略，则此步骤将配置回退行为。此选项不可用，也不会在您的组有实例维护策略时出现。此选项也仅适用于**终止并启动**替换方法。为了优先考虑可用性，其他替换方法将违反最高运行正常百分比。

   1. 对于**实例预热**，输入从新实例的状态变为 `InService` 之时起到其完成初始化时为止需要经过的秒数。Amazon EC2 Auto Scaling 在继续替换下一个实例之前会等待这段时间。

      预热时，新启动的实例也不会计入自动扩缩组的聚合实例指标（例如 `CPUUtilization`、`NetworkIn` 和 `NetworkOut`）。如果已在 Auto Scaling 组中添加了扩展策略，扩展活动将并行运行。如果为实例刷新预热期设置了较长的时间间隔，则新启动的实例需要更多的时间才能显示在指标中。因此，充分的预热期可防止 Amazon EC2 Auto Scaling 根据过时的指标数据进行扩缩。

      如果您已经为自动扩缩组正确定义了默认实例预热，则无需更改实例预热。但是，如果您想覆盖默认，则可以为此选项设置值。有关设置默认实例预热的更多信息，请参阅 [为 Auto Scaling 组设置原定设置实例预热](ec2-auto-scaling-default-instance-warmup.md)。

1. 对于**刷新设置**，请执行以下操作：

   1. （可选）对于 **Checkpoints**（检查点），选择 **Enable checkpoints**（启用检查点），以使用递增量或分阶段的实例刷新方法来替换实例。这将为在替换集之间进行验证提供额外时间。如果您选择不启用检查点，将以一次近乎连续的操作替换这些实例。

      如果您启用检查点，请参阅 [启用检查点（控制台）](enable-checkpoints-console-cli.md#enable-checkpoints-console) 以了解其他步骤。

   1. （可选）对于**烘焙时间**，请指定在实例刷新结束后等待的时间，在此之后才视为实例刷新已完成。

   1. 启用或关闭 **Skip matching**（跳过匹配）：
      + 若要跳过替换已与您的启动模板匹配的实例，请将**启用跳过匹配**复选框保持为选中状态。
      + 如果通过清除此复选框关闭跳过匹配，则可替换所有实例。

      当您启用跳过匹配时，您可以设置新启动模板或启动模板的新版本，而不是使用现有启动模板。请在**启动实例刷新**页面的**所需配置**部分中执行此操作。
**注意**  
要使用跳过匹配功能更新当前使用启动配置的 Auto Scaling 组，您必须在 **Desired configuration**（所需配置）中选择启动模板。不支持通过启动配置跳过匹配。

   1. 对于**备用实例**，选择**忽略**、**终止**或**等待**。这决定了当实例处于 `Standby` 状态时会发生什么。有关更多信息，请参阅 [临时从 Auto Scaling 组中移除实例](as-enter-exit-standby.md)。

      如果您选择**等待**，则必须采取其他步骤才能使这些实例恢复服务。如果您不这样做，则实例刷新会替换所有 `InService` 实例并等待一小时。然后，如果还有任何 `Standby` 实例，则实例刷新将失败。为防止出现这种情况，请改为选择**忽略**或**终止**这些实例。

   1. 对于**横向缩减保护实例**，选择**忽略**、**替换**或**等待**。这决定了如果找到横向缩减保护实例会发生什么。有关更多信息，请参阅 [使用实例横向缩减保护以控制实例终止](ec2-auto-scaling-instance-protection.md)。

      如果您选择**等待**，则必须采取其他措施来删除这些实例的横向缩减保护。如果您不这样做，则实例刷新会替换所有未受保护的实例并等待一小时。然后，如果还有任何横向缩减保护实例，则实例刷新将失败。为防止出现这种情况，请改为选择**忽略**或**替换**这些实例。

1. （可选）对于**CloudWatch 警**报，请选择**启用 CloudWatch 警报**，然后选择一个或多个警报。 CloudWatch 警报可用于识别任何问题，并在警报进入`ALARM`状态时使操作失败。有关更多信息，请参阅 [使用自动回滚启动实例刷新](instance-refresh-rollback.md#instance-refresh-using-auto-rollback)。

1. （可选）展开**所需配置**部分，以指定您要对自动扩缩组进行的任何更新。

   对于此步骤，您可以选择使用 JSON 或 YAML 语法来编辑参数值，而不是在控制台界面中进行选择。为此，请选择 **Use code editor**（使用代码编辑器），而不是 **Use console interface**（使用控制台界面）。以下步骤介绍如何使用控制台界面进行选择。

   1. 对于 **Update launch template**（更新启动模板）：
      + 如果您*尚未*为自动扩缩组创建新启动模板或新启动模板版本，则不要选中此复选框。
      + 如果您已创建新启动模板或新启动模板版本，请选中此复选框。当您选择此选项时，Amazon EC2 Auto Scaling 将为您显示当前启动模板和当前启动模板版本。它还列出了任何其他可用版本。选择启动模板，然后选择版本。

        在您选择版本后，可以看到版本信息。这是作为实例刷新的组成部分替换实例时将要使用的启动模板的版本。如果实例刷新成功，则每当新实例启动时（例如在组扩展时），也将使用此版本的启动模板。

   1. 对于 **Choose a set of instance types and purchase options to override the instance type in the launch template**（选择一组实例类型和购买选项以覆盖启动模板中的实例类型）：
      + 如果您想使用您在启动模板中指定的实例类型和购买选项，请不要选中此复选框。
      + 如果您要覆盖启动模板中的实例类型或运行竞价型实例，请选中此复选框。您可以手动添加每种实例类型，也可以选择主实例类型和为您检索任何其他匹配实例类型的建议选项。如果您计划启动竞价型实例，我们建议添加几种不同的实例类型。这样，如果您选择的可用区中实例容量不足，则 Amazon EC2 Auto Scaling 可以启动另一种实例类型。有关更多信息，请参阅 [Auto Scaling 组具有多个实例类型和购买选项](ec2-auto-scaling-mixed-instances-groups.md)。
**警告**  
不要将竞价型实例用于无法处理竞价型实例中断的应用程序。如果 Amazon EC2 Spot 服务需要回收容量，可能会发生中断。

      如果您选中此复选框，请确保启动模板尚未请求竞价型实例。您无法使用请求竞价型实例的启动模板来创建使用多种实例类型并启动竞价型和按需型实例的自动扩缩组。
**注意**  
要在当前使用启动配置的 Auto Scaling 组上配置这些选项，您必须在 **Update launch template**（更新启动模板）中选择启动模板。不支持覆盖您的启动配置中的实例类型。

1. （可选）对于**回滚设置**，选择**启用自动回滚**以在实例刷新失败时自动回滚实例刷新。

   只有当自动扩缩组满足使用回滚的先决条件时，才能启用此设置。

   有关更多信息，请参阅 [通过手动或自动回滚撤消更改](instance-refresh-rollback.md)。

1. 审核您的所有选择，以确认所有选择的设置都正确。

   此时，最好验证当前更改与建议更改之间的差异不会以意外或不需要的方式影响您的应用程序。要确认您的实例类型与您的启动模板兼容，请参阅 [实例类型兼容性](instance-refresh-overview.md#instance-type-compatibility)。

1. 如果您对实例刷新选择感到满意，请选择**启动实例刷新**。

### 在控制台中开启实例刷新（混合实例组）
<a name="starting-an-instance-refresh-in-the-console-mig"></a>

如果您已使用[混合实例策略](ec2-auto-scaling-mixed-instances-groups.md)创建了 Auto Scaling 组，则请使用以下步骤。如果您尚未为您的组定义混合实例策略，请参阅 [在控制台中开启实例刷新（基本步骤）](#starting-an-instance-refresh-in-the-console) 以开启实例刷新。

**启动实例刷新**

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

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

   将在 **Auto Scaling group**（Auto Scaling 组）页面底部打开一个拆分窗格。

1. 在 **Instance refresh**（实例刷新）选项卡上的 **Active instance refresh**（活跃实例刷新）中，选择 **Start instance refresh**（开启实例刷新）。

1. 对于**可用性设置**，请执行以下操作：

   1. 对于**实例替换方法**：
      + 如果您*尚未*在自动扩缩组上设置实例维护策略，则**实例替换方法**的默认设置为**终止并启动**。这是实例刷新的旧版默认行为。
      + 如果您在自动扩缩组上设置了实例维护策略，它将为**实例替换方法**提供默认值。要覆盖实例维护策略，请选择**覆盖**。覆盖仅适用于当前的实例刷新。下次启动实例刷新时，这些值将重置为实例维护策略的默认值。

      以下步骤介绍如何更新实例替换方法。

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

      1. 对于**设置运行正常百分比**，为以下一个或两个字段输入值。启用字段因所选择的**实例替换方法**的选项而异。
         + **最小**：设置继续进行实例刷新所需的最低运行正常百分比。
         + **最大**：设置实例刷新期间可能的最高运行正常百分比。

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

      1. 展开**为无效的替换大小设置回退行为**部分，然后选择是通过**违反最高运行正常百分比**来确定可用性的优先级，还是通过**违反最低运行正常百分比**。

         对于非常小的组，不建议保留默认的**违反最低运行正常百分比**选项。如果自动扩缩组中只有一个实例时，启动实例刷新可能会导致中断。

         如果您使用的自动扩缩组还没有实例维护策略，则此步骤将配置回退行为。此选项不可用，也不会在您的组有实例维护策略时出现。此选项也仅适用于**终止并启动**替换方法。为了优先考虑可用性，其他替换方法将违反最高运行正常百分比。

   1. 对于**实例预热**，输入从新实例的状态变为 `InService` 之时起到其完成初始化时为止需要经过的秒数。Amazon EC2 Auto Scaling 在继续替换下一个实例之前会等待这段时间。

      预热时，新启动的实例也不会计入自动扩缩组的聚合实例指标（例如 `CPUUtilization`、`NetworkIn` 和 `NetworkOut`）。如果已在 Auto Scaling 组中添加了扩展策略，扩展活动将并行运行。如果为实例刷新预热期设置了较长的时间间隔，则新启动的实例需要更多的时间才能显示在指标中。因此，充分的预热期可防止 Amazon EC2 Auto Scaling 根据过时的指标数据进行扩缩。

      如果您已经为自动扩缩组正确定义了默认实例预热，则无需更改实例预热。但是，如果您想覆盖默认，则可以为此选项设置值。有关设置默认实例预热的更多信息，请参阅 [为 Auto Scaling 组设置原定设置实例预热](ec2-auto-scaling-default-instance-warmup.md)。

1. 对于**刷新设置**，请执行以下操作：

   1. （可选）对于 **Checkpoints**（检查点），选择 **Enable checkpoints**（启用检查点），以使用递增量或分阶段的实例刷新方法来替换实例。这将为在替换集之间进行验证提供额外时间。如果您选择不启用检查点，将以一次近乎连续的操作替换这些实例。

      如果您启用检查点，请参阅 [启用检查点（控制台）](enable-checkpoints-console-cli.md#enable-checkpoints-console) 以了解其他步骤。

   1. 启用或关闭 **Skip matching**（跳过匹配）：
      + 若要跳过替换已与您的启动模板匹配的实例和任何实例类型覆盖，请将**启用跳过匹配**复选框保持为选中状态。
      + 如果您选择通过清除此复选框关闭跳过匹配，则可替换所有实例。

      当您启用跳过匹配时，您可以设置新启动模板或启动模板的新版本，而不是使用现有启动模板。请在**启动实例刷新**页面的**所需配置**部分中执行此操作。您还可以在 **Desired configuration**（所需配置）中更新实例类型覆盖。

   1. 对于**备用实例**，选择**忽略**、**终止**或**等待**。这决定了当实例处于 `Standby` 状态时会发生什么。有关更多信息，请参阅 [临时从 Auto Scaling 组中移除实例](as-enter-exit-standby.md)。

      如果您选择**等待**，则必须采取其他步骤才能使这些实例恢复服务。如果您不这样做，则实例刷新会替换所有 `InService` 实例并等待一小时。然后，如果还有任何 `Standby` 实例，则实例刷新将失败。为防止出现这种情况，请改为选择**忽略**或**终止**这些实例。

   1. 对于**横向缩减保护实例**，选择**忽略**、**替换**或**等待**。这决定了如果找到横向缩减保护实例会发生什么。有关更多信息，请参阅 [使用实例横向缩减保护以控制实例终止](ec2-auto-scaling-instance-protection.md)。

      如果您选择**等待**，则必须采取其他措施来删除这些实例的横向缩减保护。如果您不这样做，则实例刷新会替换所有未受保护的实例并等待一小时。然后，如果还有任何横向缩减保护实例，则实例刷新将失败。为防止出现这种情况，请改为选择**忽略**或**替换**这些实例。

1. （可选）对于**CloudWatch 警**报，请选择**启用 CloudWatch 警报**，然后选择一个或多个警报。 CloudWatch 警报可用于识别任何问题，并在警报进入`ALARM`状态时使操作失败。有关更多信息，请参阅 [使用自动回滚启动实例刷新](instance-refresh-rollback.md#instance-refresh-using-auto-rollback)。

1. 在 **Desired configuration**（所需配置）部分中，执行以下操作。

   对于此步骤，您可以选择使用 JSON 或 YAML 语法来编辑参数值，而不是在控制台界面中进行选择。为此，请选择 **Use code editor**（使用代码编辑器），而不是 **Use console interface**（使用控制台界面）。以下步骤介绍如何使用控制台界面进行选择。

   1. 对于 **Update launch template**（更新启动模板）：
      + 如果您*尚未*为自动扩缩组创建新启动模板或新启动模板版本，则不要选中此复选框。
      + 如果您已创建新启动模板或新启动模板版本，请选中此复选框。当您选择此选项时，Amazon EC2 Auto Scaling 将为您显示当前启动模板和当前启动模板版本。它还列出了任何其他可用版本。选择启动模板，然后选择版本。

        在您选择版本后，可以看到版本信息。这是作为实例刷新的组成部分替换实例时将要使用的启动模板的版本。如果实例刷新成功，则每当新实例启动时（例如在组扩展时），也将使用此版本的启动模板。

   1. 对于 **Use these settings to override the instance type and purchase option defined in the launch template**（使用这些设置覆盖在启动模板中定义的实例类型和购买选项）：

      默认情况下，此复选框处于选中状态。Amazon EC2 Auto Scaling 将使用当前在适用于 Auto Scaling 组的*混合实例策略*中设置的值填充每个参数。仅更新您要更改的参数的值。有关这些设置的指导，请参阅 [Auto Scaling 组具有多个实例类型和购买选项](ec2-auto-scaling-mixed-instances-groups.md)。
**警告**  
我们建议您不要清除此复选框。仅当您希望停止使用混合实例策略时才清除它。在实例刷新成功后，Amazon EC2 Auto Scaling 会将您的组更新为与 **Desired configuration**（所需配置）匹配。如果它不再包含混合实例策略，Amazon EC2 Auto Scaling 将逐渐终止当前运行的所有竞价型实例，并将它们替换为按需型实例。或者，如果您的启动模板请求竞价型实例，则 Amazon EC2 Auto Scaling 将逐渐终止当前正在运行的所有按需型实例，并将它们替换为竞价型实例。

1. （可选）对于**回滚设置**，选择**启用自动回滚**以在实例刷新因任何原因而失败时自动回滚。

   只有当自动扩缩组满足使用回滚的先决条件时，才能启用此设置。

   有关更多信息，请参阅 [通过手动或自动回滚撤消更改](instance-refresh-rollback.md)。

1. 审核您的所有选择，以确认所有选择的设置都正确。

   此时，最好验证当前更改与建议更改之间的差异不会以意外或不需要的方式影响您的应用程序。要确认您的实例类型与您的启动模板兼容，请参阅 [实例类型兼容性](instance-refresh-overview.md#instance-type-compatibility)。

   如果您对实例刷新选择感到满意，请选择**启动实例刷新**。

## 启动实例刷新（AWS CLI）
<a name="start-instance-refresh-cli"></a>

**启动实例刷新**  
使用以下[start-instance-refresh](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/start-instance-refresh.html)命令从启动实例刷新 AWS CLI。您可以在 JSON 配置文件中指定要更改的任何首选项。引用配置文件时，请提供该文件的路径和名称，如以下示例所示。

```
aws autoscaling start-instance-refresh --cli-input-json file://config.json
```

`config.json` 的内容：

```
{
    "AutoScalingGroupName": "my-asg",
    "Preferences": {
      "InstanceWarmup": 60,
      "MinHealthyPercentage": 50,
      "AutoRollback": true,
      "ScaleInProtectedInstances": Ignore,
      "StandbyInstances": Terminate
    }
}
```

如果不提供首选项，则会使用默认值。有关更多信息，请参阅 [了解实例刷新的默认值](understand-instance-refresh-default-values.md)。

输出示例：

```
{
    "InstanceRefreshId": "08b91cf7-8fa6-48af-b6a6-d227f40f1b9b"
}
```

# 使用 AWS 管理控制台 或监控实例刷新 AWS CLI
<a name="check-status-instance-refresh"></a>

您可以使用或监控正在进行的实例刷新，也可以查看过去六周内过去的实例刷新状态。 AWS 管理控制台 AWS CLI

## 监控和检查实例刷新的状态
<a name="monitor-and-check-status"></a>

要监控和检查实例刷新的状态，请使用以下方法之一：

------
#### [ 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. 在 **Instance refresh**（实例刷新）选项卡上的 **Instance refresh history**（实例刷新历史记录）下，您可以通过查看 **Status**（状态）列来确定您的请求的状态。操作在初始化时进入 `Pending` 状态。然后，状态应快速更改为 `InProgress`。所有实例更新后，状态将更改为 `Successful`。

1. 通过查看该组的扩缩活动，您可以进一步监控正在进行的活动是成功还是失败。在**活动**选项卡上的**活动历史记录**下，当实例刷新开始时，您会看到实例终止时的条目以及启动实例时的另一组条目。如果您有许多扩缩活动，则可以通过选择活动历史记录顶部的 **>** 图标来查看其中的更多活动。有关对可能导致活动失败的问题进行排查的信息，请参阅[排查 Amazon EC2 Auto Scaling 中的问题](CHAP_Troubleshooting.md)。

1. （可选）在**实例管理**选项卡的**实例**下，您可以根据需要查看特定实例的进度。

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

**监控和检查实例刷新的状态（AWS CLI）**  
使用以下 [describe-instance-refreshes](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/describe-instance-refreshes.html) 命令。

```
aws autoscaling describe-instance-refreshes --auto-scaling-group-name my-asg
```

下面是示例输出。

实例刷新按开始时间排序。首先描述仍在进行的实例刷新。

```
{
  "InstanceRefreshes":[
    {
      "InstanceRefreshId":"08b91cf7-8fa6-48af-b6a6-d227f40f1b9b",
      "AutoScalingGroupName":"my-asg",
      "Status":"InProgress",
      "StatusReason":"Waiting for instances to warm up before continuing. For example: i-0645704820a8e83ff is warming up.",
      "StartTime":"2023-11-24T16:46:52+00:00",
      "PercentageComplete":50,
      "InstancesToUpdate":0,
      "Preferences":{
        "MaxHealthyPercentage":120,
        "MinHealthyPercentage":90,
        "InstanceWarmup":60,
        "SkipMatching":false,
        "AutoRollback":true,
        "ScaleInProtectedInstances":"Ignore",
        "StandbyInstances":"Ignore"
      }
    },
    {
      "InstanceRefreshId":"0e151305-1e57-4a32-a256-1fd14157c5ec",
      "AutoScalingGroupName":"my-asg",
      "Status":"Successful",
      "StartTime":"2023-11-22T13:53:37+00:00",
      "EndTime":"2023-11-22T13:59:45+00:00",
      "PercentageComplete":100,
      "InstancesToUpdate":0,
      "Preferences":{
        "MaxHealthyPercentage":120,
        "MinHealthyPercentage":90,
        "InstanceWarmup":60,
        "SkipMatching":false,
        "AutoRollback":true,
        "ScaleInProtectedInstances":"Ignore",
        "StandbyInstances":"Ignore"
      }
    }
  ]
}
```

通过查看该组的扩缩活动，您可以进一步监控正在进行的活动是成功还是失败。扩缩活动还可以帮助您深入了解更多详细信息，以帮助您排查实例刷新问题。有关更多信息，请参阅 [排查 Amazon EC2 Auto Scaling 中的问题](CHAP_Troubleshooting.md)。

------

## 实例刷新状态
<a name="instance-refresh-statuses"></a>

当您启动实例刷新时，它会进入**待处理**状态。它从 “**待处理**” 传递到，**InProgress**直到达到 “**成功**”、“**失败**”、“**已取消**” 或**RollbackFailed**。**RollbackSuccessful**

实例刷新可以具有以下状态：


| Status | 说明 | 
| --- | --- | 
| 待处理 | 请求已创建，但实例刷新尚未开始。 | 
| InProgress | 实例刷新正在进行中。 | 
| 成功 | 实例刷新已成功完成。 | 
| 已失败 | 实例刷新未能完成。您可以使用状态原因和扩展活动进行故障排除。 | 
| 正在取消 | 正在取消进行中的实例刷新。 | 
| 已取消 | 实例刷新已取消。 | 
| RollbackInProgress | 正在回滚实例刷新。 | 
| RollbackFailed | 回滚未能完成。您可以使用状态原因和扩展活动进行故障排除。 | 
| RollbackSuccessful | 回滚已成功完成。 | 
| 烘焙 | 在实例刷新完成更新实例后，等待指定的烘焙时间。 | 

# 在实例刷新期间更换根卷
<a name="replace-root-volume"></a>

**Topics**
+ [工作原理](#start-instance-refresh-replace-root-volume-how-it-works)
+ [要求](#start-instance-refresh-replace-root-volume-requirements)
+ [使用 “替换根卷” 开始实例刷新](#start-instance-refresh-replace-root-volume-cli)
+ [限制](#start-instance-refresh-replace-root-volume-limitations)
+ [使用生命周期挂钩替换根卷](#replace-root-volume-lifecycle-hooks)

## 工作原理
<a name="start-instance-refresh-replace-root-volume-how-it-works"></a>

根卷替换通过在保持实例运行的同时仅替换根 EBS 卷来更新您的实例。这样就无需启动新实例，也避免了潜在的容量限制。此过程会保留所有其他实例资源，包括：
+ 网络接口和 IP 地址 
+ 非根 EBS 卷 
+ 实例存储卷和数据 
+ 安全组和 IAM 角色 

在更换根卷期间，您的应用程序将继续在现有实例上运行。将分离原始根卷，从您指定的 AMI 创建新的根卷，然后连接到同一个实例。成功替换后，原始根卷将自动删除。

当您使用替换根卷策略时，实例会经历以下生命周期状态：

1. `ReplacingRootVolume`-开始更换根卷

1. `ReplacingRootVolume:Wait`-等待生命周期挂钩完成（如果已配置）

1. `ReplacingRootVolume:Proceed`-继续进行更换

1. `RootVolumeReplaced`-成功完成更换

根卷替换完成后，Auto Scaling 会对更新的实例进行运行状况检查。如果某个实例的根卷更换失败，Auto Scaling 会将该实例标记为终止，并将其替换为新实例。

## 要求
<a name="start-instance-refresh-replace-root-volume-requirements"></a>
+ 您的 Auto Scaling 组必须使用混合实例策略
+ 混合实例策略中的所有替代项都必须指定 `ImageId` 
+ AMIs 必须只包含一个根卷
+ 所有实例都必须与该组的启动模板配置相匹配
+ 您必须使用包含`ImageId`替代项的混合实例策略的所需配置开始实例刷新。

## 使用 “替换根卷” 开始实例刷新
<a name="start-instance-refresh-replace-root-volume-cli"></a>

**使用 “替换根卷” (AWS CLI) 开始刷新实例**  
使用以下[start-instance-refresh](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/start-instance-refresh.html)命令从启动实例刷新 AWS CLI。您可以在 JSON 配置文件中指定要更改的任何首选项。引用配置文件时，请提供该文件的路径和名称，如以下示例所示。

```
aws autoscaling start-instance-refresh --cli-input-json file://config.json
```

`config.json` 的内容：

**Example**  

```
{
  "AutoScalingGroupName": "my-asg",
  "Strategy" : "ReplaceRootVolume",
  "DesiredConfiguration":{
    "MixedInstancesPolicy":{
      "LaunchTemplate": {
        "LaunchTemplateSpecification": {
          "LaunchTemplateId":"my-launch-template",
          "Version": "1"
        },
        "Overrides": [
          {
            "InstanceType":"c5.large",
            "ImageId":"ami-1234example"
          },
          {
            "InstanceType":"m5.large",
            "ImageId":"ami-2345example"
          }
        ]
      }
    }
  },
  "Preferences": {
    "InstanceWarmup": 60,
    "MinHealthyPercentage": 90,
    "AutoRollback": true,
    "ScaleInProtectedInstances": Ignore,
    "StandbyInstances": Ignore
  }
}
```

如果不提供首选项，则会使用默认值。有关更多信息，请参阅 [了解实例刷新的默认值](understand-instance-refresh-default-values.md)。

输出示例：

```
{
    "InstanceRefreshId": "08b91cf7-8fa6-48af-b6a6-d227f40f1b9b"
}
```

## 限制
<a name="start-instance-refresh-replace-root-volume-limitations"></a>
+ 如果 EC2 Auto Scaling 组或所需的实例刷新配置使用`$Latest`或`$Default`启动模板版本，则无法使用替换根卷启动实例刷新。
+ 如果 Amazon EC2 Auto Scaling 组包含的实例类型不在混合实例策略中，则无法使用替换根卷启动实例刷新。
+ 在使用 Replace Root Volume 刷新实例期间，您只能连接所需配置的混合实例策略中存在的类型的实例。
+ 在具有温池的 EC2 Auto Scaling 组上，您无法使用替换根卷来启动实例刷新。
+ 您无法使用替换根卷向具有活动实例刷新的 Amazon EC2 Auto Scaling 组添加温池。

## 使用生命周期挂钩替换根卷
<a name="replace-root-volume-lifecycle-hooks"></a>

正在更换根卷的实例会遵循自己的生命周期过渡，允许您在替换 and/or 后调用操作（例如 Lambda 函数）。有关根卷更换期间生命周期状态的更多信息，请参阅[正在更换根卷的实例的生命周期状态转换](lifecycle-hooks-overview.md#rvr-lifecycle-state-transitions)。

有关添加生命周期钩子的更多信息，请参阅 [向自动扩缩组添加生命周期挂钩](adding-lifecycle-hooks.md)。有关完成生命周期操作的更多信息，请参阅 [在自动扩缩组中完成生命周期操作](completing-lifecycle-hooks.md)。

在替换根卷之前，生命周期挂钩可能在以下情况下很有用：
+ 在更换根卷和重启实例之前，您希望优雅地关闭应用程序。
+ 您想在更换卷之前将数据从根卷移动到其他位置。

更换根卷后，生命周期挂钩在以下情况下可能很有用：
+ 在开始接收流量之前，您需要验证您的实例是否已完全准备好使用新 AMI。
+ 你想引导以前存在于根卷上的应用程序数据。

添加生命周期钩子时，请考虑以下事项：
+ 为生命周期操作配置`autoscaling:EC2_INSTANCE_TERMINATING`生命周期挂钩后，即将进行根卷更换的实例在进入`ReplacingRootVolume:Wait`状态时会暂停以执行自定义操作。
+ 为生命周期操作配置`autoscaling:EC2_INSTANCE_LAUNCHING`生命周期挂钩时，刚刚替换了根卷的实例在进入`Pending:Wait`状态时会暂停执行自定义操作。

当实例达到等待状态时，Amazon EC2 Auto Scaling 将发送通知。Auto Scaling 生命周期挂钩通知包含一个`Action`字段，其值`ReplaceRootVolume`表示实例正在更换根卷。

本指南的 EventBridge 部分提供了这些通知的示例。有关更多信息，请参阅 [实例刷新替换根卷生命周期事件](instance-refresh-eventbridge-events.md#instance-refresh-rvr-lifecycle-events)。

# 使用 AWS 管理控制台 或取消实例刷新 AWS CLI
<a name="cancel-instance-refresh"></a>

您可以取消仍在进行的实例刷新。在完成该操作后，您无法取消。

取消实例刷新不会回滚任何已替换的实例。要回滚对您的实例所做的更改，请改为执行回滚。有关更多信息，请参阅 [通过手动或自动回滚撤消更改](instance-refresh-rollback.md)。

**Topics**
+ [取消实例刷新（控制台）](#cancel-instance-refresh-console)
+ [取消实例刷新（AWS CLI）](#cancel-instance-refresh-cli)

## 取消实例刷新（控制台）
<a name="cancel-instance-refresh-console"></a>

**取消实例刷新**

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

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

1. 在**实例刷新**选项卡的**活跃实例刷新**中，选择**操作**、**取消**。

1. 当系统提示进行确认时，选择 **Confirm**。

实例刷新状态设置为**正在取消**。取消完成后，实例刷新的状态设置为**已取消**。

## 取消实例刷新（AWS CLI）
<a name="cancel-instance-refresh-cli"></a>

**取消实例刷新**  
使用中的[cancel-instance-refresh](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/cancel-instance-refresh.html)命令 AWS CLI 并提供 Auto Scaling 组名。

```
aws autoscaling cancel-instance-refresh --auto-scaling-group-name my-asg
```

输出示例：

```
{
    "InstanceRefreshId": "08b91cf7-8fa6-48af-b6a6-d227f40f1b9b"
}
```

**取消实例刷新而不等待实例过渡**  
将`--no-wait-for-transitioning-instances`选项与中的[cancel-instance-refresh](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/cancel-instance-refresh.html)命令配合使用 AWS CLI ，无需等待实例过渡即可取消实例刷新。

```
aws autoscaling cancel-instance-refresh —auto-scaling-group-name my-asg --no-wait-for-transitioning-instances
```

默认情况下，在取消实例刷新时，Amazon EC2 Auto Scaling 会等待任何进行中的启动和终止完成，然后再将状态设置为**“已取消”**。如果实例耗尽时间较长，或者需要立即开始新实例刷新，则可以使用该命令，这样就无需等待这些过渡操作。

使用此选项时，实例刷新状态将更改为“**已取消**”，这样就可以开始新的实例刷新。任何进行中的启动和终止都将在后台继续进行。

# 通过手动或自动回滚撤消更改
<a name="instance-refresh-rollback"></a>

您可以回滚仍在进行的实例刷新。完成后，您无法将其回滚。但是，您可以通过开始新的实例刷新来再次更新您的自动扩缩组。

回滚时，Amazon EC2 Auto Scaling 会替换到目前为止已部署的实例。新实例与您在启动实例刷新之前保存在自动扩缩组中的配置相匹配。

Amazon EC2 Auto Scaling 提供了以下回滚方式：
+ 手动回滚：手动开始回滚，以撤消部署到回滚点的内容。
+ 自动回滚：如果实例刷新由于某种原因失败或您指定的任何 CloudWatch 警报进入状态，Amazon EC2 Auto Scaling 会自动撤消已部署的`ALARM`内容。

**Topics**
+ [注意事项](#instance-refresh-rollback-considerations)
+ [手动开始回滚](#instance-refresh-manual-rollback)
+ [使用自动回滚启动实例刷新](#instance-refresh-using-auto-rollback)

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

在使用回滚时，请注意以下几点：
+ 只有在启动实例刷新时指定所需的配置时，回滚选项才可用。
+ 如果启动模板是特定编号的版本，则只能回滚到该版本的先前版本。如果自动扩缩组配置为使用`$Latest`或`$Default`启动模板版本，则回滚选项不可用。
+ 您也无法回滚到配置为使用 Param AWS Systems Manager eter Store 中的 AMI 别名的启动模板。
+ 您上次保存在自动扩缩组中的配置必须处于稳定状态。如果未处于稳定状态，回滚工作流程仍会发生，但最终会失败。在您解决问题之前，自动扩缩组可能处于失败状态，无法再成功启动实例。这可能会影响服务或应用程序的可用性。

## 手动开始回滚
<a name="instance-refresh-manual-rollback"></a>

------
#### [ 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. 在**实例刷新**选项卡的**活跃实例刷新**中，依次选择**操作**、**开始回滚**。

1. 当系统提示进行确认时，选择 **Confirm**。

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

**手动开始实例刷新回滚 (AWS CLI)**  
使用中的[rollback-instance-refresh](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/rollback-instance-refresh.html)命令 AWS CLI 并提供 Auto Scaling 组名。

```
aws autoscaling rollback-instance-refresh --auto-scaling-group-name my-asg
```

输出示例：

```
{
    "InstanceRefreshId": "08b91cf7-8fa6-48af-b6a6-d227f40f1b9b"
}
```

**提示**  
如果此命令引发错误，请确保已将 AWS CLI 本地版本更新到最新版本。

------

## 使用自动回滚启动实例刷新
<a name="instance-refresh-using-auto-rollback"></a>

使用自动回滚功能，您可以在实例刷新失败时（例如出现错误或指定的 Amazon CloudWatch 警报进入`ALARM`状态时）自动回滚实例刷新。

如果您启用了自动回滚，并且在替换实例时出现错误，则实例刷新会尝试在一小时内完成所有替换，然后才会失败并回滚。这些错误通常是由诸如 EC2 启动失败、运行状况检查配置错误或不忽略或不允许终止处于 `Standby` 状态或受保护无法横向缩减的实例等原因造成的。

指定 CloudWatch 警报是可选的。要指定警报，首先需要创建警报。您可以指定指标警报和复合警报。有关创建警报的信息，请参阅 [Amazon CloudWatch 用户指南](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/)。以 Elastic Load Balancing 指标为例，如果您使用应用程序负载均衡器，则可以使用 `HTTPCode_ELB_5XX_Count` 和 `HTTPCode_ELB_4XX_Count` 指标。

**注意事项**
+ 如果您指定了 CloudWatch 警报但未启用 auto rollback，并且警报状态变为`ALARM`，则实例刷新失败而不回滚。
+ 启动实例刷新时，您最多可以选择 10 个警报。
+ 选择 CloudWatch 警报时，警报必须处于兼容状态。如果警报状态为 `INSUFFICIENT_DATA` 或 `ALARM`，则在尝试启动实例刷新时会收到错误消息。
+ 在创建警报供 Amazon EC2 Auto Scaling 使用时，警报应包括如何处理丢失的数据点。如果指标在设计上经常缺少数据点，则在这些期间警报的状态为 `INSUFFICIENT_DATA`。发生这种情况时，在找到新的数据点之前，Amazon EC2 Auto Scaling 无法替换实例。要强制警报保持之前的 `ALARM` 或 `OK` 状态，您可以改为选择忽略缺少的数据。有关更多信息，请参阅 *Amazon CloudWatch 用户指南*中的[配置警报如何处理丢失的数据](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html#alarms-and-missing-data)。

------
#### [ 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. 在 **Instance refresh**（实例刷新）选项卡上的 **Active instance refresh**（活跃实例刷新）中，选择 **Start instance refresh**（开启实例刷新）。

1. 按照 [启动实例刷新（控制台）](start-instance-refresh.md#start-instance-refresh-console) 程序进行操作并根据需要配置实例刷新设置。

1. （可选）在 **“刷新设置”** 下，对于**CloudWatch CloudWatch 警****报，选择 “启用警**报”，然后选择一个或多个警报以识别任何问题，并在警报进入`ALARM`状态时操作失败。

1. 在 **Rollback 设置**下，选择**启用自动回滚**以将失败的实例刷新自动回滚到您在启动实例刷新之前保存在自动扩缩组中的配置。

1. 查看您的选择，然后选择**启动实例刷新**。

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

**使用自动回滚启动实例刷新（AWS CLI）**  
使用[start-instance-refresh](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/start-instance-refresh.html)命令并在中`true`为`AutoRollback`选项指定`Preferences`。

以下示例说明如何启动实例刷新，如果出现故障，该刷新将自动回滚。将 *`italicized`* 参数值替换为您自己的值。

```
aws autoscaling start-instance-refresh --cli-input-json file://config.json
```

`config.json` 的内容。

```
{
    "AutoScalingGroupName": "my-asg",
    "DesiredConfiguration": {
      "LaunchTemplate": {
          "LaunchTemplateName": "my-launch-template",
          "Version": "1"
       }
    },
    "Preferences": {
      "AutoRollback": true
    }
}
```

或者，要在实例刷新失败或指定 CloudWatch 警报处于`ALARM`状态时自动回滚，请在中指定`AlarmSpecification`选项`Preferences`并提供警报名称，如下例所示。将 *`italicized`* 参数值替换为您自己的值。

```
{
    "AutoScalingGroupName": "my-asg",
    "DesiredConfiguration": {
      "LaunchTemplate": {
          "LaunchTemplateName": "my-launch-template",
          "Version": "1"
       }
    },
    "Preferences": {
      "AutoRollback": true,
      "AlarmSpecification": { "Alarms": [ "my-alarm" ] }
    }
}
```

如果成功，该命令将返回类似于以下内容的输出。

```
{
  "InstanceRefreshId": "08b91cf7-8fa6-48af-b6a6-d227f40f1b9b"
}
```

**提示**  
如果此命令引发错误，请确保已将 AWS CLI 本地版本更新到最新版本。

------

# 使用实例刷新和跳过匹配
<a name="asg-instance-refresh-skip-matching"></a>

跳过匹配将通知 Amazon EC2 Auto Scaling 忽略已有最新更新的实例。这样，您就无需替换超过所需数量的实例。当您希望确保自动扩缩组使用特定版本的启动模板，并且只替换那些使用其他版本的实例时，这是很有用的。

在跳过匹配时，请注意以下事项：
+ 如果您在启动实例刷新时同时使用跳过匹配和*所需配置*，Amazon EC2 Auto Scaling 将检查是否有任何实例与所需配置匹配。然后，它只会替换与所需配置不匹配的实例。在实例刷新成功后，Amazon EC2 Auto Scaling 会更新组以反映您的所需配置。
+ 如果您使用跳过匹配启动实例刷新，但没有指定所需的配置，Amazon EC2 Auto Scaling 会检查是否有任何实例与您上次保存在自动扩缩组中的配置相匹配。然后，它只会替换与您上次保存的配置不匹配的实例。
+ 您可以将跳过匹配与新的启动模板、启动模板的新版本或一组实例类型配合使用。如果您启用了跳过匹配，但这些内容都没有更改，则实例刷新将立即成功，而无需替换任何实例。如果您对所需配置进行了任何其他更改（例如更改竞价型分配策略），Amazon EC2 Auto Scaling 将等待实例刷新成功。然后，它会更新自动扩缩组设置以反映新的所需配置。
+ 您不能将跳过匹配与新的启动配置配合使用。
+ 当您启动实例刷新并提供所需配置后，Amazon EC2 Auto Scaling 可确保所有实例都使用所需配置。因此，当您指定 `$Default` 或 `$Latest` 作为启动模板的所需版本，然后在实例刷新过程中创建启动模板的新版本时，任何已替换的实例都将再次被替换。
+ 跳过匹配不知道启动模板中的用户数据脚本是否会提取更新的代码并将其安装在新实例上。因此，跳过匹配可能会跳过替换已安装过时代码的实例。在这种情况下，您应该关闭跳过匹配功能，以确保即使没有启动模板版本更新，所有实例也都能收到最新代码。

本节包含 AWS CLI 有关在启用跳过匹配的情况下开始实例刷新的说明。有关如何使用控制台的说明，请参阅[启动实例刷新（控制台）](start-instance-refresh.md#start-instance-refresh-console)。

## 跳过匹配（基本程序）
<a name="skip-matching"></a>

按照本节中的步骤使用 AWS CLI 来执行以下操作：
+ 创建您希望应用于实例的启动模板。
+ 启动实例刷新，将启动模板应用到自动扩缩组。如果您不启用跳过匹配，则所有实例都将被替换。即使用于预置实例的启动模板与您为所需配置指定的启动模板相同，也是如此。

**将跳过匹配与新的启动模板配合使用**

1. 使用[create-launch-template](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/create-launch-template.html)命令为您的 Auto Scaling 组创建新的启动模板。包括定义为您的自动扩缩组创建的实例详细信息的 `--launch-template-data` 选项和 JSON 输入。

   例如，使用以下命令创建包含 AMI ID *`ami-0123456789abcdef0`* 和 `t2.micro` 实例类型的基本启动模板。

   ```
   aws ec2 create-launch-template --launch-template-name my-template-for-auto-scaling --version-description version1 \
     --launch-template-data '{"ImageId":"ami-0123456789abcdef0","InstanceType":"t2.micro"}'
   ```

   如果成功，该命令将返回类似于以下内容的输出。

   ```
   {
      "LaunchTemplate": {
        "LaunchTemplateId": "lt-068f72b729example",
        "LaunchTemplateName": "my-template-for-auto-scaling",
        "CreatedBy": "arn:aws:iam::123456789012:user/Bob",
        "CreateTime": "2023-01-30T18:16:06.000Z",
        "DefaultVersionNumber": 1,
        "LatestVersionNumber": 1
     }
   }
   ```

   有关更多信息，请参阅 [使用创建和管理启动模板的示例 AWS CLI](examples-launch-templates-aws-cli.md)。

1. 使用[start-instance-refresh](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/start-instance-refresh.html)命令启动实例替换工作流程，并应用带有 ID 的新启动模板*`lt-068f72b729example`*。因为启动模板是新的，所以它只有一个版本。这意味着启动模板的版本 `1` 是本次实例刷新的目标。如果在实例刷新期间发生横向扩展事件，并且 Amazon EC2 Auto Scaling 使用本启动模板的版本 `1` 预置新的实例，则它们不会被替换。成功完成操作后，新的启动模板即成功应用到自动扩缩组。

   ```
   aws autoscaling start-instance-refresh --cli-input-json file://config.json
   ```

   `config.json` 的内容。

   ```
   {
       "AutoScalingGroupName": "my-asg",
       "DesiredConfiguration": {
         "LaunchTemplate": {
             "LaunchTemplateId": "lt-068f72b729example",
             "Version": "$Default"
          }
       },
       "Preferences": {
         "SkipMatching": true
       }
   }
   ```

   如果成功，该命令将返回类似于以下内容的输出。

   ```
   {
     "InstanceRefreshId": "08b91cf7-8fa6-48af-b6a6-d227f40f1b9b"
   }
   ```

## 跳过匹配（混合实例组）
<a name="skip-matching-mixed-instances-group"></a>

如果您的 Auto Scaling 组采用[混合实例策略](ec2-auto-scaling-mixed-instances-groups.md)，请按照本节中的步骤使用跳过匹配开始实例刷新。 AWS CLI 您有以下选项：
+ 提供新的启动模板，以应用于在策略中指定的所有实例类型。
+ 提供一组更新的实例类型，无论是否更改策略中的启动模板。例如，您可能想要从不需要的实例类型迁移。您可以按原样使用启动模板，无需更改 AMI、安全组或要替换实例的其他具体信息。

请按照以下部分之一的步骤操作，具体取决于哪个选项适合您的需求。

**将跳过匹配与新的启动模板配合使用**

1. 使用[create-launch-template](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/create-launch-template.html)命令为您的 Auto Scaling 组创建新的启动模板。包括定义为您的自动扩缩组创建的实例详细信息的 `--launch-template-data` 选项和 JSON 输入。

   例如，使用以下命令创建包含 AMI ID *`ami-0123456789abcdef0`* 的启动模板。

   ```
   aws ec2 create-launch-template --launch-template-name my-new-template --version-description version1 \
     --launch-template-data '{"ImageId":"ami-0123456789abcdef0"}'
   ```

   如果成功，该命令将返回类似于以下内容的输出。

   ```
   {
      "LaunchTemplate": {
        "LaunchTemplateId": "lt-04d5cc9b88example",
        "LaunchTemplateName": "my-new-template",
        "CreatedBy": "arn:aws:iam::123456789012:user/Bob",
        "CreateTime": "2023-01-31T15:56:02.000Z",
        "DefaultVersionNumber": 1,
        "LatestVersionNumber": 1
     }
   }
   ```

   有关更多信息，请参阅 [使用创建和管理启动模板的示例 AWS CLI](examples-launch-templates-aws-cli.md)。

1. 要查看您的 Auto Scaling 组的现有混合实例策略，请运行[describe-auto-scaling-groups](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/describe-auto-scaling-groups.html)命令。在下一步中，当您开始刷新实例时，您将需要这些信息。

   以下示例命令返回为名为 *`my-asg`* 的自动扩缩组配置的混合实例策略。

   ```
   aws autoscaling describe-auto-scaling-groups --auto-scaling-group-name my-asg
   ```

   如果成功，该命令将返回类似于以下内容的输出。

   ```
   {
     "AutoScalingGroups":[
       {
         "AutoScalingGroupName":"my-asg",
         "AutoScalingGroupARN":"arn",
         "MixedInstancesPolicy":{
           "LaunchTemplate":{
             "LaunchTemplateSpecification":{
               "LaunchTemplateId":"lt-073693ed27example",
               "LaunchTemplateName":"my-old-template",
               "Version":"$Default"
             },
             "Overrides":[
               {
                 "InstanceType":"c5.large"
               },
               {
                 "InstanceType":"c5a.large"
               },
               {
                 "InstanceType":"m5.large"
               },
               {
                 "InstanceType":"m5a.large"
               }
             ]
           },
           "InstancesDistribution":{
             "OnDemandAllocationStrategy":"prioritized",
             "OnDemandBaseCapacity":1,
             "OnDemandPercentageAboveBaseCapacity":50,
             "SpotAllocationStrategy":"price-capacity-optimized"
           }
         },
         "MinSize":1,
         "MaxSize":5,
         "DesiredCapacity":4,
         ...
       }
     ]
   }
   ```

1. 使用[start-instance-refresh](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/start-instance-refresh.html)命令启动实例替换工作流程，并应用带有 ID 的新启动模板*`lt-04d5cc9b88example`*。因为启动模板是新的，所以它只有一个版本。这意味着启动模板的版本 `1` 是本次实例刷新的目标。如果在实例刷新期间发生横向扩展事件，并且 Amazon EC2 Auto Scaling 使用本启动模板的版本 `1` 预置新的实例，则它们不会被替换。成功完成操作后，更新的混合实例策略将成功应用到自动扩缩组。

   ```
   aws autoscaling start-instance-refresh --cli-input-json file://config.json
   ```

   `config.json` 的内容。

   ```
   {
     "AutoScalingGroupName":"my-asg",
     "DesiredConfiguration":{
       "MixedInstancesPolicy":{
         "LaunchTemplate":{
           "LaunchTemplateSpecification":{
             "LaunchTemplateId":"lt-04d5cc9b88example",
             "Version":"$Default"
           },
           "Overrides":[
             {
               "InstanceType":"c5.large"
             },
             {
               "InstanceType":"c5a.large"
             },
             {
               "InstanceType":"m5.large"
             },
             {
               "InstanceType":"m5a.large"
             }
           ]
         },
         "InstancesDistribution":{
           "OnDemandAllocationStrategy":"prioritized",
           "OnDemandBaseCapacity":1,
           "OnDemandPercentageAboveBaseCapacity":50,
           "SpotAllocationStrategy":"price-capacity-optimized"
           }
         }
       }
     },
     "Preferences":{
       "SkipMatching":true
     }
   }
   ```

   如果成功，该命令将返回类似于以下内容的输出。

   ```
   {
     "InstanceRefreshId": "08b91cf7-8fa6-48af-b6a6-d227f40f1b9b"
   }
   ```

在下一个步骤中，您无需更改启动模板即可提供一组更新的实例类型。

**将跳过匹配与一组更新的实例类型配合使用**

1. 要查看您的 Auto Scaling 组的现有混合实例策略，请运行[describe-auto-scaling-groups](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/describe-auto-scaling-groups.html)命令。在下一步中，当您开始刷新实例时，您将需要这些信息。

   以下示例命令返回为名为 *`my-asg`* 的自动扩缩组配置的混合实例策略。

   ```
   aws autoscaling describe-auto-scaling-groups --auto-scaling-group-name my-asg
   ```

   如果成功，该命令将返回类似于以下内容的输出。

   ```
   {
     "AutoScalingGroups":[
       {
         "AutoScalingGroupName":"my-asg",
         "AutoScalingGroupARN":"arn",
         "MixedInstancesPolicy":{
           "LaunchTemplate":{
             "LaunchTemplateSpecification":{
               "LaunchTemplateId":"lt-073693ed27example",
               "LaunchTemplateName":"my-template-for-auto-scaling",
               "Version":"$Default"
             },
             "Overrides":[
               {
                 "InstanceType":"c5.large"
               },
               {
                 "InstanceType":"c5a.large"
               },
               {
                 "InstanceType":"m5.large"
               },
               {
                 "InstanceType":"m5a.large"
               }
             ]
           },
           "InstancesDistribution":{
             "OnDemandAllocationStrategy":"prioritized",
             "OnDemandBaseCapacity":1,
             "OnDemandPercentageAboveBaseCapacity":50,
             "SpotAllocationStrategy":"price-capacity-optimized"
           }
         },
         "MinSize":1,
         "MaxSize":5,
         "DesiredCapacity":4,
         ...
       }
     ]
   }
   ```

1. 使用[start-instance-refresh](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/start-instance-refresh.html)命令启动实例替换工作流程并应用您的更新。如果您希望替换使用特定实例类型的实例，您所需的配置必须指定仅含所需实例类型的混合实例策略。您可以选择是否在这些实例类型上添加新的实例类型。

   以下示例命令在没有不需要的实例类型 *`m5a.large`* 的情况下启动实例刷新。当组中的实例类型与其余三个实例类型之一不匹配时，实例将被替换。（请注意，实例刷新不会选择要从中预置新实例的实例类型；而是由[分配策略](allocation-strategies.md)来选择。） 成功完成操作后，更新的混合实例策略将成功应用到自动扩缩组。

   ```
   aws autoscaling start-instance-refresh --cli-input-json file://config.json
   ```

   `config.json` 的内容 

   ```
   {
     "AutoScalingGroupName":"my-asg",
     "DesiredConfiguration":{
       "MixedInstancesPolicy":{
         "LaunchTemplate":{
           "LaunchTemplateSpecification":{
             "LaunchTemplateId":"lt-073693ed27example",
             "Version":"$Default"
           },
           "Overrides":[
             {
               "InstanceType":"c5.large"
             },
             {
               "InstanceType":"c5a.large"
             },
             {
               "InstanceType":"m5.large"
             }
           ]
         },
         "InstancesDistribution":{
           "OnDemandAllocationStrategy":"prioritized",
           "OnDemandBaseCapacity":1,
           "OnDemandPercentageAboveBaseCapacity":50,
           "SpotAllocationStrategy":"price-capacity-optimized"
           }
         }
       }
     },
     "Preferences":{
       "SkipMatching":true
     }
   }
   ```

# 将检查点添加到实例刷新
<a name="asg-adding-checkpoints-instance-refresh"></a>

在使用实例刷新时，您可以选择分阶段替换实例，以便您可以随时对实例执行验证。要执行分阶段替换，请添加检查点，这些检查点是实例刷新暂停时的时间点。使用检查点使您能够更好地控制选择更新 Auto Scaling 组的方式。它可以帮助您确认您的应用程序将以可靠、可预测的方式运行。

**Topics**
+ [工作原理](#instance-refresh-checkpoints-how-it-works)
+ [注意事项](#instance-refresh-checkpoints-considerations)
+ [启用检查点](enable-checkpoints-console-cli.md)

## 工作原理
<a name="instance-refresh-checkpoints-how-it-works"></a>

在启动实例刷新时，您可以将检查点指定为自动扩缩组中实例总数的百分比。这些检查点表示在认为已到达检查点之前，自动扩缩组中必须是新实例的实例数最小百分比。例如，如果您的检查点是 `[20, 50, 100]`，则在 20% 的实例为新实例时到达第一个检查点；50% 的实例为新实例时到达第二个检查点；当所有实例都是新实例时，则到达最后一个检查点。

Amazon EC2 Auto Scaling 会调整实例替换速度，以遵守指定的检查点百分比，同时保持组的最小运行正常百分比。为了达到检查点百分比，Amazon EC2 Auto Scaling 有时会替换少于最低运行正常百分比允许的值，但永远不会超过最低运行正常百分比允许的值。

以下自动扩缩组为例，该组有 10 个实例。检查点百分比为 `[20,50,100]`，最低运行正常百分比为 80%，最高运行正常百分比为 100%。为了保持最低运行正常百分比，一次仅可替换两个实例。下图总结了在到达检查点之前替换实例的过程。

![\[此图显示了检查点如何影响实例刷新流程。\]](http://docs.aws.amazon.com/zh_cn/autoscaling/ec2/userguide/images/checkpoints-instance-refresh.png)


在上面的示例中，每个启动的新实例都有一个实例预热期。您可能还拥有生命周期挂钩，该挂钩将实例置于等待状态，然后在实例启动或终止时执行自定义操作。

Amazon EC2 Auto Scaling 会针对除 100% 完成检查点之外的每个检查点发出事件。您可以添加一条 EventBridge 规则，将事件发送到目标，例如 Amazon SNS。这样，当您可以运行所需的验证时，系统就会通知您。有关更多信息，请参阅 [为实例刷新事件创建 EventBridge 规则](monitor-events-eventbridge-sns.md)。

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

在使用检查点时，请记住以下注意事项：
+ 由于检查点基于百分比，因此要替换的实例数将随组的大小而变化。当发生横向扩展活动并且组的大小增加时，正在进行的操作可能会再次达到检查点。如果发生这种情况，Amazon EC2 Auto Scaling 会发送另一个通知，并在继续之前重复检查点之间的等待时间。
+ 在某些情况下可以跳过检查点。例如，假设您的 Auto Scaling 组有两个实例，并且您的检查点百分比为 `[10,40,100]`。替换第一个实例后，Amazon EC2 Auto Scaling 将计算出已替换该组的 50%。由于 50% 高于前两个检查点，因此它将跳过第一个检查点 (`10`) 并发送第二个检查点 (`40`) 的通知。
+ 取消操作将停止进行任何进一步替换。如果您取消操作或在达到最后一个检查点之前操作失败，则任何已替换的实例都不会回滚到其以前的配置。
+ 对于部分刷新，当您重新运行操作时，Amazon EC2 Auto Scaling 不会从最后一个检查点的时刻重新开启，也不会在仅替换旧实例时停止。但是，它将首先针对旧实例进行替换，然后再针对新实例。
+ 当检查点的百分比相对于组中的实例数量而言过低时，实际完成百分比可能会高于该检查点的百分比。例如，假设检查点的百分比为 20%，并且该组有四个实例。如果 Amazon EC2 Auto Scaling 替换了四个实例中的一个，则实际替换的百分比 (25%) 将高于检查点的百分比 (20%)。
+ 达到检查点后，显示的总体完成百分比直到实例完成预热后才会更新。例如，您的检查点百分比为 `[20,50]`，其中具有 15 分钟的检查点延迟和 80 % 的最小运行正常百分比。您的自动扩缩组有 10 个实例，并进行以下替换：
  + 0:00：将两个旧实例替换为新实例。
  + 0:10：两个新实例完成预热。
  + 0:25：将两个旧实例替换为新实例。（为了保持最低运行正常百分比，仅替换两个实例。）
  + 0:35：两个新实例完成预热。
  + 0:35：将一个旧实例替换为新实例。
  + 0:45：一个新实例完成预热。

  在 0:35 时，操作将停止启动新实例。完成百分比尚不能准确反映已完成替换的数量 (50%)，因为新实例未完成预热。在新实例于 0:45 完成其预热期后，完成百分比将显示 50%。
+ 如果启用了多个检查点，实例刷新检查点必须设置为 100%，以确保完全替换所有实例。如果最终检查点设置为小于 100%（例如 50%），则实例刷新将在达到该百分比检查点后停止替换实例，并且不会自动继续到 100% 完成。

# 使用 AWS 管理控制台 或启用检查点 AWS CLI
<a name="enable-checkpoints-console-cli"></a>

您可以使用 AWS 管理控制台 或 AWS CLI 来启用检查点。

## 启用检查点（控制台）
<a name="enable-checkpoints-console"></a>

您可以在开启实例刷新之前启用检查点，以使用增量或分阶段方法替换实例。这将为验证提供额外时间。

**启动使用检查点的实例刷新**

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

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

   将在 **Auto Scaling group**（Auto Scaling 组）页面底部打开一个拆分窗格。

1. 在 **Instance refresh**（实例刷新）选项卡上的 **Active instance refresh**（活跃实例刷新）中，选择 **Start instance refresh**（开启实例刷新）。

1. 在 **Start instance refresh**（开启实例刷新）页面上，输入 **Minimum healthy percentage**（最低运行正常百分比）和 **Instance warmup**（实例预热）的值。

1. 选择 **Enable checkpoints**（启用检查点）复选框。

   此时将显示一个框，您可以在其中定义第一个检查点的百分比阈值。

1. 对于 **Proceed until \$1\$1\$1\$1 % of the group is refreshed**（继续直到刷新该组的 \$1\$1\$1\$1 %）中，输入一个数字 (1–100)。这将设置第一个检查点的百分比。

1. 要添加另一个检查点，请选择**添加检查点**，然后定义下一个检查点的百分比。

1. 要指定 Amazon EC2 Auto Scaling 在达到检查点后等待多长时间，请更新**在检查点之间等待 `1` `hour` **中的字段。时间单位可以是小时、分钟或秒。

1. 如果您已完成实例刷新选择，请选择**启动实例刷新**。

## 启用检查点 (AWS CLI)
<a name="enable-checkpoints-cli"></a>

要使用启用检查点启动实例刷新 AWS CLI，您需要一个定义以下参数的配置文件：
+ `CheckpointPercentages`：指定要替换的实例百分比的阈值。这些阈值提供检查点。当替换和预热的实例百分比达到指定阈值之一时，操作将等待指定的时间段。您可指定在 `CheckpointDelay` 中等待的秒数。当指定的时间段过后，实例刷新将继续进行直到达到下一个检查点（如果适用）。
+ `CheckpointDelay`：指定在到达检查点之后与继续操作之前需要等待的时间量（以秒为单位）。选择提供足够时间以执行验证的时间段。

`CheckpointPercentages` 数组中显示的最后一个值描述需要成功替换的 Auto Scaling 组的百分比。在成功替换此百分比，并且每个实例都被视为已完成初始化后，该操作将转换到 `Successful`。

**创建多个检查点**  
要创建多个检查点，请使用以下示例[start-instance-refresh](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/start-instance-refresh.html)命令。此示例配置了一个实例刷新，它最初刷新 Auto Scaling 组的 1%。在等待 10 分钟后，它会随后刷新接下来的 19%，然后再等待 10 分钟。最后，它会刷新该组的其余部分，然后结束操作。

```
aws autoscaling start-instance-refresh --cli-input-json file://config.json
```

`config.json` 的内容：

```
{
    "AutoScalingGroupName": "my-asg",
    "Preferences": {
      "InstanceWarmup": 60,
      "MinHealthyPercentage": 80,
      "CheckpointPercentages": [1,20,100],
      "CheckpointDelay": 600
    }
}
```

**创建单个检查点**  
要创建单个检查点，请使用以下示例[start-instance-refresh](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/start-instance-refresh.html)命令。此示例配置了一个实例刷新，它最初刷新 Auto Scaling 组的 20%。在等待 10 分钟后，它会随后刷新该组的其余部分，然后结束操作。

```
aws autoscaling start-instance-refresh --cli-input-json file://config.json
```

`config.json` 的内容：

```
{
    "AutoScalingGroupName": "my-asg",
    "Preferences": {
      "InstanceWarmup": 60,
      "MinHealthyPercentage": 80,
      "CheckpointPercentages": [20,100],
      "CheckpointDelay": 600
    }
}
```

**部分刷新 Auto Scaling 组**  
要仅替换 Auto Scaling 组的一部分然后完全停止，请使用以下示例[start-instance-refresh](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/start-instance-refresh.html)命令。此示例配置了一个实例刷新，它最初刷新 Auto Scaling 组的 1%。在等待 10 分钟后，它会随后刷新接下来的 19%，然后结束操作。

```
aws autoscaling start-instance-refresh --cli-input-json file://config.json
```

`config.json` 的内容：

```
{
    "AutoScalingGroupName": "my-asg",
    "Preferences": {
      "InstanceWarmup": 60,
      "MinHealthyPercentage": 80,
      "CheckpointPercentages": [1,20],
      "CheckpointDelay": 600
    }
}
```

# 基于最大实例生命周期替换 Auto Scaling 实例
<a name="asg-max-instance-lifetime"></a>

最大实例生命周期指定实例在终止和替换之前可提供服务的最长时间（以秒为单位）。由于内部安全策略或外部合规性控制，常见使用案例可能需要按计划替换您的实例。

您必须指定至少 86,400 秒（一天）的值。要清除以前设置的值，请指定新值 0。此设置适用于 Auto Scaling 组中的所有当前和未来实例。

**Topics**
+ [注意事项](#max-instance-lifetime-considerations)
+ [设置最大实例生命周期](#set-maximum-instance-lifetime)
+ [限制](#maximum-instance-lifetime-limitations)

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

以下是使用此功能时的注意事项：
+ 每当替换旧实例并启动新实例时，新实例都会使用当前与自动扩缩组关联的启动模板或启动配置。如果启动模板或启动配置指定了其他版本应用程序的亚马逊机器映像（AMI）ID，则将自动部署此版本的应用程序。
+ 将最大实例生命周期设置过低可能会导致实例的替换速度超出预期。Amazon EC2 Auto Scaling 通常一次替换一个实例，两次替换之间会有暂停。但是，如果指定的最大实例生命周期未提供足够的时间来单独替换每个实例，则 Amazon EC2 Auto Scaling 必须一次替换多个实例。可能会一次替换多个实例，最多可达 Auto Scaling 组当前容量的 10%。为避免一次替换过多实例，请设置更长的最大实例生命周期，或者使用实例横向缩减保护来暂时防止单个实例被终止。有关更多信息，请参阅 [使用实例横向缩减保护以控制实例终止](ec2-auto-scaling-instance-protection.md)。
+ 默认情况下，Amazon EC2 Auto Scaling 会创建用于终止实例的新扩展活动，然后终止该实例。在实例终止期间，另一个扩缩活动将会启动一个新实例。您可以使用实例维护策略将此行为更改为在终止前启动。有关更多信息，请参阅 [实例维护策略](ec2-auto-scaling-instance-maintenance-policy.md)。

## 设置最大实例生命周期
<a name="set-maximum-instance-lifetime"></a>

在控制台中创建 Auto Scaling 组时，您将无法设置最大实例生命周期。但在创建该组后，您就可以对其进行编辑，以设置最大实例生命周期。

**为组设置最大实例生命周期（控制台）**

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

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

   将在 **Auto Scaling groups**（Auto Scaling 组）页面底部打开一个拆分窗格，其中显示有关您选择的组的信息。

1. 在 **Details**（详细信息）选项卡上，选择 **Advanced configurations**（高级配置）、**Edit**（编辑）。

1. 对于 **Maximum instance lifetime** (最大实例生命周期)，输入实例可使用的最长秒数。

1. 选择**更新**。

在 **Activity**（活动）选项卡上的 **Activity history**（活动历史记录）下，您可以通过其整个历史记录查看该组中实例的替换情况。

**为组设置最大实例生命周期 (AWS CLI)**  
您还可以使用 AWS CLI 为新的或现有 Auto Scaling 组设置最长实例生命周期。

对于新的 Auto Scaling 组，请使用[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 --cli-input-json file://~/config.json
```

以下示例 `config.json` 文件显示的最长实例生命周期为 `2592000` 秒（30 天）。

```
{
    "AutoScalingGroupName": "my-asg",
    "LaunchTemplate": {
        "LaunchTemplateName": "my-launch-template",
        "Version": "$Default"
    },
    "MinSize": 1,
    "MaxSize": 5,
    "MaxInstanceLifetime": 2592000,
    "VPCZoneIdentifier": "subnet-5ea0c127,subnet-6194ea3b,subnet-c934b782",
    "Tags": []
}
```

对于现有的 Auto Scaling 组，请使用[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-existing-asg --max-instance-lifetime 2592000
```

**验证 Auto Scaling 组的最大实例生命周期**  
使用 [describe-auto-scaling-groups](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/describe-auto-scaling-groups.html) 命令。

```
aws autoscaling describe-auto-scaling-groups --auto-scaling-group-name my-asg
```

## 限制
<a name="maximum-instance-lifetime-limitations"></a>
+ **不能保证每个实例的最大生命周期都是准确的**：不能保证仅在实例最大持续时间结束时替换实例。在某些情况下，Amazon EC2 Auto Scaling 可能需要在您更新最大实例生命周期参数后立即开始替换实例。此行为的原因是避免同时替换所有实例。
+ **遵循实例横向缩减保护**：Amazon EC2 Auto Scaling 提供实例横向缩减保护，以帮助您控制可以终止哪些实例。对实例启用此保护后，即使该实例已达到其最大实例生命周期，Amazon EC2 Auto Scaling 也不会终止该实例。
+ **实例在启动前终止**：当自动扩缩组中只有一个实例时，最大实例生命周期功能可能会导致中断，因为默认情况下 Amazon EC2 Auto Scaling 会终止实例，然后启动新实例。要将此行为更改为在终止前启动，请参阅 [实例维护策略](ec2-auto-scaling-instance-maintenance-policy.md)。