启用容量再平衡,主动替换存在风险的竞价型实例 - Amazon EC2 Auto Scaling
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

启用容量再平衡,主动替换存在风险的竞价型实例

您可以使用 Amazon Web Services 管理控制台或 Amazon CLI 为自动扩缩组启用容量再平衡。当启用容量再平衡时,Amazon EC2 Auto Scaling 将尝试主动替换组中已收到 EC2 实例再平衡建议的竞价型实例。

启用容量再平衡(控制台)

您可以在创建或更新 Auto Scaling 组时启用或禁用容量再平衡。

为新的 Auto Scaling 组启用容量再平衡
  1. 访问 https://console.aws.amazon.com/ec2/,打开 Amazon EC2 控制台,然后从导航窗格中选择 Auto Scaling Groups(Auto Scaling 组)。

  2. 选择 Create Auto Scaling group(创建 Auto Scaling 组)。

  3. 对于步骤 1:选择启动模板或配置,为自动扩缩组输入一个名称,选择一个启动模板,然后选择Next(下一步)以继续执行下一步骤。

  4. 对于步骤 2:选择实例启动选项以及对于实例类型要求,选择设置以创建混合实例组。这包括该实例可以启动的实例类型、实例购买选项以及竞价型实例和按需型实例的分配策略。预设情况下,这些设置均未配置。要进行配置,必须选择 Override launch template(覆盖启动模板)。有关创建混合实例组的更多信息,请参阅 Auto Scaling 组具有多个实例类型和购买选项

  5. 网络下,根据需要选择选项。验证要使用的子网是否位于不同的可用区中。

  6. 分配策略部分下,选择一个竞价型实例分配策略。要启用或禁用容量再平衡,请选中或清除 容量再平衡下的复选框。仅当您在 实例购买选项部分请求了自动扩缩组要作为竞价型实例启动的百分比时,才会看到此选项。

  7. 创建 Auto Scaling 组。

  8. (可选)根据需要添加生命周期挂钩。有关更多信息,请参阅 向自动扩缩组添加生命周期挂钩

为现有自动扩缩组启用或禁用容量再平衡
  1. 访问 https://console.aws.amazon.com/ec2/,打开 Amazon EC2 控制台,然后从导航窗格中选择 自动扩缩组

  2. 选中您的自动扩缩组旁边的复选框。这时将在页面底部打开一个拆分窗格。

  3. Details(详细信息)选项卡上,依次选择 Allocation strategies(分配策略)、Edit(编辑)。

  4. 分配策略部分下,可以通过选择或清除容量再平衡下的复选框来启用或禁用容量再平衡。

  5. 选择更新

启用容量再平衡(Amazon CLI)

以下示例显示如何使用 Amazon CLI 以启用和禁用容量再平衡。

使用 create-auto-scaling-groupupdate-auto-scaling-group 命令以及以下参数:

  • --capacity-rebalance / --no-capacity-rebalance:指示是否启用容量再平衡的布尔值。

在您调用 create-auto-scaling-group 命令之前,您需要配置为与 Auto Scaling 组配合使用的启动模板的名称。有关更多信息,请参阅 为 Auto Scaling 组创建启动模板

注意

以下过程显示如何使用 JSON 或 YAML 格式的配置文件。如果您使用 Amazon CLI 版本 1,必须指定 JSON 格式的配置文件。如果您使用 Amazon CLI 版本 2,可以指定 YAML 或 JSON 格式的配置文件。

