

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

# 启用容量再平衡，主动替换存在风险的竞价型实例
<a name="enable-capacity-rebalancing-console-cli"></a>

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

## 启用容量再平衡（控制台）
<a name="enable-capacity-rebalancing-console"></a>

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

**为新的 Auto Scaling 组启用容量再平衡**

1. 在上打开 Amazon EC2 控制台 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)，然后从导航窗格中选择 A **uto Scaling Gro** ups。

1. 选择 **Create Auto Scaling group**（创建 Auto Scaling 组）。

1. 对于**步骤 1：选择启动模板或配置**，为自动扩缩组输入一个名称，选择一个启动模板，然后选择**Next**（下一步）以继续执行下一步骤。

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

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

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

1. 创建 Auto Scaling 组。

1. （可选）根据需要添加生命周期挂钩。有关更多信息，请参阅 [向自动扩缩组添加生命周期挂钩](adding-lifecycle-hooks.md)。

**为现有自动扩缩组启用或禁用容量再平衡**

1. 在上打开 Amazon EC2 控制台 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)，然后从导航窗格中选择 A **uto Scaling Gro** ups。

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

1. 在 **Details**（详细信息）选项卡上，依次选择 **Allocation strategies**（分配策略）、**Edit**（编辑）。

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

1. 选择**更新**。

## 启用容量再平衡（AWS CLI）
<a name="enable-capacity-rebalancing-aws-cli"></a>

以下示例说明如何使用启用和禁用容量重新平衡。 AWS CLI 

使用带有以下参数的[create-auto-scaling-group](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/create-auto-scaling-group.html)或[update-auto-scaling-group](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/update-auto-scaling-group.html)命令：
+ `--capacity-rebalance` / `--no-capacity-rebalance`：指示是否启用容量再平衡的布尔值。

在调用[create-auto-scaling-group](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/create-auto-scaling-group.html)命令之前，您需要配置为用于 Auto Scaling 组的启动模板的名称。有关更多信息，请参阅 [为 Auto Scaling 组创建启动模板](create-launch-template.md)。

**注意**  
以下过程显示如何使用 JSON 或 YAML 格式的配置文件。如果使用 AWS CLI 版本 1，则必须指定 JSON 格式的配置文件。如果您使用 AWS CLI 版本 2，则可以指定格式为 YAML 或 JSON 的配置文件。

### JSON
<a name="enable-capacity-rebalancing-aws-cli-json"></a>

**创建和配置新的 Auto Scaling 组**
+ 使用以下[create-auto-scaling-group](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/create-auto-scaling-group.html)命令创建新的 Auto Scaling 组并启用容量重新平衡。该命令引用 JSON 文件作为自动扩缩组的唯一参数。

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

  如果您还没有指定[混合实例策略](ec2-auto-scaling-mixed-instances-groups.md)的 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"
  }
  ```

### YAML
<a name="enable-capacity-rebalancing-aws-cli-yaml"></a>

**创建和配置新的 Auto Scaling 组**
+ 使用以下[create-auto-scaling-group](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/create-auto-scaling-group.html)命令创建新的 Auto Scaling 组并启用容量重新平衡。该命令引用 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](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/update-auto-scaling-group.html)命令启用容量重新平衡。

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

**验证是否为 Auto Scaling 组启用容量再平衡**
+ 使用以下[describe-auto-scaling-groups](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/describe-auto-scaling-groups.html)命令验证容量重新平衡是否已启用并查看详细信息。

  ```
  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](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/update-auto-scaling-group.html)命令可禁用容量重新平衡。

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

## 相关资源
<a name="capacity-rebalancing-related-resources"></a>

有关容量再平衡的更多信息，请参阅 AWS 计算博客上的 “[使用适用于 Amazon EC2 Auto Scaling 的全新容量再平衡功能主动管理竞价型实例生命周期](https://aws.amazon.com/blogs/compute/proactively-manage-spot-instance-lifecycle-using-the-new-capacity-rebalancing-feature-for-ec2-auto-scaling/)”。

有关 EC2 实例再平衡建议的更多信息，请参阅《Amazon EC2 用户指南》**中的 [EC2 实例再平衡建议](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/rebalance-recommendations.html)。

要了解有关生命周期挂钩的更多信息，请参阅以下资源。
+ [教程：配置调用 Lambda 函数的生命周期钩子](tutorial-lifecycle-hook-lambda.md)（使用 EventBridge）
+ [教程：使用数据脚本和实例元数据检索生命周期状态](tutorial-lifecycle-hook-instance-metadata.md)

## 限制
<a name="capacity-rebalancing-limitations"></a>
+ Amazon EC2 Auto Scaling 只有在接收再平衡通知的实例未受横向缩减保护的情况下才能替换该实例。但是，横向缩减保护并不能阻止因 Spot 中断而终止。有关更多信息，请参阅 [使用实例横向缩减保护以控制实例终止](ec2-auto-scaling-instance-protection.md)。
+ 所有提供 Amazon EC2 Auto Scaling 的商业 AWS 区域 均支持容量再平衡，但不包括中东（阿联酋）区域。