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

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

您可以使用实例刷新更新 Auto Scaling 组中的实例,而不是一次手动替换几个实例。如果配置更改要求您替换实例,并且您的 Auto Scaling 组中有大量实例,则此功能非常有用。

如果您有新 Amazon Machine Image (AMI) 或新的用户数据脚本,则实例刷新可能非常有用。要使用实例刷新,请首先创建一个新的启动模板,该模板指定新的 AMI 或用户数据脚本。然后,启动实例刷新以立即开始更新组中的实例。

工作原理

下面的示例步骤显示了您如何使用实例刷新来更新带有新的启动模板的自动扩缩组:

  • 为自动扩缩组创建一个新的启动模板。有关更多信息,请参阅为 Auto Scaling 组创建启动模板

  • 您可以配置最低运行正常百分比、实例预热和检查点,指定包含启动模板的所需配置,然后开启实例刷新。所需的配置可以选择指定是否应用混合实例策略

  • Amazon EC2 Auto Scaling 开始执行实例的滚动替换。它使一组实例停止服务,终止它们,然后启动一组具有新所需配置的实例。然后,它会等到实例通过您的运行状况检查并完成预热,然后再进入替换其他实例。

  • 替换一定百分比的组后,会达到检查点。无论何时有检查点,Amazon EC2 Auto Scaling 都会临时停止替换实例,并发送通知。然后,它会等待您指定的时间,然后再继续。收到通知后,您可以验证您的新实例是否正常工作。

  • 实例刷新成功后,Auto Scaling 组设置将使用您在操作开始时指定的配置自动更新。

核心概念和术语

在您开始之前,请熟悉以下实例刷新核心概念和术语:

最低运行正常百分比

作为启动实例刷新的一部分,您可以指定始终保持的最低运行正常百分比。这是自动扩缩组中在实例刷新期间必须通过运行状况检查的容量数,以便刷新继续执行。例如,如果最小运行状况百分比为 90%,那么 10% 即是将要终止和替换的容量百分比。如果新的实例未通过运行状况检查,Amazon EC2 Auto Scaling 将终止并替换这些实例。如果它无法启动任何运行正常的实例,则实例刷新最终将失败,使组中其他的 90% 保持不变。如果新的实例保持正常运行并已完成预热期,Amazon EC2 Auto Scaling 可以继续替换其他实例。

实例刷新可以一次替换一个实例,一次替换多个实例,也可以一次替换全部实例。要一次替换一个实例,将最低运行正常百分比设置为 100%。要一次替换全部实例,将最低运行正常百分比设置为 0%。

Amazon EC2 Auto Scaling 会根据您的自动扩缩组所使用的运行状况检查的状态来确定实例是否运行正常。有关更多信息,请参阅Auto Scaling 实例的运行状况检查。为确保 Amazon EC2 Auto Scaling 能够尽快检测到实例的运行状况问题,请勿将组的运行状况检查宽限期设置得过高。有关更多信息,请参阅设置自动扩缩组的运行状况检查宽限期

实例预热
重要

使用默认实例预热来定义自动扩缩组的预热周期。只有在必须覆盖默认实例预热时,才为实例刷新指定实例预热。实例预热与默认实例预热的工作方式相同,因此实例预热适用相同的扩展注意事项。有关更多信息,请参阅为 Auto Scaling 组设置原定设置实例预热

实例预热是从新实例的状态变为 InService 之时起到其可接收流量之时止需要经过的时间段。在实例刷新期间,如果实例通过其运行状况检查,确定新启动的实例正常运行后,Amazon EC2 Auto Scaling 不会立即继续进行下一个实例替换。它会等待预热周期,然后继续替换下一个实例。如果应用程序在开始提供流量之前需要时间完成自身的初始化,此功能可能很有用。

如果您使用生命周期挂钩准备新的实例以供使用,则可以降低预热期的值。有关更多信息,请参阅Amazon EC2 Auto Scaling 生命周期钩子

所需配置

所需配置是您希望 Amazon EC2 Auto Scaling 在自动扩缩组中部署的新配置。例如,您可以为实例指定新的启动模板和新的实例类型。在实例刷新期间,Amazon EC2 Auto Scaling 会将 Auto Scaling 组更新为所需配置。如果在实例刷新期间发生向外扩展事件,Amazon EC2 Auto Scaling 将启动具有所需配置而不是该组的当前设置的新实例。实例刷新成功后,Amazon EC2 Auto Scaling 会更新自动扩缩组的设置,以反映您在实例刷新过程中指定的新所需配置。

跳过匹配

跳过匹配将通知 Amazon EC2 Auto Scaling 忽略已有最新更新的实例。这样,您就无需替换超过所需数量的实例。当您希望确保自动扩缩组使用特定版本的启动模板,并且只替换那些使用其他版本的实例时,这是很有用的。

检查点

检查点是实例刷新在指定时间内暂停的时间点。实例刷新可以包含多个检查点。Amazon EC2 Auto Scaling 会针对每个检查点发出事件。因此,您可以添加 EventBridge 规则,将事件发送到目标(如 Amazon SNS),以便在达到检查点时收到通知。达到某个检查点后,您将有机会验证您的部署。如果发现任何问题,您可以取消实例刷新,或回滚实例。分阶段部署更新的能力是检查点的一个关键优势。如果不使用检查点,则会持续执行滚动替换。

实例类型兼容性

在更改实例类型之前,最好验证它是否适用于您的启动模板。这确认了与您指定的 AMI 的兼容性。例如,如果您从半虚拟化(PV)AMI 启动了原始实例,但希望更改为仅受硬件虚拟机(HVM)AMI 支持的最新一代实例类型。在这种情况下,您必须在启动模板中使用 HVM AMI。

要在不启动实例的情况下确认实例类型的兼容性,请使用带 --dry-run 选项的 run-instances 命令,如以下示例所示。

aws ec2 run-instances --launch-template LaunchTemplateName=my-template,Version='1' --dry-run

有关如何确定兼容性的信息,请参阅《适用于 Linux 实例的 Amazon EC2 用户指南》中的更改实例类型的兼容性

限制

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

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

  • 加权组特有的行为差异:如果配置混合实例组的实例权重大于或等于该组的所需容量,则 Amazon EC2 Auto Scaling 可能会一次性替换所有 InService 实例。为避免这种情况,请遵循 为 Amazon EC2 Auto Scaling 配置实例权重 主题中的建议。指定所需容量,该容量大于在自动扩缩组中使用权重时的最大权重。

  • 一小时超时:当实例刷新因等待替换备用实例或横向缩减保护实例,或者新实例没有通过运行状况检查而无法继续进行替换时,Amazon EC2 Auto Scaling 将持续重试一个小时。它还将提供状态消息以帮助您解决问题。如果问题在一小时后仍然存在,则操作失败。这样做的目的是在出现临时问题时给它时间恢复。