根据Auto Scaling实例刷新替换实例 - Amazon EC2 Auto Scaling
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

根据Auto Scaling实例刷新替换实例

如果配置更改要求替换实例,并且您的 Auto Scaling 组中有大量实例,则可能很难一次手动替换多个实例。通过实例刷新,可以更轻松地更新 Auto Scaling 组中的实例。

在实例刷新期间,Amazon EC2 Auto Scaling 使一组实例停止服务,终止它们,然后启动一组具有新配置的实例。之后,将以滚动方式替换实例。在滚动更新中,当新实例启动时, Amazon EC2 Auto Scaling 会等到实例通过运行状况检查并完成预热,然后再继续替换另一个实例。此过程将重复执行,直到终止和替换所有实例。

例如,当您有一个新的启动模板或启动配置(其中指定新的 AMI 或新的用户数据)时,此功能非常有用。您只需更新 Auto Scaling 组以指定新的启动模板或启动配置即可。然后,开始实例刷新以立即开始替换 组中的实例的过程。

实例刷新取决于运行状况检查,以确定您的应用程序是否足够健康,可以认为替换成功。有关用于确定实例运行状况的各种运行状况检查的信息,请参阅Auto Scaling 实例的运行状况检查

在开始实例刷新之前,您可以配置最低运行正常百分比来控制应用程序中断的级别。如果您的应用程序未通过运行状况检查,滚动更新过程将在达到最低正常阈值后等待最多 60 分钟,然后最终失败。这样做的目的是在出现临时问题时给它时间恢复。如果滚动更新过程失败,则所有已替换的实例将不会回滚到之前的配置。要修复失败的实例刷新,请首先解决导致更新失败的潜在问题,然后启动另一个实例刷新。

确定新启动的实例正常运行后,Amazon EC2 Auto Scaling 不会立即继续进行下一个替换。它为每个实例在启动后预热提供了一个窗口,您可以配置该窗口。如果配置脚本需要时间运行,这将非常有用。为了保护应用程序的可用性,请确保实例预热期间涵盖应用程序的预期启动时间(即,从新实例投入使用到可接收流量的时间)。

在启动实例刷新时,为帮助确保组能够继续按预期执行,需要考虑以下事项。

  • 预热时,新启动的实例不会计入 Auto Scaling 组的聚合指标。

  • 如果已在 Auto Scaling 组中添加了扩展策略,扩展活动将并行运行。如果为实例刷新设置了较长的预热时间,则新启动的实例将需要更多的时间才能反映在指标中。因此,设置恰当的预热时间有助于防止 Amazon EC2 Auto Scaling 根据过时的指标数据进行扩展。

  • 如果在 Auto Scaling 组中添加了生命周期挂钩,则会等待生命周期挂钩操作完成,实例进入 InService 状态后,才会开始预热。

您可以使用 AWS 管理控制台、 或 AWS CLI开发工具包启动或取消实例刷新。

启动或取消实例刷新(控制台)

在开始之前,请确保您的 Auto Scaling 组已与新的启动模板或启动配置相关联。

启动实例刷新

  1. Open the Amazon EC2 Auto Scaling console at https://console.amazonaws.cn/ec2autoscaling/.

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

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

  3. 实例刷新选项卡上的实例刷新中,选择启动实例刷新

  4. 启动实例刷新对话框中,执行以下操作:

    • (可选)对于最小运行正常百分比,请保留默认值 90 或指定 0 到 100% 范围内的新值。这是 Auto Scaling 组中必须在实例刷新期间保持运行正常以允许操作继续进行的容量值,以组所需容量的百分比表示。将此设置增加到 100% 会将替换率限制为一次只能替换一个实例。相比之下,将此设置降低为 0 会同时替换所有实例。

    • (可选)对于实例预热,默认值是为组的运行状况检查宽限期指定的值。您可以更改该值以确保它反映您的实际应用程序启动时间。默认值可能不反映最新版本应用程序中的最新更新。

  5. 选择 Start (开始)

检查实例刷新的状态

  1. 实例刷新选项卡上的实例刷新下,您可以通过查看状态列来确定请求的状态。操作在初始化时进入 Pending 状态。然后,状态应快速更改为 InProgress。所有实例更新后,状态将更改为 Successful

  2. 活动选项卡上的活动历史记录下,当实例刷新开始时,您会看到实例终止时的条目以及启动实例时的另一组条目。在描述列中,您可以找到实例 ID。

  3. Instance management (实例管理) 选项卡上的 Instances (实例) 下,可以验证您的实例是否已成功启动。最初,您的实例处于 Pending 状态。在实例准备好接收流量时,其状态为 InService运行状况列显示对您的实例执行运行状况检查的结果。

取消实例刷新

  1. Open the Amazon EC2 Auto Scaling console at https://console.amazonaws.cn/ec2autoscaling/.

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

  3. 实例刷新选项卡上的实例刷新中,选择取消实例刷新

  4. 当系统提示进行确认时,选择 Confirm

启动或取消实例刷新 (AWS CLI)

启动实例刷新

要从 AWS CLI 启动实例刷新,可使用 start-instance-refresh 命令。您可以在 JSON 配置文件中指定要更改的任何首选项。引用配置文件时,请提供该文件的路径和名称,如以下示例所示。

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

config.json 的内容。

{ "AutoScalingGroupName": "my-asg", "Preferences": { "InstanceWarmup": 400, "MinHealthyPercentage": 50 } }

或者,您也可以不提供可选的首选项,而通过运行以下命令启动实例刷新。如果不提供首选项,则会为 InstanceWarmupMinHealthyPercentage 使用默认值。

aws autoscaling start-instance-refresh --auto-scaling-group-name my-asg

输出示例。

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

检查实例刷新的状态

使用以下 Auto Scalingdescribe-instance-refreshes 命令查看 组的实例刷新。

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

输出示例。

{ "InstanceRefreshes": [ { "InstanceRefreshId": "08b91cf7-8fa6-48af-b6a6-d227f40f1b9b", "AutoScalingGroupName": "my-asg", "Status": "InProgress", "StartTime": "2020-06-02T18:11:27Z", "PercentageComplete": 0, "InstancesToUpdate": 5 }, { "InstanceRefreshId": "dd7728d0-5bc4-4575-96a3-1b2c52bf8bb1", "AutoScalingGroupName": "my-asg", "Status": "Successful", "StartTime": "2020-06-02T16:43:19Z", "EndTime": "2020-06-02T16:53:37Z", "PercentageComplete": 100, "InstancesToUpdate": 0 } ] }

取消实例刷新

使用 中的 cancel-instance-refresh 命令取消实例刷新时AWS CLI,请指定 Auto Scaling 组的名称,如以下示例所示。

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

输出示例。

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

Limitations

  • 总持续时间:实例刷新可以持续主动替换实例的最长时间为 14 天。

  • 未替换的实例:如果实例处于备用状态或受缩减保护,则无法替换实例。如果 Amazon EC2 Auto Scaling 遇到无法替换的实例,它会继续替换其他实例。

  • 一小时超时:当实例刷新因有处于备用状态或受缩减保护的实例而无法继续执行替换时,它会不断重试一个小时,并提供状态消息来帮助您解决问题。如果问题在 1 小时后仍存在,操作将失败。

  • 无回滚:您可以随时取消实例刷新,但已替换的任何实例都不会回滚到其以前的配置。