

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

# 因應 Amazon ECS 服務配額與 API 限流限制
<a name="operating-at-scale-service-quotas"></a>

Amazon ECS 與數個 整合 AWS 服務，包括 Elastic Load Balancing AWS Cloud Map和 Amazon EC2。透過這種緊密整合，Amazon ECS 包含數個功能，例如服務負載平衡、Service Connect、任務聯網與叢集自動擴展。Amazon ECS 及其所整合的其他 AWS 服務 服務均設定有服務配額與 API 速率限制，可確保一致的效能與使用率。這些服務配額也可防止意外佈建超過所需的資源，並防範可能導致帳單金額增加的惡意行為。

透過熟悉您的服務配額和 AWS API 速率限制，您可以規劃擴展工作負載，而不必擔心意外的效能降低。如需詳細資訊，請參閱 [Request throttling for the Amazon ECS API](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/request-throttling.html)。

在 Amazon ECS 上擴展工作負載時，建議考量下列服務配額。
+ AWS Fargate 具有限制每個 中並行執行中任務數量的配額 AWS 區域。Amazon ECS 上的隨需任務與 Fargate Spot 任務都有配額。每個服務配額的計算範圍，亦涵蓋您在 Fargate 上執行的所有 Amazon EKS Pod。
+ 對於在 Amazon EC2 執行個體上執行的任務，每個叢集可註冊的 Amazon EC2 執行個體數量上限為 5,000 個。如果搭配 Auto Scaling 群組容量提供者使用 Amazon ECS 叢集自動擴展，或者自行管理叢集的 Amazon EC2 執行個體，則此配額可能會成為部署瓶頸。如果需要更多容量，您可以建立更多叢集或請求提高服務配額。
+ 如果搭配 Auto Scaling 群組容量提供者使用 Amazon ECS `Tasks in the PROVISIONING state per cluster` 叢集自動擴展，請在擴展服務時將配額納入考量。此配額指每個叢集中處於`PROVISIONING` 狀態的任務數上限，容量提供者可針對這些任務增加容量。當同時啟動大量任務時，就很容易達到此配額上限。若同時部署數十個服務，每個服務包含數百個任務，就可能出現這種情況。此時，若叢集容量不足，容量提供者需啟動新的容器執行個體來置放這些任務。在容量提供者啟動額外 Amazon EC2 執行個體的同時，Amazon ECS 服務排程器通常會持續平行啟動任務。但由於叢集容量不足，此操作可能會受到限流。隨著新容器執行個體的啟動，Amazon ECS 服務排程器會採用退避與指數限流策略，重試任務置放操作。因此，您可能會遇到部署或擴展時間延長的情況。為避免此情況，您可透過以下任一方式規劃服務部署。一種方式是部署大量無需增加叢集容量的任務，一種方式是保留備用叢集容量以應對新任務啟動。

除了在擴展工作負載時考慮 Amazon ECS 服務配額之外，也請考慮與 Amazon ECS AWS 服務 整合之其他 的服務配額。

## Elastic Load Balancing
<a name="operating-at-scale-service-quotas-elb"></a>

您可以設定 Amazon ECS 服務使用 Elastic Load Balancing，將流量平均分發至所有任務。如需如何選擇負載平衡器的詳細資訊與建議的最佳實務，請參閱[使用負載平衡分佈 Amazon ECS 服務流量](service-load-balancing.md)。

### Elastic Load Balancing 服務配額
<a name="elb-service-quotas"></a>

在擴展工作負載時，建議考量下列 Elastic Load Balancing 服務配額。大多數 Elastic Load Balancing 服務配額都可調整，您可透過 Service Quotas 主控台申請提高上限。

**Application Load Balancer**

在使用 Application Load Balancer 時，根據實際使用案例，可能需要申請提高以下項目的配額：
+  `Targets per Application Load Balancer` 配額，即 Application Load Balancer 後端的目標數量。
+ `Targets per Target Group per Region` 配額，即目標群組後端的目標數量。

