Auto Scaling
用户指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

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

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

让 Auto Scaling 自动缩小时,您必须确定哪些实例 Auto Scaling 应首先终止。您可以使用终止策略对此进行配置。

在缩小时,您也可以使用实例保护防止 Auto Scaling 选择终止特定的实例。

默认终止策略

此默认终止策略可帮助确保您的网络架构均匀分布到多个可用区。当使用默认终止策略时,Auto Scaling 按如下方式选择要终止的实例:

  1. Auto Scaling 确定在多个可用区中是否有实例。如果是,它会选择有最多实例并且至少一个实例不受缩小保护的可用区。如果有多个可用区有此数目的实例,则 Auto Scaling 选择使用最旧启动配置的实例所在的可用区。

  2. Auto Scaling 确定所选可用区中的哪些不受保护的实例使用最旧启动配置。如果有一个此类实例,它会终止该实例。

  3. 如果有多个实例使用最旧启动配置,则 Auto Scaling 确定哪些不受保护的实例最接近下个计费小时。(这有助于您最大程度使用您的 EC2 实例,同时最大程度减少对 Amazon EC2 用量的计费时数。)如果有一个此类实例,Auto Scaling 会终止该实例。

  4. 如果有多个不受保护的实例最接近下个计费小时,则 Auto Scaling 随机选择其中一个实例。

以下流程图说明默认终止策略的工作方式。

 演示 Auto Scaling 如何使用默认终止策略终止实例的流程图。

考虑一个有两个可用区的 Auto Scaling 组,所需容量为两个实例,采用在达到特定阈值时按 1 增加和减少实例数的扩展策略。该组中的两个实例分布如下。

 基本 Auto Scaling 组。

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

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

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

自定义终止策略

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

当您自定义终止策略时,Auto Scaling 首先评估可用区是否存在不平衡。如果某个可用区的实例数多于该组使用的其他可用区,则 Auto Scaling 应用您对不平衡可用区中的实例指定的终止策略。如果该组使用的可用区是平衡的,则 Auto Scaling 应用您指定的终止策略。

Auto Scaling 当前支持以下自定义终止策略:

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

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

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

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

  • Default。Auto Scaling 使用默认终止策略。如果您有多个扩展策略与该组关联,此策略非常有用。

使用控制台自定义终止策略

  1. 打开 Amazon EC2 控制台 https://console.amazonaws.cn/ec2/

  2. 在导航窗格上,选择 Auto Scaling Groups

  3. 选择 Auto Scaling 组。

  4. 对于 Actions,选择 Edit

  5. Details 选项卡上,找到 Termination Policies。选择一个或多个终止策略。如果您选择多个策略,请按照您希望应用这些策略的顺序将其列出。如果您使用 Default 策略,请将该策略设为列表中的最后一项。

  6. 选择 Save

使用 AWS CLI 自定义终止策略

使用以下命令之一:

您可以单独使用这些策略,或者将它们合并到 Auto Scaling 在终止实例时使用的策略的列表中。例如,使用以下命令更新 Auto Scaling 组以首先使用 OldestLaunchConfiguration 策略,然后使用 ClosestToNextInstanceHour 策略:

Copy
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 不能终止所需数量的实例,直到其实例保护设置被禁用。

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

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

  • 实例未通过运行状况检查的情况下的运行状况检查更换。

  • 竞价型实例中断。

启用组的实例保护

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

使用控制台启用实例保护

在创建 Auto Scaling 组时,在 Configure Auto Scaling group details 页上,在 Advanced Details 下从 Instance Protection 中选择 Protect From Scale In 选项。

 使用向导启用实例保护。

使用 AWS CLI 启用实例保护

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

Copy
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.amazonaws.cn/ec2/

  2. 在导航窗格上,选择 Auto Scaling Groups

  3. 选择 Auto Scaling 组。

  4. Details 选项卡上,选择 Edit

  5. 对于 Instance Protection,选择 Protect From Scale In

     查看“Details”选项卡上的“Instance Protection”
  6. 选择 Save

使用 AWS CLI 更改组的实例保护设置

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

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

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

Copy
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.amazonaws.cn/ec2/

  2. 在导航窗格上,选择 Auto Scaling Groups

  3. 选择 Auto Scaling 组。

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

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

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

使用 AWS CLI 更改实例的实例保护设置

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

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

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

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