

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

# 将检查点添加到实例刷新
<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
    }
}
```