處理 Amazon ECS 限流問題 - Amazon Elastic Container Service

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

處理 Amazon ECS 限流問題

調節錯誤分為兩個主要類別:同步調節和非同步調節。

同步限流

同步限流發生時,您會立即收到來自 Amazon ECS 的錯誤回應。當您在執行任務或建立服務時呼叫 Amazon ECS APIs時,通常會發生此類別。如需有關涉及的限流和相關限流限制的詳細資訊,請參閱請求 Amazon ECS API 的限流

當您的應用程式啟動 API 請求時,例如使用 AWS CLI 或 AWS SDK,您可以修復 API 限流。您可以透過建構應用程式來處理錯誤,或實作指數退避和抖動策略搭配 API 呼叫的重試邏輯來執行此操作。如需詳細資訊,請參閱逾時、重試和抖動退避

如果您使用 AWS SDK,則自動重試邏輯是內建且可設定的。

非同步限流

非同步限流的發生原因是非同步工作流程,其中 Amazon ECS 或 AWS CloudFormation 可能代表您呼叫 APIs來佈建資源。請務必了解 Amazon ECS 代您叫用哪些 AWS APIs。例如,針對使用 awsvpc 網路模式的任務叫用 CreateNetworkInterface API,並在對向負載平衡器註冊的任務執行運作狀態檢查時叫用 DescribeTargetHealth API。

當您的工作負載達到相當大的規模時,這些 API 操作可能會受到調節。也就是說,它們可能會受到足夠的調節,以違反 Amazon ECS 或正在呼叫 AWS 服務 的 強制執行的限制。例如,如果您部署數百個服務,每個服務都有數百個使用 awsvpc 網路模式的任務,Amazon ECS 會叫用 Amazon EC2 API 操作,例如 CreateNetworkInterface和 Elastic Load Balancing API 操作,例如 RegisterTargetDescribeTargetHealth,分別註冊彈性網路界面和負載平衡器。這些 API 呼叫可能會超過 API 限制,導致限流錯誤。以下是包含在服務事件訊息中的 Elastic Load Balancing 限流錯誤範例。

{ "userIdentity":{ "arn":"arn:aws:sts::111122223333:assumed-role/AWSServiceRoleForECS/ecs-service-scheduler", "eventTime":"2022-03-21T08:11:24Z", "eventSource":"elasticloadbalancing.amazonaws.com", "eventName":" DescribeTargetHealth ", "awsRegion":"us-east-1", "sourceIPAddress":"ecs.amazonaws.com", "userAgent":"ecs.amazonaws.com", "errorCode":"ThrottlingException", "errorMessage":"Rate exceeded", "eventID":"0aeb38fc-229b-4912-8b0d-2e8315193e9c" } }

當這些 API 呼叫與您帳戶中的其他 API 流量共用限制時,即使它們被發出為服務事件,它們仍可能難以監控。

監控限流

請務必識別哪些 API 請求受到限流,以及誰發出這些請求。您可以使用 AWS CloudTrail 來監控限流,並與 CloudWatch、Amazon Athena 和 Amazon EventBridge 整合。您可以設定 CloudTrail 將特定事件傳送至 CloudWatch Logs。CloudWatch Logs 日誌洞察會剖析和分析事件。這可識別限流事件中的詳細資訊,例如進行呼叫的使用者或 IAM 角色,以及進行的 API 呼叫數量。如需詳細資訊,請參閱使用 CloudWatch Logs 監控 CloudTrail 日誌檔案 CloudWatch

如需 CloudWatch Logs 洞見的詳細資訊,以及如何查詢日誌檔案的指示,請參閱使用 CloudWatch Logs Insights 分析日誌資料

使用 Amazon Athena,您可以使用標準 SQL 建立查詢和分析資料。例如,您可以建立 Athena 資料表來剖析 CloudTrail 事件。如需詳細資訊,請參閱使用 CloudTrail 主控台為 CloudTrail 日誌建立 Athena 資料表

建立 Athena 資料表之後,您可以使用下列 SQL 查詢來調查ThrottlingException錯誤。

user-input 取代為您的值。

select eventname, errorcode,eventsource,awsregion, useragent,COUNT(*) count FROM cloudtrail_table-name where errorcode = 'ThrottlingException' AND eventtime between '2024-09-24T00:00:08Z' and '2024-09-23T23:15:08Z' group by errorcode, awsregion, eventsource, useragent, eventname order by count desc;

Amazon ECS 也會向 Amazon EventBridge 發出事件通知。有資源狀態變更事件和服務動作事件。其中包括 API 限流事件,例如 ECS_OPERATION_THROTTLEDSERVICE_DISCOVERY_OPERATION_THROTTLED。如需詳細資訊,請參閱Amazon ECS 服務動作事件

這些事件可由 等服務取用 AWS Lambda ,以執行動作來回應。如需詳細資訊,請參閱處理 Amazon ECS 事件

如果您執行獨立任務,則 等某些 API 操作RunTask是非同步的,而且不會自動執行重試操作。在這種情況下,您可以使用 等服務 AWS Step Functions 搭配 EventBridge 整合,重試調節或失敗的操作。如需詳細資訊,請參閱管理容器任務 (Amazon ECS、Amazon SNS)

使用 CloudWatch 監控限流

CloudWatch 會在依 AWS 資源下的Usage命名空間上提供 API 用量監控。這些指標會以類型 API 和指標名稱 CallCount 記錄。您可以建立警示,以便在這些指標達到特定閾值時啟動。如需詳細資訊,請參閱視覺化您的服務配額和設定警示

CloudWatch 也提供異常偵測。此功能使用機器學習,根據您啟用指標的特定行為來分析和建立基準。如果有不尋常的 API 活動,您可以將此功能與 CloudWatch 警示搭配使用。如需詳細資訊,請參閱使用 CloudWatch 異常偵測

透過主動監控限流錯誤,您可以聯絡 支援 來提高相關的限流限制,並收到您唯一應用程式需求的指引。