如需詳細資訊，請參閱 *User Guide for Application Load Balancers* 中的 [Quotas for your Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-limits.html)。

**Network Load Balancer**

Network Load Balancer 的目標註冊數量存在更嚴格的限制。使用 Network Load Balancer 時，通常建議啟用跨可用區域支援功能，但此功能此功能會對 `Targets per Availability Zone Per Network Load Balancer` 帶來額外的擴展限制，亦即每個 Network Load Balancer 於各可用區域中可容納的目標數量上限將受到規範。如需詳細資訊，請參閱 *User Guide for Network Load Balancers* 中的 [Quotas for your Network Load Balancers](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/load-balancer-limits.html)。

### Elastic Load Balancing API 限流
<a name="elb-service-api-throttling"></a>

在設定 Amazon ECS 服務使用負載平衡器時，必須先通過目標群組運作狀態檢查，才能將服務視為正常運作。為了執行這些運作狀態檢查，Amazon ECS 會代為調用 Elastic Load Balancing API 操作。如果帳戶中有大量使用負載平衡器設定的服務，可能會因為 `RegisterTarget`、`DeregisterTarget` 與 `DescribeTargetHealth` 這幾項 Elastic Load Balancing API 操作遭遇限流，導致服務部署速度減緩。發生限流時，Amazon ECS 服務事件訊息中會發生限流錯誤。

如果您遇到 AWS Cloud Map API 限流，您可以聯絡 支援 以取得有關如何提高 AWS Cloud Map API 限流限制的指引。如需有關監控及疑難排解此類限流錯誤的詳細資訊，請參閱[因應 Amazon ECS 限流問題](operating-at-scale-dealing-with-throttles.md)。

## 彈性網路介面
<a name="elastic-network-interfaces"></a>

隨著任務使用 `awsvpc` 網路模式，Amazon ECS 會為每個任務佈建唯一的彈性網路介面 (ENI)。當 Amazon ECS 服務使用 Elastic Load Balancing 負載平衡器時，這些網路介面也會註冊為該服務中定義的對應目標群組的目標。

### 彈性網路介面服務配額
<a name="eni-service-quotas"></a>

當您執行使用 `awsvpc` 網路模式的任務時，每個任務都會連接唯一的彈性網路介面。如果必須透過網際網路到達這些任務，請將公有 IP 位址指派給這些任務的彈性網路介面。在擴展 Amazon ECS 工作負載時，請考量這兩個重要的配額：
+ `Network interfaces per Region` 配額，這是 中 AWS 區域 您帳戶的最大網路介面數量。
+ `Elastic IP addresses per Region` 配額，即 AWS 區域中彈性 IP 位址的最大數量。

