将检查点添加到实例刷新 - Amazon EC2 Auto Scaling
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

将检查点添加到实例刷新

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

Amazon EC2 Auto Scaling 会针对每个检查点发出事件。您可以添加一条 EventBridge 规则,将事件发送到目标,例如 Amazon SNS。这样,当您可以运行所需的验证时,系统就会通知您。有关更多信息,请参见 为实例刷新事件创建 EventBridge 规则

以下自动扩缩组为例,该组有 10 个实例。检查点百分比为 [20,50,100],最低运行正常百分比为 80%,最高运行正常百分比为 100%。为了保持最低运行正常百分比,一次仅可替换两个实例。为了达到检查点百分比,Amazon EC2 Auto Scaling 有时会替换少于最低运行正常百分比允许的值,但永远不会超过最低运行正常百分比允许的值。下图总结了在到达检查点之前替换实例的过程。


                    此图显示了检查点如何影响实例刷新流程。

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

注意事项

在使用检查点时,请记住以下注意事项:

  • 当替换自动扩缩组中实例总数的指定百分比时,即达到检查点。该百分比是您希望检查点代表的自动扩缩组的最小百分比。在某些情况下,当检查点的百分比相对于组中的实例数量而言过低时,实际完成百分比可能会高于该检查点的百分比。例如,假设检查点的百分比为 20%,并且该组有四个实例。如果 Amazon EC2 Auto Scaling 替换了四个实例中的一个,则实际替换的百分比 (25%) 将高于检查点的百分比 (20%)。

  • 达到检查点后,总体完成百分比不会显示最新状态,直到实例完成预热后才会显示。

    例如,假设您的 Auto Scaling 组有 10 个实例。您的检查点百分比为 [20,50],其中具有 15 分钟的检查点延迟和 80 % 的最低运行正常百分比。您的组将进行以下替换:

    • 0:00:将两个旧实例替换为新实例。

    • 0:10:两个新实例完成预热。

    • 0:25:将两个旧实例替换为新实例。(为了保持最低运行正常百分比,仅替换两个实例。)

    • 0:35:两个新实例完成预热。

    • 0:35:将一个旧实例替换为新实例。

    • 0:45:一个新实例完成预热。

    在 0:35 时,操作将停止启动新实例。完成百分比尚不能准确反映已完成替换的数量 (50%),因为新实例未完成预热。在新实例于 0:45 完成其预热期后,完成百分比将显示 50%。

  • 由于检查点基于百分比,因此要替换的实例数将随组的大小而变化。当发生横向扩展活动并且组的大小增加时,正在进行的操作可能会再次达到检查点。如果发生这种情况,Amazon EC2 Auto Scaling 会发送另一个通知,并在继续之前重复检查点之间的等待时间。

  • 在某些情况下可以跳过检查点。例如,假设您的 Auto Scaling 组有两个实例,并且您的检查点百分比为 [10,40,100]。替换第一个实例后,Amazon EC2 Auto Scaling 将计算出已替换该组的 50%。由于 50% 高于前两个检查点,因此它将跳过第一个检查点 (10) 并发送第二个检查点 (40) 的通知。

  • 取消操作将停止进行任何进一步替换。如果您取消操作或在达到最后一个检查点之前操作失败,则任何已替换的实例都不会回滚到其以前的配置。

  • 对于部分刷新,当您重新运行操作时,Amazon EC2 Auto Scaling 不会从最后一个检查点的时刻重新开启,也不会在仅替换旧实例时停止。但是,它将首先针对旧实例进行替换,然后再针对新实例。

启用检查点(控制台)

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

启动使用检查点的实例刷新
  1. 访问 https://console.aws.amazon.com/ec2/,打开 Amazon EC2 控制台,然后从导航窗格中选择 Auto Scaling Groups(Auto Scaling 组)。

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

    将在 Auto Scaling group(Auto Scaling 组)页面底部打开一个拆分窗格。

  3. Instance refresh(实例刷新)选项卡上的 Active instance refresh(活跃实例刷新)中,选择 Start instance refresh(开启实例刷新)。

  4. Start instance refresh(开启实例刷新)页面上,输入 Minimum healthy percentage(最低运行正常百分比)和 Instance warmup(实例预热)的值。

  5. 选择 Enable checkpoints(启用检查点)复选框。

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

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

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

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

  9. 如果您已完成实例刷新选择,请选择启动实例刷新

启用检查点 (Amazon CLI)

要在已使用 Amazon CLI 启用检查点的情况下开启实例刷新,您需要定义以下参数的配置文件:

  • CheckpointPercentages:指定要替换的实例百分比的阈值。这些阈值提供检查点。当替换和预热的实例百分比达到指定阈值之一时,操作将等待指定的时间段。您可指定在 CheckpointDelay 中等待的秒数。当指定的时间段过后,实例刷新将继续进行直到达到下一个检查点(如果适用)。

  • CheckpointDelay:指定在到达检查点之后与继续操作之前需要等待的时间量(以秒为单位)。选择提供足够时间以执行验证的时间段。

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

创建多个检查点

要创建多个检查点,请使用以下示例start-instance-refresh命令。此示例配置了一个实例刷新,它最初刷新 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命令。此示例配置了一个实例刷新,它最初刷新 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命令。此示例配置了一个实例刷新,它最初刷新 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 } }