控制哪些 Auto Scaling 实例在 - Amazon EC2 Auto Scaling
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

控制哪些 Auto Scaling 实例在

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

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

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

请注意有关 Auto Scaling 组的以下内容:混合实例策略

  • Amazon EC2 Auto Scaling 首先确定应终止两种类型中的哪一种类型(竞价或按需)。然后,它会在每个可用区中分别应用终止策略,并确定哪个实例(在确定的购买选项内)要终止哪个可用区,这将导致可用区最平衡。同样的原则适用于使用混合实例配置并为实例类型定义权重的 Auto Scaling 组。

默认终止策略

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

在 Amazon EC2 Auto Scaling 选择要终止的实例之前,它首先确定哪些可用区包含最多实例,并且至少有一个实例不受缩减保护。

在选定的可用区中,默认终止策略行为如下所示:

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

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

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

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

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

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

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

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

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

自定义终止策略

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

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

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

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

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

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

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

  • ClosestToNextInstanceHour。 终止最接近下个计费小时的实例。此策略有助于最大限度使用按小时收费的实例。(只有使用亚马逊 Linux、Windows 或 Ubuntu 的实例才会按一秒的增量计费)。

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

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

    注意

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

自定义终止策略(console)

  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 (终止策略),请选择一个或多个终止策略。如果您选择多个策略,请按照它们的应用顺序将其列出。如果您使用默认策略,请将其指定为列表中的最后一个策略。

  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"

实例扩展保护

要控制 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命令或TerminateInstancesaction. 要保护 Auto Scaling 实例不被手动终止,请启用 Amazon EC2 终止保护。有关更多信息,请参阅 。启用终止保护中的适用于 Linux 实例的 Amazon EC2 用户指南

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

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

为组启用实例缩减保护

您可以在创建 Auto Scaling 组时启用实例缩减保护。默认情况下,实例缩减保护处于禁用状态。

启用实例缩减保护(console)

创建自动扩展组时,在配置组大小和扩展策略页面,在实例扩展保护下,选择启用实例缩减保护选项。

启用实例缩减保护 (Amazon 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 组的实例缩减保护设置。启用实例缩减保护设置后,启用该设置后启动的所有新实例都将启用实例缩减保护。除非您为每个实例单独启用实例缩减保护设置,否则之前启动的实例不会受到扩展保护。

更改组的实例缩减保护设置(console)

  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. 对于 Instance scale-in protection (实例缩减保护),选择 Enable instance scale-in protection (启用实例缩减保护)

  5. 选择 Update

更改组的实例缩减保护设置 (Amazon 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 组获取其实例缩减保护设置。但是,您随时可以对实例启用或禁用实例缩减保护。

更改实例的实例缩减保护设置(console)

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

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

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

  3. Instance management (实例管理) 选项卡的 Instances (实例) 中,选择实例。

  4. 要启用实例缩减保护,请依次选择 Actions (操作)Set scale-in protection (设置缩减保护)。系统提示时,选择 Set scale-in protection (设置缩减保护)

  5. 要禁用实例缩减保护,请依次选择 Actions (操作)Remove scale-in protection (删除缩减保护)。系统提示时,选择 Remove scale-in protection (删除缩减保护)

更改实例的实例缩减保护设置 (Amazon CLI)

请使用以下集实例保护命令为指定的实例启用实例缩减保护。

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