基于实例刷新替换 Auto Scaling 实例
您可以使用实例刷新更新 Auto Scaling 组中的实例,而不是一次手动替换几个实例。如果配置更改要求您替换实例,并且您的 Auto Scaling 组中有大量实例,则此功能非常有用。
如果您有新 Amazon Machine Image (AMI) 或新的用户数据脚本,则实例刷新可能非常有用。要使用实例刷新,请首先创建一个新的启动模板,该模板指定新的 AMI 或用户数据脚本。然后,启动实例刷新以立即开始更新组中的实例。
工作原理
以下示例步骤显示了实例刷新的工作原理:
-
您可以使用所需更新创建启动模板或新启动模板版本。有关更多信息,请参阅为 Auto Scaling 组创建启动模板。
-
您可以配置最低运行正常百分比、实例预热和检查点,指定包含启动模板的所需配置,然后开启实例刷新。所需的配置可以选择指定是否应用混合实例策略。
-
Amazon EC2 Auto Scaling 开始执行实例的滚动替换。它使一组实例停止服务,终止它们,然后启动一组具有新所需配置的实例。然后,它会等到实例通过您的运行状况检查并完成预热,然后再进入替换其他实例。
-
替换一定百分比的组后,会达到检查点。无论何时有检查点,Amazon EC2 Auto Scaling 都会临时停止替换实例,发送通知并等待您指定的时间,然后再继续。收到通知后,您可以验证您的新实例是否正常工作。
-
实例刷新成功后,Auto Scaling 组设置将使用您在操作开始时指定的配置自动更新。
核心概念和术语
在您开始之前,请熟悉以下实例刷新核心概念和术语:
- 最低运行正常百分比
-
作为启动实例刷新的一部分,您可以指定始终保持的最低运行正常百分比。这是 Auto Scaling 组中在实例刷新期间必须通过运行状况检查的容量,以便允许该操作继续执行。此值以 Auto Scaling 组所需容量的百分比形式表示(向上取整到最接近整数)。将最低运行正常百分比设置为 100% 会将替换率限制为一次只能替换一个实例。相比之下,将其设置为 0 会同时替换所有实例。
- 实例预热
-
实例预热是从新实例的状态变为
InService
之时起到其可接收流量之时止需要经过的时间段。在实例刷新期间,确定新启动的实例正常运行后,Amazon EC2 Auto Scaling 不会立即继续进行下一个替换。它会等待您指定的预热周期,然后继续替换其他实例。如果应用程序在开始提供流量之前需要时间完成自身的初始化,此功能可能很有用。 - 所需配置
-
所需配置是您希望 Amazon EC2 Auto Scaling 在 Auto Scaling 组中部署的新配置。例如,您可以为实例指定启动模板和版本。在实例刷新期间,Amazon EC2 Auto Scaling 会将 Auto Scaling 组更新为所需配置。如果在实例刷新期间发生向外扩展事件,Amazon EC2 Auto Scaling 将启动具有所需配置而不是该组的当前设置的新实例。实例刷新成功后,Amazon EC2 Auto Scaling 会更新 Auto Scaling 组的设置,以反映您在实例刷新过程中指定的新所需配置。
- 跳过匹配
-
跳过匹配意味着 Amazon EC2 Auto Scaling 会跳过替换与所需配置匹配的实例。如果未指定所需配置,则会跳过替换具有已在组上设置的相同配置的实例。如果未启用跳过匹配,则无论是否需要更新,Auto Scaling 组中的任何实例都可以替换为新实例。
- 检查点
-
检查点是实例刷新在指定时间内暂停的时间点。实例刷新可以包含多个检查点。Amazon EC2 Auto Scaling 会针对每个检查点发出事件,以便您可以添加 EventBridge 规则,将事件发送到目标(如 Amazon SNS),以便在达到检查点时收到通知。达到某个检查点后,您将有机会验证您的部署。如果发现任何问题,您可以取消实例刷新,然后通过启动另一个实例刷新来回滚实例。分阶段部署更新的能力是检查点的一个关键优势。如果不使用检查点,则会持续执行滚动替换。
注意事项
在启动实例刷新时,为帮助确保组能够继续按预期执行,需要考虑以下事项。
-
我们建议您考虑启用原定设置的实例预热功能,以统一组级别的预热设置。有关更多信息,请参阅为 Auto Scaling 组设置原定设置实例预热。
-
预热时,新启动的实例不会计入 Auto Scaling 组的聚合实例指标(例如 CPUUtilization、NetworkIn、NetworkOut 等等)。
-
如果已在 Auto Scaling 组中添加了扩展策略,扩展活动将并行运行。如果为实例刷新设置了较长的预热时间,则新启动的实例需要更多的时间才能反映在指标中。因此,设置充分的预热时间可防止 Amazon EC2 Auto Scaling 根据过时的指标数据进行扩缩。
-
如果在 Auto Scaling 组中添加了生命周期挂钩,则会等待生命周期挂钩操作完成,实例进入
InService
状态后,才会开始预热。有关更多信息,请参阅Amazon EC2 Auto Scaling 生命周期钩子。 -
如果启用了跳过匹配,但启动模板、启动模板版本和混合实例策略中的实例类型没有更改,则实例刷新将立即成功,而无需进行任何替换。如果您进行了任何其他更改(例如,更改竞价分配策略),Amazon EC2 Auto Scaling 会在实例刷新成功后更新 Auto Scaling 组的设置,以反映新的所需配置。
启动或取消实例刷新(控制台)
您可以使用 Amazon EC2 Auto Scaling 控制台创建、查看和取消实例刷新。如果这是您第一次开启实例刷新,则使用控制台将有助于您了解可用的功能和选项。
如果您以前没有为 Auto Scaling 组定义混合实例策略,请使用下面的步骤。如果您以前定义了混合实例策略,请参阅 在控制台中开启实例刷新(混合实例组) 以开启实例刷新。
启动实例刷新
访问 https://console.aws.amazon.com/ec2/
,打开 Amazon EC2 控制台,然后从导航窗格中选择 Auto Scaling Groups(Auto Scaling 组)。 -
选中您的 Auto Scaling 组旁边的复选框。
将在 Auto Scaling group(Auto Scaling 组)页面底部打开一个拆分窗格。
-
在 Instance refresh(实例刷新)选项卡上的 Active instance refresh(活跃实例刷新)中,选择 Start instance refresh(开启实例刷新)。
-
对于 Minimum healthy percentage(最低运行正常百分比),输入在实例刷新期间必须保持健康状态的 Auto Scaling 组的百分比。原定设置为 90%。选择的百分比越低,将导致同时被终止和替换的实例数量越多。
-
对于 Instance warmup(实例预热),输入从新实例的状态变为
InService
之后到其可以接收流量时为止需要经过的秒数,或者留空以保留原定设置的预热设置。如果留空,则原定设置为组的原定设置实例预热值(如果启用)。如果未启用原定设置实例预热值,则实例预热值将回退为组的运行状况检查宽限期的值。
-
(可选)对于 Checkpoints(检查点),选择 Enable checkpoints(启用检查点),以使用递增量或分阶段的实例刷新方法来替换实例。这将为在替换集之间进行验证提供额外时间。如果您选择不启用检查点,将以一次近乎连续的操作替换这些实例。
如果您启用检查点,请参阅 启用检查点(控制台) 以了解其他步骤。
-
启用或关闭 Skip matching(跳过匹配):
-
若要跳过替换已与您的当前启动模板匹配的实例,请使 Enable skip matching(启用跳过匹配)复选框保持选中状态。
-
如果通过清除此复选框关闭跳过匹配,则可替换所有实例。
当您启用跳过匹配,而不是使用当前启动模板时,则可以在 Start instance refresh(开启实例刷新)页面的 Desired configuration(所需配置)部分中设置新启动模板或当前启动模板的新版本。
注意 要使用跳过匹配功能更新当前使用启动配置的 Auto Scaling 组,您必须在 Desired configuration(所需配置)中选择启动模板。不支持跳过匹配与启动配置一起使用。
-
-
(可选)展开 Desired configuration(所需配置)部分,以指定您要对 Auto Scaling 组进行的任何更新。
从此时开始,您可以选择使用 JSON 或 YAML 语法来编辑参数值,而不是在控制台界面中进行选择。为此,请选择 Use code editor(使用代码编辑器),而不是 Use console interface(使用控制台界面)。以下步骤介绍如何使用控制台界面进行选择。
-
对于 Update launch template(更新启动模板):
-
如果您尚未为 Auto Scaling 组创建新启动模板或新启动模板版本,可以使此复选框保持未选中状态。
-
如果您已创建新启动模板或新启动模板版本,请选中此复选框。当您选择此选项时,Amazon EC2 Auto Scaling 将为您显示当前启动模板和当前启动模板版本,并将列出任何其他可用版本。选择启动模板,然后选择版本。
在您选择版本后,可以看到版本信息。这是作为实例刷新的组成部分替换实例时将要使用的启动模板的版本。如果实例刷新成功,则每当新实例启动时(例如在组扩展时),也将使用此版本的启动模板。
-
-
对于 Choose a set of instance types and purchase options to override the instance type in the launch template(选择一组实例类型和购买选项以覆盖启动模板中的实例类型):
-
使此复选框保持未选中状态,以使用您在启动模板中指定的实例类型和购买选项。
-
如果您要覆盖启动模板中的实例类型或利用未使用的 EC2 容量,并通过运行竞价型实例节省资金,请选中此复选框。当您选择此选项时,可以手动添加每种实例类型,也可以选择主实例类型和为您检索任何其他匹配实例类型的建议选项。如果您计划启动竞价型实例,我们建议添加几种实例类型,这样,如果您选择的可用区中实例容量不足,Amazon EC2 Auto Scaling 可以启动另一种实例类型。有关如何处理这些设置的进一步指导,请参阅 Auto Scaling 组具有多个实例类型和购买选项。
警告 如果 Amazon EC2 Spot 服务需要回收容量,则竞价型实例不应与无法处理竞价型实例中断的应用程序一起使用。
如果您选中此复选框,请确保启动模板尚未请求竞价型实例。您无法使用请求竞价型实例的启动模板来创建使用多种实例类型并启动竞价型和按需型实例的 Auto Scaling 组。
注意 要在当前使用启动配置的 Auto Scaling 组上配置这些选项,您必须在 Update launch template(更新启动模板)中选择启动模板。不支持覆盖您的启动配置中的实例类型。
-
-
-
审核您的所有选择,以确认所有选择的设置都正确。
此时,最好验证当前更改与建议更改之间的差异不会以意外或不需要的方式影响您的应用程序。例如,如果您从半虚拟化 (PV) AMI 启动了原始实例,但希望更改为仅受硬件虚拟机 (HVM) AMI 支持的最新一代实例类型,则您需要使用 HVM AMI。有关更多信息,请参阅适用于 Linux 实例的 Amazon EC2 用户指南中的 更改实例类型的兼容性。
-
如果您对实例刷新选择感到满意,请选择 Start(开启)。
如果您已使用混合实例策略创建了 Auto Scaling 组,则请使用以下步骤。如果您尚未为您的组定义混合实例策略,请参阅 在控制台中开启实例刷新(基本步骤) 以开启实例刷新。
启动实例刷新
访问 https://console.aws.amazon.com/ec2/
,打开 Amazon EC2 控制台,然后从导航窗格中选择 Auto Scaling Groups(Auto Scaling 组)。 -
选中您的 Auto Scaling 组旁边的复选框。
将在 Auto Scaling group(Auto Scaling 组)页面底部打开一个拆分窗格。
-
在 Instance refresh(实例刷新)选项卡上的 Active instance refresh(活跃实例刷新)中,选择 Start instance refresh(开启实例刷新)。
-
对于 Minimum healthy percentage(最低运行正常百分比),输入在实例刷新期间必须保持健康状态的 Auto Scaling 组的百分比。原定设置值为 90%。选择的百分比越低,将导致同时被终止和替换的实例数量越多。
-
对于 Instance warmup(实例预热),输入从新实例的状态变为
InService
之后到其可以接收流量时为止需要经过的秒数,或者留空以保留原定设置的预热设置。如果留空,则原定设置为组的原定设置实例预热值(如果启用)。如果未启用原定设置实例预热值,则实例预热值将回退为组的运行状况检查宽限期的值。
-
(可选)对于 Checkpoints(检查点),选择 Enable checkpoints(启用检查点),以使用递增量或分阶段的实例刷新方法来替换实例。这将为在替换集之间进行验证提供额外时间。如果您选择不启用检查点,将以一次近乎连续的操作替换这些实例。
如果您启用检查点,请参阅 启用检查点(控制台) 以了解其他步骤。
-
启用或关闭 Skip matching(跳过匹配):
-
若要跳过替换已与您的当前启动模板匹配的实例和任何实例类型覆盖,请使 Enable skip matching(启用跳过匹配)复选框保持选中状态。
-
如果您选择通过清除此复选框关闭跳过匹配,则可替换所有实例。
当您启用跳过匹配,而不是使用当前启动模板时,则可以在 Start instance refresh(开启实例刷新)页面的 Desired configuration(所需配置)部分中设置新启动模板或当前启动模板的新版本。您还可以在 Desired configuration(所需配置)中更新实例类型覆盖。
-
-
在 Desired configuration(所需配置)部分中,执行以下操作。
从此时开始,您可以选择使用 JSON 或 YAML 语法来编辑参数值,而不是在控制台界面中进行选择。为此,请选择 Use code editor(使用代码编辑器),而不是 Use console interface(使用控制台界面)。以下步骤介绍如何使用控制台界面进行选择。
-
对于 Update launch template(更新启动模板):
-
如果您尚未为 Auto Scaling 组创建新启动模板或新启动模板版本,可以使此复选框保持未选中状态。
-
如果您已创建新启动模板或新启动模板版本,请选中此复选框。当您选择此选项时,Amazon EC2 Auto Scaling 将为您显示当前启动模板和当前启动模板版本,并将列出任何其他可用版本。选择启动模板,然后选择版本。
在您选择版本后,可以看到版本信息。这是作为实例刷新的组成部分替换实例时将要使用的启动模板的版本。如果实例刷新成功,则每当新实例启动时(例如在组扩展时),也将使用此版本的启动模板。
-
-
对于 Use these settings to override the instance type and purchase option defined in the launch template(使用这些设置覆盖在启动模板中定义的实例类型和购买选项):
默认情况下,此复选框处于选中状态。Amazon EC2 Auto Scaling 将使用当前在适用于 Auto Scaling 组的混合实例策略中设置的值填充每个参数。仅更新您要更改的参数的值。有关这些设置的指导,请参阅 Auto Scaling 组具有多个实例类型和购买选项。
警告 我们建议您不要清除此复选框。仅当您希望停止使用混合实例策略时才清除它。在实例刷新成功后,Amazon EC2 Auto Scaling 会将您的组更新为与 Desired configuration(所需配置)匹配。如果它不再包含混合实例策略,Amazon EC2 Auto Scaling 将逐渐终止当前运行的所有竞价型实例,并将它们替换为按需型实例。或者,如果您的启动模板请求竞价型实例,则 Amazon EC2 Auto Scaling 将逐渐终止当前正在运行的所有按需型实例,并将它们替换为竞价型实例。
-
-
审核您的所有选择,以确认所有选择的设置都正确。
此时,最好验证当前更改与建议更改之间的差异不会以意外或不需要的方式影响您的应用程序。例如,如果您从半虚拟化 (PV) AMI 启动了原始实例,但希望更改为仅受硬件虚拟机 (HVM) AMI 支持的最新一代实例类型,则您需要使用 HVM AMI。有关更多信息,请参阅适用于 Linux 实例的 Amazon EC2 用户指南中的 更改实例类型的兼容性。
如果您对实例刷新选择感到满意,请选择 Start(开启)。
取消实例刷新
访问 https://console.aws.amazon.com/ec2/
,打开 Amazon EC2 控制台,然后从导航窗格中选择 Auto Scaling Groups(Auto Scaling 组)。 -
选中 Auto Scaling 组旁边的复选框。
-
在 Instance refresh(实例刷新)选项卡上的 Active instance refresh(活跃实例刷新)中,选择 Cancel instance refresh(取消实例刷新)。
-
当系统提示进行确认时,选择 Confirm。
启动或取消实例刷新 (Amazon CLI)
启动实例刷新
使用以下 start-instance-refresh 命令从 Amazon CLI 启动实例刷新。您可以在 JSON 配置文件中指定要更改的任何首选项。引用配置文件时,请提供该文件的路径和名称,如以下示例所示。
aws autoscaling start-instance-refresh --cli-input-json file://config.json
config.json
的内容:
{ "AutoScalingGroupName": "
my-asg
", "Preferences": { "InstanceWarmup":60
, "MinHealthyPercentage":50
} }
或者,您也可以不提供可选的首选项,而通过运行以下命令启动实例刷新。如果不提供首选项,则会为 InstanceWarmup
和 MinHealthyPercentage
使用默认值。
aws autoscaling start-instance-refresh --auto-scaling-group-name
my-asg
输出示例:
{
"InstanceRefreshId": "08b91cf7-8fa6-48af-b6a6-d227f40f1b9b"
}
要指定所需配置并使用 Amazon CLI 启用跳过匹配,请参阅 使用 Amazon Command Line Interface (Amazon CLI) 启用跳过匹配的实例刷新示例 中的其他 start-instance-refresh 示例。
取消实例刷新
当您使用 cancel-instance-refresh 命令从 Amazon CLI 取消实例刷新时,请指定 Auto Scaling 组的名称,如以下示例所示。
aws autoscaling cancel-instance-refresh --auto-scaling-group-name
my-asg
输出示例:
{
"InstanceRefreshId": "08b91cf7-8fa6-48af-b6a6-d227f40f1b9b"
}
限制
-
Instances terminated before launch(实例在启动前终止):当 Auto Scaling 组中只有一个实例时,开启实例刷新可能会导致中断。这是因为 Amazon EC2 Auto Scaling 会终止实例,然后启动新实例。
-
总持续时间:实例刷新可继续主动替换实例的最长时间为 14 天。
-
未替换的实例:如果某个实例处于备用状态或受缩减保护,则无法替换该实例。如果 Amazon EC2 Auto Scaling 遇到无法替换的实例,则它将继续替换其他实例。
-
加权组特有的行为差异:如果配置混合实例组的实例权重大于或等于该组的所需容量,则 Amazon EC2 Auto Scaling 可能会一次性替换所有
InService
实例。为避免这种情况,请按照 为 Amazon EC2 Auto Scaling 配置实例权重 主题中的建议进行操作并指定所需容量,该容量大于在 Auto Scaling 组中使用权重时的最大权重。 -
One-hour timeout(一小时超时):当实例刷新因应用程序未通过运行状况检查或存在处于备用状态的实例或受横向缩减保护的实例而无法继续进行替换时,它会持续重试一小时。它还将提供状态消息以帮助您解决问题。如果问题在一小时后仍然存在,则操作失败。这样做的目的是在出现临时问题时给它时间恢复。
-
无回滚:您可以随时取消实例刷新,但任何已替换的实例都不会回滚到其以前的配置。如果实例刷新失败,但任何已替换的实例都不会回滚到其以前的配置。要修复失败的实例刷新,请首先解决导致更新失败的潜在问题,然后启动另一个实例刷新。