基于实例刷新替换 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 组从启动配置迁移到启动模板时,刷新实例也会有所帮助。首先,将您的启动配置复制到新的启动模板中。然后,启动实例刷新,将启动模板指定为所需配置的一部分,以便立即开始更新组中的实例。有关迁移到启动模板的更多信息,请参阅迁移到启动模板

工作原理

要使用新的启动模板更新您的 Auto Scaling 组,通常需要执行以下操作:

  • 为自动扩缩组创建一个新的启动模板。有关更多信息,请参阅为 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 实例的运行状况检查:为确保这些运行状况检查尽快开始,请勿将组的运行状况检查宽限期设置得过高,但要足够高,以供您的 Elastic Load Balancing 运行状况检查确定目标是否可用于处理请求。有关更多信息,请参阅设置自动扩缩组的运行状况检查宽限期

实例预热

这个实例预热是从新实例的状态更改为起的时间段InService到何时被认为已完成初始化。在实例刷新期间,如果实例通过其运行状况检查,确定新启动的实例正常运行后,Amazon EC2 Auto Scaling 不会立即继续进行下一个实例替换。它会等待预热周期,然后继续替换下一个实例。当您的应用程序在响应请求之前还需要一些初始化时间时,这可能会很有帮助。

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

只有在您尚未启用默认实例预热或需要覆盖默认实例预热时,才为实例刷新指定实例预热。实例预热与默认实例预热的工作方式相同。因此,同样的扩展注意事项也适用。有关更多信息,请参阅为 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 实例。为避免这种情况,请遵循 将 Auto Scaling 组配置为使用实例权重 主题中的建议。指定所需容量,该容量大于在自动扩缩组中使用权重时的最大权重。

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