Amazon EC2 Auto Scaling
用户指南

控制在缩小过程中终止哪些 Auto Scaling 实例

对于每个 Auto Scaling 组,您可以控制它何时向网络架构添加实例(称为扩展)或从中删除实例(称为缩减)。您可以通过调整所需容量来手动扩展组大小,也可以通过使用计划扩展或扩展策略来自动执行该过程。

本主题介绍默认终止策略以及可供您配置您自己的自定义终止策略的选项。使用终止策略,您可以控制在发生缩减事件时首先终止哪些实例。

本主题还介绍了如何启用实例保护以免在自动缩减时终止特定实例。对于 Auto Scaling 组中的实例,使用 Amazon EC2 Auto Scaling 功能在发生缩减事件时保护实例。如果要防止您的实例被意外终止,请使用 Amazon EC2 终止保护。

注意

具有不同类型的购买选项 的 Auto Scaling 组是一种特殊情况。Amazon EC2 Auto Scaling 首先确定应终止两种类型(Spot 或按需型)中的哪一种。如果您在可用区之间平衡实例,则会选择具有最多该类型实例的可用区来保持平衡。然后应用默认或自定义终止策略。

默认终止策略

默认终止策略旨在帮助确保在可用区之间平均分配实例,以获得高可用性。默认策略会保留通用性和灵活性,旨在满足各种场景的需要。

默认终止策略行为如下所示:

  1. 确定哪些可用区包含最多实例,并且至少有一个实例不受缩减保护。

  2. 确定要终止的实例,以便使剩余实例与要终止的按需实例或 Spot 实例的分配策略保持一致。这仅适用于指定了分配策略的 Auto Scaling 组。

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

  3. 确定是否有任何实例使用最旧的启动模板或配置:

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

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

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

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

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

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

示例

设想一个使用启动配置的 Auto Scaling 组。它具有一个实例类型和两个可用区,所需的容量为两个实例,并且扩展策略在达到特定阈值时按一为增量增加和减少实例数。该组中的两个实例分布如下。


                    基本 Auto Scaling 组。

当达到扩展策略的阈值时,策略生效,Auto Scaling 组启动新实例。Auto Scaling 组中现在有三个实例,分布如下。


                    执行扩展操作之后的 Auto Scaling 组。

当达到缩减策略的阈值时,策略生效,Auto Scaling 组终止其中一个实例。如果您没有为该组分配特定的终止策略,则使用默认终止策略。它选择有两个实例的可用区,并终止从最旧启动配置启动的实例。如果这些实例是从同一启动配置启动的,则 Auto Scaling 组选择最接近下一个计费小时的实例并终止该实例。

有关 Amazon EC2 Auto Scaling 高可用性的更多信息,请参阅在可用区之间分配实例

自定义终止策略

您可以选择将默认策略替换为自定义策略,以支持常见使用案例,例如,保留具有当前版本的应用程序的实例。

当您自定义终止策略时,如果某个可用区的实例数多于该组使用的其他可用区,则您的终止策略将应用于不均衡可用区中的实例。如果组使用的可用区是均衡的,则终止策略将应用于该组的所有可用区。

Amazon EC2 Auto Scaling 支持以下自定义终止策略:

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

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

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

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

  • Default。根据默认终止策略终止实例。如果该组有多个扩展策略,此策略非常有用。

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

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

自定义终止策略(控制台)

  1. 打开 Amazon EC2 控制台 https://console.aws.amazon.com/ec2/

  2. 在导航窗格中,选择 Auto Scaling 组

  3. 选择 Auto Scaling 组。

  4. 对于 Actions,选择 Edit

  5. Details 选项卡上,找到 Termination Policies。选择一个或多个终止策略。如果您选择多个策略,请按照它们的应用顺序将其列出。如果您使用默认策略,请将其指定为列表中的最后一个策略。

  6. 选择保存

