Amazon EC2 Auto Scaling
用户指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

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

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

当您配置自动缩小时,必须决定哪些实例应首先终止并设置终止策略。

在自动缩减时,您也可以使用实例保护来防止特定实例被终止。

注意

在此部分中,对于更大限度提高每小时利用率的信息,当前所适用的实例需要运行 Microsoft Windows 或 Linux 发行版并且按小时收费。如果您的 Auto Scaling 组使用 Amazon Linux 或 Ubuntu,则 EC2 的使用以秒为单位计费。有关每秒计费的更多信息,请参阅 Amazon EC2 定价

默认终止策略

此默认终止策略可帮助确保您的网络架构均匀分布到多个可用区。使用默认终止策略时,Auto Scaling 组的行为如下所示:

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

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

  3. 如果有多个实例使用最旧启动配置,则确定哪些不受保护的实例最接近下个计费小时。(这将帮助您最大程度地使用您的 EC2 实例并管理 Amazon EC2 使用成本。)如果有一个此类实例,则终止该实例。

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

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

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

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

 基本 Auto Scaling 组。

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

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

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

自定义终止策略

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

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

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

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

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

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

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

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

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

  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 组以首先使用 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 用户指南(适用于 Linux 实例) 中的启用终止保护

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

  • Spot 实例中断。

启用组的实例保护

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

使用控制台启用实例保护

在创建 Auto Scaling 组时,在 Configure Auto Scaling group details 页上,在 Advanced Details 下从 Instance Protection 中选择 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.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 组启用实例保护:

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.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 命令可对指定实例启用实例保护:

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