为 Amazon EC2 Auto Scaling 配置终止策略 - Amazon EC2 Auto Scaling

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

为 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 需要终止一个实例时,它会首先确定哪个可用区(一个或多个区域)的实例最多,并且至少有一个实例不受缩容保护。然后,它继续评估已确定的可用区内未受保护的实例,如下所示:

使用过时配置的实例
  • 对于使用启动模板的群组 — 确定是否有任何实例使用过时的配置,按以下顺序排列优先级:

    1. 首先,检查是否有使用启动配置启动的实例。

    2. 然后,检查是否有使用其他启动模板而不是当前启动模板启动的实例。

    3. 最后,使用当前启动模板的最旧版本检查实例。

  • 对于使用启动配置的组-确定是否有任何实例使用最旧的启动配置。

如果找不到配置过时的实例,或者有多个实例可供选择,Amazon EC2 Auto Scaling 会考虑下一个标准,即实例接近下一个计费时间。

接近下一个计费时间的实例

确定是否有符合先前标准的实例最接近下一个计费时间。如果多个实例的距离相等,则随机终止一个实例。这可以帮助您最大限度地利用按小时计费的实例。但是,现在大多数 EC2 使用量按秒计费,因此这种优化提供的好处较少。有关更多信息,请参阅 Amazon EC2 定价

以下流程图说明了默认终止策略如何适用于使用启动模板的群组。


                        显示了 Auto Scaling 组如何使用默认终止策略终止实例的流程图。

默认终止策略和混合实例组

在终止混合实例组中的实例时,Amazon EC2 Auto Scaling 会应用额外的标准。

当 Amazon EC2 Auto Scaling 需要终止实例时,它会首先根据群组的设置确定应终止哪个购买选项(竞价或按需)。这样可以确保该组在一段时间内朝着竞价型实例和按需实例的指定比例发展。

然后,它会在每个可用区内独立应用终止策略。它决定在哪个竞价型实例或按需实例中终止哪个可用区,以保持可用区域的平衡。同样的逻辑适用于为实例类型定义权重的混合实例组。

在每个区域内,默认终止策略的工作原理如下,用于确定购买选项中哪些不受保护的实例可以终止:

  1. 确定是否可以终止任何实例,以提高与 Auto Scaling 组的指定分配策略的一致性。如果没有确定要优化的实例,或者有多个实例可供选择,则评估会继续。

  2. 确定是否有任何实例使用过时的配置,按以下顺序排列优先级:

    1. 首先,检查是否有使用启动配置启动的实例。

    2. 然后,检查是否有使用其他启动模板而不是当前启动模板启动的实例。

    3. 最后,使用当前启动模板的最旧版本检查实例。

    如果找不到配置过时的实例,或者有多个实例可供选择,则评估会继续。

  3. 确定是否有任何实例最接近下一个计费时间。如果多个实例的距离相等,则随机选择一个。

预定义的终止政策

