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

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

使用 Amazon EC2 Auto Scaling 终止策略

本主题提供有关默认终止策略的详细信息,以及可供您选择不同终止策略以满足您的应用程序需求的选项。通过选择不同的终止策略,您可以控制在发生缩减事件时首先终止哪些实例。例如,您可以选择不同的终止策略,以便 Amazon EC2 Auto Scaling 优先终止最旧的实例。

当 Amazon EC2 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. 确定哪些实例符合终止条件,以便将其余实例与分配策略对于要终止的按需实例或 Spot 实例。

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

  2. 确定是否有任何符合终止条件的实例使用最旧的启动模板或配置:

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

      除非存在使用启动配置的实例,否则确定是否有任何实例使用最旧的启动模板。Amazon EC2 Auto Scaling 会在终止使用启动配置的实例,然后终止使用启动模板的实例。

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

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

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

使用不同的终止策略

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

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

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

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

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

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

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

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

    注意

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

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

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

选择不同的终止策略

  1. 以下网址打开 Amazon EC2 Auto Scaling 控制台:https://console.aws.amazon.com/ec2autoscaling/.

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

    将在 Auto Scaling groups (Auto Scaling 组) 页面底部打开一个拆分窗格,其中显示有关所选组的信息。

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

  4. 对于 Termination policies (终止策略),请选择一个或多个终止策略。如果您选择多个策略,请按照它们的应用顺序将其列出。如果您使用默认策略,请将其指定为列表中的最后一个策略。

    注意

    目前,使用 Lambda 的自定义终止策略仅当您使用Amazon CLI或软件开发工具包来更新 Auto Scaling 组,并且无法从控制台进行更新。

  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 创建自定义终止策略