自定义终止策略 (AWS 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"

实例保护

要控制 Auto Scaling 组在缩减时是否可以终止特定实例,请使用实例保护。您可以对 Auto Scaling 组或单个 Auto Scaling 实例启用实例保护设置。当 Auto Scaling 组启动实例时,实例会继承 Auto Scaling 组的实例保护设置。您可以随时更改 Auto Scaling 组或 Auto Scaling 实例的实例保护设置。

当实例状态为 InService 时,实例保护启动。当您分离受终止保护的实例时,其实例保护设置就会失效。再次将实例挂载到组时,它会继承组的当前实例保护设置。

如果缩小期间 Auto Scaling 组中的所有实例都受终止保护并且发生缩小事件,则该组的所需容量会减少。不过,Auto Scaling 组不能终止所需数量的实例,直到其实例保护设置被禁用。

实例保护并不能针对以下情况保护 Auto Scaling 实例:

  • 通过 Amazon EC2 控制台、terminate-instances 命令或 TerminateInstances 操作手动终止。要保护 Auto Scaling 实例不被手动终止,请启用 Amazon EC2 终止保护。有关更多信息,请参阅 Amazon EC2 用户指南(适用于 Linux 实例) 中的启用终止保护

  • 实例未通过运行状况检查的情况下的运行状况检查更换。有关更多信息,请参阅 Auto Scaling 实例的运行状况检查。要阻止 Amazon EC2 Auto Scaling 终止运行状况不佳的实例,请暂停 ReplaceUnhealthy 流程。有关更多信息,请参阅暂停和恢复扩展流程

  • Spot 实例中断。当 Spot 实例的容量不再可用或 Spot 价格超过您的最高价时,将终止该实例。

启用组的实例保护

您可以在创建 Auto Scaling 组时启用实例保护。默认情况下,实例保护是禁用的。

启用实例保护(控制台)

在创建 Auto Scaling 组时,在配置 Auto Scaling 组详细信息页上,在高级详细信息下从实例保护中选择 Protect From Scale In 选项。


                        使用向导启用实例保护。

启用实例保护 (AWS CLI)

可以使用以下 create-auto-scaling-group 命令启用实例保护:

aws autoscaling create-auto-scaling-group --auto-scaling-group-name my-asg --new-instances-protected-from-scale-in ...

修改组的实例保护设置

您可以启用或禁用 Auto Scaling 组的实例保护设置。

更改组的实例保护设置(控制台)

  1. 打开 Amazon EC2 控制台 https://console.aws.amazon.com/ec2/

  2. 在导航窗格中,选择 Auto Scaling 组

  3. 选择 Auto Scaling 组。

  4. Details 选项卡上,选择 Edit

  5. 对于实例保护,请选择保护免于缩减

    
                                查看“Details (详细信息)”选项卡上的“Instance Protection (实例保护)”
  6. 选择保存

更改组的实例保护设置 (AWS CLI)

可以使用以下 update-auto-scaling-group 命令为指定的 Auto Scaling 组启用实例保护:

aws autoscaling update-auto-scaling-group --auto-scaling-group-name my-asg --new-instances-protected-from-scale-in

使用以下命令可对指定的组禁用实例保护:

aws autoscaling update-auto-scaling-group --auto-scaling-group-name my-asg --no-new-instances-protected-from-scale-in

修改实例的实例保护设置

默认情况下,实例从其 Auto Scaling 组获取其实例保护设置。但是,您随时可以对实例启用或禁用实例保护。

更改实例的实例保护设置(控制台)

  1. 打开 Amazon EC2 控制台 https://console.aws.amazon.com/ec2/

  2. 在导航窗格中,选择 Auto Scaling 组

  3. 选择 Auto Scaling 组。

  4. Instances 选项卡上,选择实例。

  5. 要启用实例保护,请依次选择 ActionsInstance ProtectionSet Scale In Protection。系统提示时,选择 Set Scale In Protection

  6. 要禁用实例保护,请依次选择 ActionsInstance ProtectionRemove Scale In Protection。系统提示时,选择删除缩减保护

更改实例的实例保护设置 (AWS CLI)

使用以下 set-instance-protection 命令为指定的实例启用实例保护:

aws autoscaling set-instance-protection --instance-ids i-5f2e8a0d --auto-scaling-group-name my-asg --protected-from-scale-in

使用以下命令可对指定实例禁用实例保护:

aws autoscaling set-instance-protection --instance-ids i-5f2e8a0d --auto-scaling-group-name my-asg --no-protected-from-scale-in