這兩個服務配額皆可調整，您可以直接透過 Service Quotas 主控台提出調增申請。如需詳細資訊，請參閱 *Amazon Virtual Private Cloud User Guide* 中的 [Amazon VPC service quotas](https://docs.aws.amazon.com/vpc/latest/userguide/amazon-vpc-limits.html#vpc-limits-enis)。

對於託管在 Amazon EC2 執行個體上的 Amazon ECS 工作負載，當執行使用 `awsvpc` 網路模式的任務時，建議考量 `Maximum network interfaces` 服務配額，即每個 Amazon EC2 執行個體的網路執行個體數量上限。此配額會限制可在執行個體上置放的任務數量。此配額無法調整，就業未於 Service Quotas 主控台中提供。如需詳細資訊，請參閱 *Amazon EC2 User Guide* 中的 [IP addresses per network interface per instance type](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html#AvailableIpPerENI)。

雖然您無法變更可連接至 Amazon EC2 執行個體的網路介面數量，但可透過啟用彈性網路介面主幹功能來增加可用網路介面的總數。例如，依預設，`c5.large` 執行個體最多可有 3 個網路介面。執行個體的主要網路介面視為一個配額。因此，您可以將額外的兩個網路介面連接至執行個體。因為每個使用 `awsvpc` 網路模式的任務都需要網路介面，所以通常只能對此執行個體類型執行兩個這類任務。這可能會導致叢集容量的使用率偏低。如果啟用彈性網路介面主幹功能，即可提高網路介面密度，從而在每個執行個體上部署更多任務。啟用主幹功能後，`c5.large` 執行個體最多可有 12 個網路介面。該執行個體本身已具備主要網路介面，而 Amazon ECS 會建立並連接「主幹」網路介面至該執行個體。因此，透過此組態，您可在該執行個體上執行 10 個任務，而非預設的 2 個任務。如需詳細資訊，請參閱[增加 Amazon ECS Linux 容器執行個體網路介面數量](container-instance-eni.md)。

### 彈性網路介面 API 限流
<a name="eni-api-throttles"></a>

在執行使用 `awsvpc` 網路模式的任務時，Amazon ECS 會調用下列 Amazon EC2 API。每個 API 皆設有不同的 API 限流。如需詳細資訊，請參閱 *Amazon EC2 API Reference* 中的 [Request throttling for the Amazon EC2 API](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/throttling.html)。
+ CreateNetworkInterface
+ AttachNetworkInterface
+ DetachNetworkInterface
+ DeleteNetworkInterface
+ DescribeNetworkInterfaces
+ DescribeVpcs
+ DescribeSubnets
+ DescribeSecurityGroups
+ DescribeInstances

若在彈性網路介面佈建工作流程中遭遇 Amazon EC2 API 呼叫限流，Amazon ECS 服務排程器會自動採用指數退避機制進行重試。這些淘汰有時可能導致任務啟動延遲，進而造成部署速度減緩。當發生 API 限流時，服務事件訊息中會顯示 `Operations are being throttled. Will try again later.`。如果您持續符合 Amazon EC2 API 限流，您可以聯絡 支援 以取得有關如何提高 API 限流限制的指引。如需有關監控及疑難排解限流錯誤的詳細資訊，請參閱[因應限流問題](https://docs.aws.amazon.com/AmazonECS/latest/bestpracticesguide/operating-at-scale-dealing-with-throttles.html)。

## AWS Cloud Map
<a name="cloudmap"></a>

Amazon ECS 服務探索和 Service Connect 使用 AWS Cloud Map APIs來管理 Amazon ECS 服務的命名空間。如果服務有大量任務，建議考量下列事項。

### AWS Cloud Map 服務配額
<a name="cloudmap-service-quotas"></a>

當 Amazon ECS `Tasks per service` 服務設定為使用服務探索或 Service Connect 時，服務任務數量上限的配額會受到 AWS Cloud Map `Instances per service`該服務執行個體數量上限的服務配額影響。具體來說， AWS Cloud Map 服務配額會將每個服務可執行的執行個體數減少到最多 1,000 個。您無法變更 AWS Cloud Map 配額。如需詳細資訊，請參閱 [AWS Cloud Map 服務配額](https://docs.aws.amazon.com/general/latest/gr/cloud_map.html)。

### AWS Cloud Map API 限流
<a name="cmap-api-throttles"></a>

Amazon ECS 會代表您呼叫 `ListInstances`、`RegisterInstance`、 `GetInstancesHealthStatus`和 `DeregisterInstance` AWS Cloud Map APIs。這些 API 可用於服務探索，會在您啟動任務時執行運作狀態檢查。當同時使用服務探索與大量任務的多個服務同時部署時，這可能會導致超過 AWS Cloud Map API 限流限制。發生這種情況時，您可能會看到下列訊息：在 Amazon ECS 服務事件訊息`Operations are being throttled. Will try again later`中，以及較慢的部署和任務啟動速度。 AWS Cloud Map 不會記錄這些 APIs 的限流限制。如果您遇到這些調節，您可以聯絡 支援 以取得提高 API 調節限制的指導。如需有關監控及疑難排解此類限流錯誤的更多建議，請參閱[因應 Amazon ECS 限流問題](operating-at-scale-dealing-with-throttles.md)。