Amazon EC2 Auto Scaling
用户指南

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

对于每个 Auto Scaling 组,您可以控制它何时向网络架构添加实例 (称为扩展)或从中删除实例(称为缩减)。您可以通过附加和分离实例手动扩展组大小,或者可以使用扩展策略自动执行该过程。

要指定在缩减时首先终止哪一实例,请为 Auto Scaling 组配置终止策略。

在执行自动缩减时,您也可以使用实例保护来防止特定实例被终止。对于 Auto Scaling 组中的实例,使用 Amazon EC2 Auto Scaling 功能在发生缩减事件时保护实例。如果要防止您的实例被意外终止,请使用 Amazon EC2 终止保护。

注意

对于 Auto Scaling 组具有多个实例类型和购买选项,缩减操作会考虑按需基数以及为按需和 Spot 实例设置的百分比。在组缩减时,Auto Scaling 组首先标识它将终止的两种实例类型。然后,它会选择有包含最多该类型实例并应用默认或自定义终止策略的可用区。

默认终止策略

本节描述 Auto Scaling 在发生缩减事件时使用的默认终止策略。默认终止策略旨在帮助确保在可用区之间平均分配实例,以获得高可用性。默认策略会保留通用性和灵活性,旨在满足各种场景的需要。

使用默认终止策略时,Auto Scaling 组的行为如下所示:

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

    如果可以从可用区中选择多个不受保护的实例,可以根据以下标准(按显示的顺序应用)选择要终止的实例。

  2. [仅适用于Auto Scaling 组具有多个实例类型和购买选项]

    确定要终止的实例,以便将剩余实例与要终止的按需或 Spot 实例的分配策略、当前选择的实例类型,以及在 N 个最低价格 Spot 池之间分配保持一致。如果有一个此类实例,则终止该实例。否则,应用下一个条件。

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

    确定是否有任何实例使用最旧的启动模板。如果有一个此类实例,则终止该实例。(请注意存在一个例外情况:如果组最初使用启动配置。Amazon EC2 Auto Scaling 会首先终止使用启动配置的实例,然后再终止使用最旧启动模板的实例。)

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

    确定是否有任何实例使用最旧的启动配置。如果有一个此类实例,则终止该实例。

  5. 在应用 2 到 4 中的所有条件后,如果要终止多个不受保护的实例,确定哪些实例最接近下一个计费小时。如果有一个此类实例,则终止该实例。(通过终止最接近下一个计费小时的实例,将帮助您最大程度地使用按小时计费的实例。)

    注意

    使用按需实例时,您可以根据运行的实例以按小时或按分钟的方式为计算容量付费。如果您的 Auto Scaling 组使用 Amazon Linux 或 Ubuntu,则 EC2 的使用以秒为单位计费。有关更多信息,请参阅 Amazon EC2 定价

  6. 如果多个未保护的实例最接近下一个计费小时,请随机选择其中的一个实例。

示例

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


                    基本 Auto Scaling 组。

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


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

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

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

自定义终止策略

为 Auto Scaling 组分配的默认终止策略通常足以适用于大多数情况。但是,您可以选择将默认策略替换为自定义策略。

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

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

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

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

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

  • ClosestToNextInstanceHour。终止最接近下个计费小时的实例。此策略将帮助您最大程度地使用您的实例并管理 Amazon EC2 使用成本。

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

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

  • AllocationStrategy。终止 Auto Scaling 组中的实例,使剩余实例与所终止实例类型的分配策略匹配(Spot 实例或按需实例)。当您首选的实例类型发生变化时,可使用该策略。您可以逐渐在 N 个最低价 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