使用 Amazon EC2 Auto Scaling 终止策略 - Amazon EC2 Auto Scaling
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

使用 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 终止实例时,它首先确定哪些可用性区域具有最多的实例,并找到至少一个不受扩展保护的实例。在选定的可用区内,以下默认终止策略行为适用:

  1. 确定是否任何有终止资格的实例使用最旧的启动模板或启动配置:

    1. [对于使用启动模板的 Auto Scaling 组]

      确定任何实例是否使用最早的启动配置或模板,除非有使用启动配置的实例。Amazon EC2 Auto Scaling 先终止使用启动配置的实例,然后才终止使用启动模板的实例。

    2. [对于使用启动配置的 Auto Scaling 组]

      确定是否有任何实例使用最旧的启动配置。

  2. 在应用上述条件后,如果要终止多个不受保护的实例,请确定哪些实例最接近下一个计费小时。如果有多个不受保护的实例最接近下一个计费小时,请随机终止其中的一个实例。

    请注意,通过终止最接近下一个计费小时的实例,将帮助您最大程度地使用按小时计费的实例。或者,如果您的 Auto Scaling 组使用 Amazon Linux、Windows 或 Ubuntu,则 EC2 的使用以秒为单位计费。有关更多信息,请参阅 Amazon EC2定价

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

当 Auto Scaling 组具有混合实例策略扩展时,Amazon EC2 Auto Scaling 仍然使用终止策略来确定要终止的实例的优先级,但首先确定应终止两种类型中的哪一种类型(竞价型或按需型)。然后,它将在每个可用区中分别应用终止策略。它还可以识别哪些实例(在已确定的购买选项内),其中可用区将导致可用区域最平衡。同样的逻辑适用于使用混合实例配置并为实例类型定义了权重的 Auto Scaling 组。

默认终止策略略略有变化,原因是混合实例策略实现。默认终止策略的以下新行为适用:

  1. 确定要终止的实例,以便使剩余实例与要终止的按需实例或竞价型实例的分配策略保持一致。

    例如,在实例启动后,您将更改首选实例类型的优先级顺序。发生缩减事件时,Amazon EC2 Auto Scaling 尝试从优先级较低的实例类型逐渐转移按需实例。

  2. 确定任何实例是否使用最早的启动配置或模板,除非有使用启动配置的实例。Amazon EC2 Auto Scaling 先终止使用启动配置的实例,然后才终止使用启动模板的实例。

  3. 在应用上述条件后,如果要终止多个不受保护的实例,请确定哪些实例最接近下一个计费小时。如果有多个不受保护的实例最接近下一个计费小时,请随机终止其中的一个实例。

使用不同的终止策略

要指定要在 Amazon EC2 Auto Scaling 选择终止实例之前应用的终止条件,您可以从以下任何预定义的终止策略中进行选择:

  • Default。根据默认终止策略终止实例。当您希望在任何其他策略之前评估竞价分配策略时,此策略非常有用,因此每次终止或替换您的竞价型实例时,您都可以继续使用最佳池中的竞价型实例。当您想要移除启动配置并开始使用启动模板时,它也很有用。

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

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

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

  • ClosestToNextInstanceHour。终止最接近下个计费小时的实例。此策略有助于最大限度使用按小时收费的实例。(只有使用 Amazon Linux、Windows 或 Ubuntu 的实例以秒为单位计费。)

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

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

    注意

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

使用不同的终止策略(控制台)

创建 Auto Scaling 组后,您可以更新组的终止策略。默认终止策略被自动使用。您可以选择将默认策略替换为不同的终止策略(例如 OldestLaunchTemplate)或按照应用顺序列出的多个终止策略。

要选择不同的终止策略
  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(更新)。

使用不同的终止策略(Amazon CLI)

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

要使用不同的终止策略

使用以下命令之一:

您可以单独使用终止策略,或者将它们合并到策略列表中。例如,使用以下命令更新 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"

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