處理 Amazon ECS 服務配額和 API 限流限制 - Amazon Elastic Container Service

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

處理 Amazon ECS 服務配額和 API 限流限制

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

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

在 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

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

Elastic Load Balancing 服務配額

當您擴展工作負載時,請考慮下列 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 配額,即目標群組後方的目標數量。

如需詳細資訊,請參閱《Application Load Balancer 使用者指南》中的 Application Load Balancer 配額

Network Load Balancer

您可以向 Network Load Balancer 註冊的目標數量有更嚴格的限制。使用 Network Load Balancer 時,您通常會想要啟用跨區域支援,這會為每個 Network Load Balancer 每個可用區域的目標數量Targets per Availability Zone Per Network Load Balancer上限提供額外的擴展限制。如需詳細資訊,請參閱 Network Load Balancer 使用者指南中的 Network Load Balancer 配額

Elastic Load Balancing API 限流

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

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

彈性網路介面

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

彈性網路介面服務配額

當您執行使用 awsvpc 網路模式的任務時,每個任務都會連接一個唯一的彈性網路界面。如果必須透過網際網路到達這些任務,請將公有 IP 地址指派給這些任務的彈性網路界面。當您擴展 Amazon ECS 工作負載時,請考慮這兩個重要的配額:

  • Network interfaces per Region 配額,這是 中 AWS 區域 您帳戶的最大網路介面數量。

  • Elastic IP addresses per Region 配額,這是 中彈性 IP 地址的最大數量 AWS 區域。

這兩個服務配額都是可調整的,您可以從 Service Quotas 主控台請求提高這些配額。如需詳細資訊,請參閱《Amazon Virtual Private Cloud 使用者指南》中的 Amazon VPC 服務配額Amazon Virtual Private Cloud

對於託管在 Amazon EC2 執行個體上的 Amazon ECS 工作負載,當執行使用 awsvpc 網路模式的任務時,請考慮Maximum network interfaces服務配額,即每個 Amazon EC2 執行個體的網路執行個體數量上限。此配額會限制您可以在執行個體上放置的任務數量。您無法調整配額,且無法在 Service Quotas 主控台中使用。如需詳細資訊,請參閱《Amazon EC2 使用者指南》中的每個執行個體類型的每個網路介面 IP 地址

雖然您無法變更可連接到 Amazon EC2 執行個體的網路介面數量,但您可以使用彈性網路介面中繼功能來增加可用的網路介面數量。例如,根據預設,c5.large執行個體最多可以有三個網路介面。執行個體的主要網路介面視為一個配額。因此,您可以將額外的兩個網路介面連接至執行個體。由於每個使用 awsvpc 網路模式的任務都需要網路界面,因此您通常只能在此執行個體類型上執行兩個這類任務。這可能會導致叢集容量的使用率不足。如果您啟用彈性網路介面幹線,您可以增加網路介面密度,在每個執行個體上放置更多任務。開啟中繼後,c5.large執行個體最多可有 12 個網路介面。執行個體具有主要網路介面,Amazon ECS 會建立 "trunk" 網路介面並將其連接至執行個體。因此,使用此組態,您可以在執行個體上執行 10 個任務,而不是預設的兩個任務。如需詳細資訊,請參閱增加 Amazon ECS Linux 容器執行個體網路介面

彈性網路介面 API 限流

當您執行使用 awsvpc 網路模式的任務時,Amazon ECS 依賴下列 Amazon EC2 APIs。每個 APIs都有不同的 API 調節。如需詳細資訊,請參閱《Amazon EC2 API 參考》中的請求 Amazon EC2 API 的限流Amazon EC2

  • 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 服務設定為使用服務探索或 Service Connect 時,服務任務數量上限的Tasks per service配額會受到 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。當您啟動任務時,它們有助於探索服務並執行運作狀態檢查。當同時使用服務探索與大量任務的多個服務同時部署時,這可能會導致超過 AWS Cloud Map API 限流限制。發生這種情況時,您可能會看到下列訊息:在 Amazon ECS 服務事件訊息Operations are being throttled. Will try again later中,以及較慢的部署和任務啟動速度。 AWS Cloud Map 不會記錄這些 APIs 的限流限制。如果您遇到這些調節,您可以聯絡 支援 以取得提高 API 調節限制的指引。如需監控和疑難排解此類限流錯誤的更多建議,請參閱 處理 Amazon ECS 限流問題