将检查点添加到实例刷新
在使用实例刷新时,您可以选择分阶段替换实例,以便您可以随时对实例执行验证。要执行分阶段替换,请添加检查点,这些检查点是实例刷新暂停时的时间点。使用检查点使您能够更好地控制选择更新 Auto Scaling 组的方式。它可以帮助您确认您的应用程序将以可靠、可预测的方式运行。
Amazon EC2 Auto Scaling 会针对每个检查点发出事件。您可以添加 EventBridge 规则,将事件发送到目标(如 Amazon SNS)。这样,当您可以运行所需的验证时,系统就会通知您。有关更多信息,请参阅为实例刷新事件创建 EventBridge 规则。
注意事项
在使用检查点时,请记住以下注意事项:
-
当替换的实例数达到为检查点定义的百分比阈值时,将达到检查点。替换的实例所占的百分比可以等于或高于百分比阈值,但不能低于该阈值。
-
达到检查点后,总体完成百分比不会显示最新状态,直到实例完成预热后才会显示。
例如,假设您的 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 不会从最后一个检查点的时刻重新开启,也不会在仅替换旧实例时停止。但是,它将首先针对旧实例进行替换,然后再针对新实例。
启用检查点(控制台)
您可以在开启实例刷新之前启用检查点,以使用增量或分阶段方法替换实例。这将为验证提供额外时间。
启动使用检查点的实例刷新
访问 https://console.aws.amazon.com/ec2/
,打开 Amazon EC2 控制台,然后从导航窗格中选择 Auto Scaling Groups(Auto Scaling 组)。 -
选中您的 Auto Scaling 组旁边的复选框。
将在 Auto Scaling group(Auto Scaling 组)页面底部打开一个拆分窗格。
-
在 Instance refresh(实例刷新)选项卡上的 Active instance refresh(活跃实例刷新)中,选择 Start instance refresh(开启实例刷新)。
-
在 Start instance refresh(开启实例刷新)页面上,输入 Minimum healthy percentage(最低运行正常百分比)和 Instance warmup(实例预热)的值。
-
选择 Enable checkpoints(启用检查点)复选框。
此时将显示一个框,您可以在其中定义第一个检查点的百分比阈值。
-
对于 Proceed until ____ % of the group is refreshed(继续直到刷新该组的 ____ %)中,输入一个数字 (1–100)。这将设置第一个检查点的百分比。
-
要添加另一个检查点,请选择添加检查点,然后定义下一个检查点的百分比。
-
要指定 Amazon EC2 Auto Scaling 在达到检查点后等待多长时间,请更新在检查点之间等待
1hour中的字段。时间单位可以是小时、分钟或秒。 -
如果您已完成实例刷新选择,请选择 Start(开启)。
启用检查点 (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} }