您可以从以下预定义的终止政策中进行选择:

  • Default— 根据默认终止策略终止实例。

  • AllocationStrategy— 终止 Auto Scaling 组中的实例,使其余实例与即将终止的实例类型(竞价型实例或按需实例)的分配策略保持一致。当您首选的实例类型发生变化时,可使用该策略。如果竞价分配策略是 lowest-price,则您可以逐渐在 N 个最低价竞价池中重新平衡分布竞价型 实例。如果竞价分配策略是 capacity-optimized,则您可以逐渐重新平衡具有更多可用竞价容量的竞价池之间 竞价型实例的分布。您也可以使用较高优先级类型的按需实例逐渐替代较低优先级类型的按需实例。

  • OldestLaunchTemplate— 终止使用最旧启动模板的实例。利用此策略,会首先终止使用非当前启动模板的实例,然后终止使用当前启动模板的最旧版本的实例。如果要更新某个组并且逐步淘汰先前配置中的实例时,此策略非常有用。

  • OldestLaunchConfiguration— 终止启动配置最旧的实例。如果要更新某个组并且逐步淘汰先前配置中的实例时,此策略非常有用。使用此策略,使用非当前启动配置的实例将首先终止。

  • ClosestToNextInstanceHour— 终止最接近下一个计费时间的实例。此策略有助于最大限度使用按小时收费的实例。

  • NewestInstance— 终止组中最新的实例。如果要测试新的启动配置但不想在生产中保留它时,此策略非常有用。

  • OldestInstance— 终止组中最旧的实例。当您将 Auto Scaling 组中的实例升级为新的 EC2 实例类型,此选项十分有用。您可以逐渐将较旧类型的实例替换为较新类型的实例。

    注意

    Amazon EC2 Auto Scaling 始终首先在可用区间平衡实例,无论使用何种终止策略。因此,您可能会遇到一些较新的实例在旧实例之前终止的情况。例如,当某个可用区的实例数多于该组使用的其他可用区时,或某个可用区的实例数多于该组使用的其他可用区。

更改 Auto Scaling 组的终止策略

要更改 Auto Scaling 组的终止策略,请使用以下方法之一。

Console

最初在 Amazon EC2 Auto Scaling 控制台中创建 Auto Scaling 组时,您无法更改终止策略。默认终止策略被自动使用。创建 Auto Scaling 组后,您可以将默认策略替换为不同的终止策略或按其应用顺序列出的多个终止策略。

更改 Auto Scaling 组的终止策略
  1. 访问 https://console.aws.amazon.com/ec2/,打开 Amazon EC2 控制台,然后从导航窗格中选择 Auto Scaling Groups(Auto Scaling 组)。

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

    这时将在页面底部打开一个拆分窗格。

  3. Details(详细信息)选项卡上,选择 Advanced configurations(高级配置)、Edit(编辑)。

  4. 对于 Termination policies(终止策略),请选择一个或多个终止策略。如果您选择多个策略,请按照您希望评估策略的顺序将其列出。

    您还可选择 Custom termination policy(自定义终止策略),然后选择一个满足您需求的 Lambda 函数。如果您已经为 Lambda 函数创建了版本和别名,则可以从 Version/Alias(版本/别名)下拉列表选择版本或别名。要使用您的 Lambda 函数的未发布版本,请保留 Version/Alias(版本/别名)设置为默认值。有关更多信息,请参阅 了解使用 Lambda 创建自定义终止策略。

    注意

    使用多个策略时,必须正确设置它们的顺序:

    • 如果您使用 Default(默认)策略,它必须是列表中的最后一个策略。

    • 如果您使用 Custom termination policy(自定义终止策略),它必须是列表中的第一个策略。

  5. 选择 Update(更新)。

AWS CLI

自动使用默认终止策略,除非指定了不同的策略。

更改 Auto Scaling 组的终止策略

使用以下命令之一:

您可以单独使用终止策略,或者将它们合并到策略列表中。例如,使用以下命令更新 Auto Scaling 组以首先使用 OldestLaunchConfiguration 策略,然后使用 ClosestToNextInstanceHour 策略。

aws autoscaling update-auto-scaling-group --auto-scaling-group-name my-asg --termination-policies "OldestLaunchConfiguration" "ClosestToNextInstanceHour"

如果您使用 Default 终止策略,请将该策略设为终止策略列表中的最后一项。例如,--termination-policies "OldestLaunchConfiguration" "Default"

要使用自定义终止政策,必须先使用创建终止政策 AWS Lambda。要指定要用作终止策略的 Lambda 函数,请将其设为终止策略列表中的第一个函数。例如,--termination-policies "arn:aws:lambda:us-west-2:123456789012:function:HelloFunction:prod" "OldestLaunchConfiguration"。有关更多信息,请参阅 了解使用 Lambda 创建自定义终止策略。