

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

# 使用叢集自動擴展自動管理 Amazon ECS 容量
<a name="cluster-auto-scaling"></a>

Amazon ECS 可管理在您的叢集註冊的 Amazon EC2 執行個體的擴展。這稱為 Amazon ECS* 叢集自動擴展*。在建立 Amazon ECS Auto Scaling 群組容量提供者時，您可以啟用受管擴展。然後，您可以為此 Auto Scaling 群組中的執行個體使用率設定目標百分比 (`targetCapacity`)。Amazon ECS 會為 Auto Scaling 群組建立兩個自訂 CloudWatch 指標與一個目標追蹤擴展政策。Amazon ECS 接著會根據任務使用的資源使用率來管理縮減與橫向擴充動作。

針對每個與叢集關聯的 Auto Scaling 群組容量提供者，Amazon ECS 會建立並管理以下資源：
+ 低指標值 CloudWatch 警示
+ 高指標值 CloudWatch 警示
+ 目標追蹤擴展政策
**注意**  
Amazon ECS 會建立目標追蹤擴展政策，並將其連接到 Auto Scaling 群組。若要更新目標追蹤擴展政策，請更新容量提供者受管擴展設定，而不是直接更新擴展政策。

如果關閉受管擴展或解除容量提供者與叢集的關聯，Amazon ECS 會移除 CloudWatch 指標和目標追蹤擴展政策資源。

Amazon ECS 使用以下指標來判定要採取的動作：

