因應 Amazon ECS 服務配額與 API 限流限制 - Amazon Elastic Container Service

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

因應 Amazon ECS 服務配額與 API 限流限制

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

透過熟悉您的服務配額和 AWS API 速率限制,您可以規劃擴展工作負載,而不必擔心意外的效能降低。如需詳細資訊,請參閱 Request throttling for the Amazon ECS API

在 Amazon ECS 上擴展工作負載時,建議考量下列服務配額。

  • AWS Fargate 具有限制每個 中並行執行中任務數量的配額 AWS 區域。Amazon ECS 上的隨需任務與 Fargate Spot 任務都有配額。每個服務配額的計算範圍,亦涵蓋您在 Fargate 上執行的所有 Amazon EKS Pod。

  • 對於在 Amazon EC2 執行個體上執行的任務,每個叢集可註冊的 Amazon EC2 執行個體數量上限為 5,000 個。如果您搭配 Amazon EC2 Auto Scaling 群組容量提供者使用 Amazon ECS 叢集自動擴展,或者您自行管理叢集的 Amazon EC2 執行個體,則此配額可能會成為部署瓶頸。 Auto Scaling 如果需要更多容量,您可以建立更多叢集或請求提高服務配額。

  • 如果您搭配 Amazon EC2 Auto Scaling 群組容量提供者使用 Amazon ECS 叢集自動擴展,則在擴展服務時,請考慮Tasks in the PROVISIONING state per cluster配額。 Auto Scaling 此配額指每個叢集中處於PROVISIONING 狀態的任務數上限,容量提供者可針對這些任務增加容量。當同時啟動大量任務時,就很容易達到此配額上限。若同時部署數十個服務,每個服務包含數百個任務,就可能出現這種情況。此時,若叢集容量不足,容量提供者需啟動新的容器執行個體來置放這些任務。在容量提供者啟動額外 Amazon EC2 執行個體的同時,Amazon ECS 服務排程器通常會持續平行啟動任務。但由於叢集容量不足,此操作可能會受到限流。隨著新容器執行個體的啟動,Amazon ECS 服務排程器會採用退避與指數限流策略,重試任務置放操作。因此,您可能會遇到部署或擴展時間延長的情況。為避免此情況,您可透過以下任一方式規劃服務部署。一種方式是部署大量無需增加叢集容量的任務,一種方式是保留備用叢集容量以應對新任務啟動。

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

ELB

您可以設定 Amazon ECS 服務使用 ELB 將流量平均分配到任務。如需如何選擇負載平衡器的詳細資訊與建議的最佳實務,請參閱使用負載平衡來分配 Amazon ECS 服務流量

ELB 服務配額

當您擴展工作負載時,請考慮下列 ELB 服務配額。大多數 ELB 服務配額都是可調整的,您可以在 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

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

ELB API 限流

在設定 Amazon ECS 服務使用負載平衡器時,必須先通過目標群組運作狀態檢查,才能將服務視為正常運作。為了執行這些運作狀態檢查,Amazon ECS 會代表您叫用 ELB API 操作。如果您的帳戶中有大量使用負載平衡器設定的服務,您可能會因為特別針對 RegisterTargetDeregisterTarget和 ELB API DescribeTargetHealth 操作的潛在限流而降低服務部署速度。發生限流時,Amazon ECS 服務事件訊息中會發生限流錯誤。

如果您遇到 AWS Cloud Map API 限流,您可以聯絡 支援 以取得有關如何提高 AWS Cloud Map API 限流限制的指導。如需有關監控及疑難排解此類限流錯誤的詳細資訊,請參閱因應 Amazon ECS 限流問題

彈性網路介面

隨著任務使用 awsvpc 網路模式,Amazon ECS 會為每個任務佈建唯一的彈性網路介面 (ENI)。當您的 Amazon ECS 服務使用 ELB 負載平衡器時,這些網路介面也會註冊為服務中定義之適當目標群組的目標。

彈性網路介面服務配額

當您執行使用 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

對於託管在 Amazon EC2 執行個體上的 Amazon ECS 工作負載,當執行使用 awsvpc 網路模式的任務時,建議考量 Maximum network interfaces 服務配額,即每個 Amazon EC2 執行個體的網路執行個體數量上限。此配額會限制可在執行個體上置放的任務數量。此配額無法調整,就業未於 Service Quotas 主控台中提供。如需詳細資訊,請參閱 Amazon EC2 User Guide 中的 IP addresses per network interface per instance type

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

彈性網路介面 API 限流

在執行使用 awsvpc 網路模式的任務時,Amazon ECS 會調用下列 Amazon EC2 API。每個 API 皆設有不同的 API 限流。如需詳細資訊,請參閱 Amazon EC2 API Reference 中的 Request throttling for the Amazon EC2 API

  • 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 限流限制的指引。如需有關監控及疑難排解限流錯誤的詳細資訊,請參閱因應限流問題

AWS Cloud Map

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

AWS Cloud Map 服務配額

當 Amazon ECS Tasks per service 服務設定為使用服務探索或 Service Connect 時,服務任務數量上限的配額會受到 AWS Cloud Map Instances per service該服務執行個體數量上限的服務配額影響。具體來說, AWS Cloud Map 服務配額會將每個服務可執行的執行個體數減少到最多 1,000 個。您無法變更 AWS Cloud Map 配額。如需詳細資訊,請參閱 AWS Cloud Map 服務配額

AWS Cloud Map API 限流

Amazon ECS 會代表您呼叫 ListInstancesRegisterInstanceGetInstancesHealthStatusDeregisterInstance 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 限流問題