创建和配置新的 Auto Scaling 组
  • 使用以下的 create-auto-scaling-group 命令创建新的自动扩缩组并启用容量再平衡。该命令引用 JSON 文件作为自动扩缩组的唯一参数。

    aws autoscaling create-auto-scaling-group --cli-input-json file://~/config.json

    如果您还没有指定混合实例策略的 CLI 配置文件,请创建一个。

    将以下行添加到配置文件中的顶级 JSON 对象。

    { "CapacityRebalance": true }

    下面是一个 config.json 示例文件。

    { "AutoScalingGroupName": "my-asg", "DesiredCapacity": 12, "MinSize": 12, "MaxSize": 15, "CapacityRebalance": true, "MixedInstancesPolicy": { "InstancesDistribution": { "OnDemandBaseCapacity": 0, "OnDemandPercentageAboveBaseCapacity": 25, "SpotAllocationStrategy": "price-capacity-optimized" }, "LaunchTemplate": { "LaunchTemplateSpecification": { "LaunchTemplateName": "my-launch-template", "Version": "$Default" }, "Overrides": [ { "InstanceType": "c5.large" }, { "InstanceType": "c5a.large" }, { "InstanceType": "m5.large" }, { "InstanceType": "m5a.large" }, { "InstanceType": "c4.large" }, { "InstanceType": "m4.large" }, { "InstanceType": "c3.large" }, { "InstanceType": "m3.large" } ] } }, "TargetGroupARNs": "arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/my-alb-target-group/943f017f100becff", "VPCZoneIdentifier": "subnet-5ea0c127,subnet-6194ea3b,subnet-c934b782" }
创建和配置新的 Auto Scaling 组
  • 使用以下的 create-auto-scaling-group 命令创建新的自动扩缩组并启用容量再平衡。该命令引用 YAML 文件作为自动扩缩组的唯一参数。

    aws autoscaling create-auto-scaling-group --cli-input-yaml file://~/config.yaml

    将以下行添加到 YAML 格式的配置文件。

    CapacityRebalance: true

    下面是一个 config.yaml 示例文件。

    --- AutoScalingGroupName: my-asg DesiredCapacity: 12 MinSize: 12 MaxSize: 15 CapacityRebalance: true MixedInstancesPolicy: InstancesDistribution: OnDemandBaseCapacity: 0 OnDemandPercentageAboveBaseCapacity: 25 SpotAllocationStrategy: price-capacity-optimized LaunchTemplate: LaunchTemplateSpecification: LaunchTemplateName: my-launch-template Version: $Default Overrides: - InstanceType: c5.large - InstanceType: c5a.large - InstanceType: m5.large - InstanceType: m5a.large - InstanceType: c4.large - InstanceType: m4.large - InstanceType: c3.large - InstanceType: m3.large TargetGroupARNs: - arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/my-alb-target-group/943f017f100becff VPCZoneIdentifier: subnet-5ea0c127,subnet-6194ea3b,subnet-c934b782
为现有 Auto Scaling 组启用容量再平衡
  • 使用以下 update-auto-scaling-group 命令启用容量再平衡。

    aws autoscaling update-auto-scaling-group --auto-scaling-group-name my-asg \ --capacity-rebalance
验证是否为 Auto Scaling 组启用容量再平衡
  • 使用以下 describe-auto-scaling-groups 命令验证是否启用了容量再平衡并查看详细信息。

    aws autoscaling describe-auto-scaling-groups --auto-scaling-group-name my-asg

    以下为响应示例。

    { "AutoScalingGroups": [ { "AutoScalingGroupName": "my-asg", "AutoScalingGroupARN": "arn", ... "CapacityRebalance": true } ] }
禁用容量再平衡

使用包含 --no-capacity-rebalance 选项的 update-auto-scaling-group 命令以禁用容量再平衡。

aws autoscaling update-auto-scaling-group --auto-scaling-group-name my-asg \ --no-capacity-rebalance

有关容量重新平衡的更多信息,请参阅 Amazon 计算博客上的使用 Amazon EC2 Auto Scaling 新容量再平衡功能主动管理竞价型实例生命周期

有关 EC2 实例再平衡建议的更多信息,请参阅《Amazon EC2 用户指南》中的 EC2 实例再平衡建议

要了解有关生命周期挂钩的更多信息,请参阅以下资源。

限制

  • Amazon EC2 Auto Scaling 只有在接收再平衡通知的实例未受横向缩减保护的情况下才能替换该实例。但是,横向缩减保护并不能阻止因 Spot 中断而终止。有关更多信息,请参阅 使用实例横向缩减保护以控制实例终止

  • 所有提供 Amazon EC2 Auto Scaling 的商业 Amazon Web Services 区域 均支持容量再平衡,但不包括中东(阿联酋)区域。