

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 啟用容量重新平衡以主動取代具有風險的 Spot 執行個體
<a name="enable-capacity-rebalancing-console-cli"></a>

您可以使用 AWS 管理主控台 或 AWS CLI 來啟用 Auto Scaling 群組的容量重新平衡。啟用容量重新平衡時，Amazon EC2 Auto Scaling 會嘗試主動取代群組中收到 EC2 執行個體重新平衡建議的 Spot 執行個體。

## 啟用容量重新平衡 (主控台)
<a name="enable-capacity-rebalancing-console"></a>

您可以在建立或更新 Auto Scaling 群組時啟用或停用容量重新平衡。

**啟用新 Auto Scaling 群組的容量重新平衡**

1. 前往網址 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台，然後從導覽窗格中選擇 **Auto Scaling 群組**。

1. 選擇 **Create Auto Scaling group** (建立 Auto Scaling 群組)。

1. 在**步驟 1：選擇啟動範本或組態**中，輸入 Auto Scaling 群組的名稱，選擇啟動範本，然後選擇**下一步**以繼續下一個步驟。

1. 在**步驟 2：選擇執行個體啟動選項**中，針對**執行個體類型需求**，選擇建立混合執行個體群組的設定。這包括可啟動的執行個體類型、執行個體購買選項，以及 Spot 和隨需執行個體的配置策略。依預設，這些設定並未設定。要進行設定，您必須選擇 **Override launch template** (覆寫啟動範本)。如需有關建立混合執行個體群組的詳細資訊，請參閱 [具有多種執行個體類型和購買選項的 Auto Scaling 群組](ec2-auto-scaling-mixed-instances-groups.md)。

1. 在**網路**下，視需要選擇選項。驗證您想要使用的子網路是否位於不同的可用區域中。

1. 在**配置策略**區段下，選擇 Spot 的配置策略。勾選或清除**容量重新平衡**核取方塊，即可啟用或停用容量重新平衡。您唯有在**執行個體購買選項**區段中請求了要作為 Spot 執行個體啟動的 Auto Scaling 群組的百分比時，才能看到這個選項。

1. 建立 Auto Scaling 群組。

1. (選用) 視需要新增生命週期關聯。如需詳細資訊，請參閱[將生命週期掛鉤新增至 Auto Scaling 群組](adding-lifecycle-hooks.md)。

**啟用或停用現有 Auto Scaling 群組的容量重新平衡**

1. 前往網址 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台，然後從導覽窗格中選擇 **Auto Scaling 群組**。

1. 選取 Auto Scaling 群組旁的核取方塊。頁面底部會開啟一個分割窗格。

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 檔案作為 Auto Scaling 群組的唯一參數。

  ```
  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 檔案作為 Auto Scaling 群組的唯一參數。

  ```
  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
          }
      ]
  }
  ```

**停用容量重新平衡**  
使用 [update-auto-scaling-group](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/update-auto-scaling-group.html) 命令與 `--no-capacity-rebalance` 選項來停用容量重新平衡。

```
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 的新容量重新平衡功能主動管理 Spot 執行個體生命週期](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)。 *Amazon EC2 *

若要進一步了解生命週期關聯，請參閱下列資源。
+ [教學課程：設定叫用 Lambda 函數的 lifecycle hook](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)。
+ 容量重新平衡的支援可在所有 AWS 區域 提供 Amazon EC2 Auto Scaling 的商業區域使用，中東 (阿拉伯聯合大公國) 區域除外。