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

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

基于实例刷新替换 Auto Scaling 实例

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

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

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

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

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

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

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

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

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

  • 如果您向 Auto Scaling 组添加了生命周期挂钩,则在生命周期挂钩操作完成并且实例进入InService状态。

您可以使用启动或取消实例刷新Amazon Web Services Management Console,Amazon CLI或软件开发工具包。

启动或取消实例刷新(console)

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

启动实例刷新

  1. 打开 Amazon EC2 Auto Scaling 控制台:以下网址:https://console.aws.amazon.com/ec2autoscaling/.

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

    将在窗格底部打开一个拆分窗格。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. 打开 Amazon EC2 Auto Scaling 控制台:以下网址:https://console.aws.amazon.com/ec2autoscaling/.

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

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

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

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

启动实例刷新

要从 Amazon 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 Scaling 组的实例刷新describe-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命令从Amazon CLI中,指定 Auto Scaling 组的名称,如以下示例所示。

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

输出示例。

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

Limitations

  • 实例在启动前终止:当 Auto Scaling 组中只有一个实例时,启动实例刷新可能会导致中断,因为 Amazon EC2 Auto Scaling 会终止实例,然后启动新实例。

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

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

  • 一小时超时:如果实例刷新无法继续进行替换,因为有实例处于待机状态或受保护的实例,则会持续重试一小时,并提供状态消息以帮助您解决问题。如果问题在一小时后仍然存在,操作将失败。

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