`CapacityProviderReservation`  
特定容量提供者正在使用的容器執行個體的百分比。Amazon ECS 會產生此指標。  
Amazon ECS 將 `CapacityProviderReservation` 值設定為 0-100 之間的數字。Amazon ECS 使用下列公式來表示 Auto Scaling 群組中剩餘容量的比率。之後，Amazon ECS 會將指標發佈到 CloudWatch。如需有關指標計算方式的詳細資訊，請參閱 [ Deep Dive on Amazon ECS Cluster Auto Scaling](https://aws.amazon.com/blogs/containers/deep-dive-on-amazon-ecs-cluster-auto-scaling/)。  

```
CapacityProviderReservation = (number of instances needed) / (number of running instances) x 100
```

`DesiredCapacity`  
Auto Scaling 群組的容量。此指標不會發布至 CloudWatch。

之後，Amazon ECS 會在 `AWS/ECS/ManagedScaling` 命名空間中將 `CapacityProviderReservation` 指標發佈到 CloudWatch。`CapacityProviderReservation` 指標會導致發生下列其中一個動作：

**`CapacityProviderReservation` 值等於 `targetCapacity`**  
Auto Scaling 群組不需要橫向擴展或縮減。已達到目標使用率百分比。

**`CapacityProviderReservation` 值大於 `targetCapacity`**  
有更多任務使用比您的 `targetCapacity` 百分比高的容量百分比。`CapacityProviderReservation` 指標增加的值會導致相關聯的 CloudWatch 警示採取動作。此警示會更新 Auto Scaling 群組的 `DesiredCapacity` 值。Auto Scaling 群組會使用此值啟動 EC2 執行個體，然後向叢集註冊這些執行個體。  
當 `targetCapacity` 的預設值為 100% 時，新任務會在橫向擴展期間處於 `PENDING` 狀態，因為執行個體上沒有可用容量來執行任務。新執行個體向 ECS 註冊後，這些任務將在新執行個體上開始執行。

**`CapacityProviderReservation` 值小於 `targetCapacity`**  
使用容量百分比低於 `targetCapacity` 的百分比的任務更少，並且至少有一個可以終止的執行個體。`CapacityProviderReservation` 指標減少的值會導致相關聯的 CloudWatch 警示採取動作。此警示會更新 Auto Scaling 群組的 `DesiredCapacity` 值。Auto Scaling 群組會使用此值終止 EC2 容器執行個體，然後向叢集取消註冊這些執行個體。  
Auto Scaling 群組遵循群組終止政策來確定在縮減事件期間首先終止哪些執行個體。此外，它還可以避免開啟執行個體縮減保護設定的執行個體。如果您開啟受管終止保護，叢集自動擴展可以管理哪些執行個體具有執行個體縮減保護設定。如需有關受管終止保護的詳細資訊，請參閱 [控制 Amazon ECS 終止的執行個體](managed-termination-protection.md)。如需 Auto Scaling 群組終止執行個體的詳細資訊，請參閱 *Amazon EC2 Auto Scaling 使用者指南*中的[控制在縮減期間會終止的 Auto Scaling 執行個體](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-instance-protection.html)。

使用叢集自動擴展時應考慮以下事項：
+ 請勿以任何擴展政策變更或管理與容量提供者相關聯的 Auto Scaling 群組所需的容量，Amazon ECS 管理的政策除外。
+ 當 Amazon ECS 從 0 個執行個體橫向擴充時，會自動啟動 2 個執行個體。
+ Amazon ECS 會將`AWSServiceRoleForECS`服務連結 IAM 角色用於 AWS Auto Scaling 代表您呼叫 所需的許可。如需詳細資訊，請參閱[使用 Amazon ECS 的服務連結角色](using-service-linked-roles.md)。
+ 將容量提供者與 Auto Scaling 群組搭配使用時，建立容量提供者的使用者、群組或角色需要 `autoscaling:CreateOrUpdateTags` 許可。這是因為當群組與容量提供者產生關聯時，Amazon ECS 會將標籤加入至 Auto Scaling 群組。
**重要**  
確保您使用的任何工具不會將 `AmazonECSManaged` 標籤從 Auto Scaling 群組中移除。如果已移除此標籤，則 Amazon ECS 無法管理擴展。
+ 叢集自動擴展不會修改群組的 **MinimumCapacity** (容量下限) 或 **MaximumCapacity** (容量上限)。為了讓群組進行橫向擴展，**MaximumCapacity** (容量上限) 必須大於零。
+ 當自動擴展 (受管擴展) 開啟時，一個容量提供者一次只能連接到一個叢集。如果容量提供者已關閉受管擴展，您可以將其關聯到多個叢集。
+ 當受管擴展關閉時，容量提供者不會縮減或橫向擴展。您可以使用容量提供者策略在容量提供者之間平衡您的任務。
+ 就容量而言，`binpack` 策略是最有效率的策略。
+ 當目標容量小於 100% 時，在置放策略中，`binpack` 策略的有限順序必須高於 `spread` 策略。這可防止容量提供者橫向擴充，直至每個任務都有專用執行個體或達到限制為止。

## 開啟叢集自動擴展
<a name="cluster-auto-scale-use"></a>

您可以使用主控台或 AWS CLI啟用叢集自動擴展。

當您透過主控台建立使用 EC2 容量提供者的叢集時，Amazon ECS 會代為建立 Auto Scaling 群組並設定目標容量。如需詳細資訊，請參閱[為 Amazon EC2 工作負載建立 Amazon ECS 叢集](create-ec2-cluster-console-v2.md)。

您也可以建立 Auto Scaling 群組，然後將群組指派給叢集。如需詳細資訊，請參閱[更新 Amazon ECS 容量提供者](update-capacity-provider-console-v2.md)。

當您使用 時 AWS CLI，在您建立叢集之後

1. 建立容量提供者前，您需要建立 Auto Scaling 群組。如需詳細資訊，請參閱《Amazon EC2 Auto Scaling 使用者指南**》中的 [Auto Scaling 群組](https://docs.aws.amazon.com/autoscaling/ec2/userguide/auto-scaling-groups.html)。

1. 使用 `put-cluster-capacity-providers` 修改叢集容量提供者。如需詳細資訊，請參閱[啟用 Amazon ECS 叢集自動擴展](turn-on-cluster-auto-scaling.md)。