更换 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或AWSSDK。您可以随时取消实例刷新,但任何已替换的实例都不会回滚到其以前的配置。

启动或取消实例刷新

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

启动实例刷新(新控制台)

  1. 打开 Amazon EC2 控制台 https://console.amazonaws.cn/ec2/

  2. 在导航窗格中, 自动缩放,选择 自动缩放组.

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

    分割窗格可以在 自动缩放组 页面,显示所选组的信息。

  4. 实例刷新 选项卡, 实例刷新,选择 启动实例刷新.

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

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

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

  6. 选择 开始.

检查实例刷新的状态(新控制台)

  1. 实例刷新 选项卡,下方 实例刷新,您可以通过查看 状态 列。操作在初始化时进入 Pending 状态。状态应快速变为 InProgress...当所有实例更新时,状态更改为 Successful.

    在实例刷新期间,如果 Amazon EC2 Auto Scaling 无法替换任何其他实例,它会提供状态消息以帮助您解决问题。如果 Amazon EC2 Auto Scaling 确定某个实例处于备用状态或受缩减保护,则无法替换该实例,但它将继续替换其他实例。对于最初无法替换的任何实例,它会继续尝试一段时间。最终,如果问题未解决,它将停止尝试,状态更改为 Failed.

    实例刷新可保持积极替换实例的最长时间为 14 天。

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

  3. 实例管理 选项卡,下方 实例,您可以验证您的实例是否已成功启动。最初,您的实例处于 Pending 状态。实例准备好接收流量后,其状态为 InService...TheThethe 健康状况 列显示实例“运行状况检查”的结果。

取消实例刷新(新控制台)

  1. 打开 Amazon EC2 控制台 https://console.amazonaws.cn/ec2/

  2. 在导航窗格中, 自动缩放,选择 自动缩放组.

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

  4. 实例刷新 选项卡, 实例刷新,选择 取消实例刷新.

  5. 当提示确认时,选择 确认.

启动实例刷新 (AWS CLI)

从 AWS CLI,使用 启动实例-刷新 命令。您可以在 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" }

检查实例刷新的状态 (AWS CLI)

查看实例刷新为 Auto Scaling 通过使用以下内容 描述-实例刷新 命令。

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 } ] }

取消实例刷新 (AWS CLI)

当您使用 取消实例-刷新 命令 AWS CLI,请指定 Auto Scaling 如下示例所示。

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

输出示例。

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