如何解決 Elastic Beanstalk 中的 API 限流或「超過速率」錯誤?

1 分的閱讀內容
0

如何解決使用 AWS Elastic Beanstalk 時出現的 API 限流或「超過速率」錯誤?

簡短描述

對任何 AWS 服務的 API 呼叫不得超過每秒允許的最大 API 請求率。該限制在每個帳戶和每個 AWS 區域的所有資源之間共享。

無論呼叫是來自應用程式、AWS Command Line Interface (AWS CLI) 或 AWS 管理主控台都沒關係。如果 API 請求超過每秒的最大速率,您會收到「超過速率」錯誤,且後續的 API 呼叫會受到限流。某些 API 呼叫每秒可進行數十次,而其他 API 呼叫則限制為每秒允許幾次呼叫。

注意: 如果您在執行 AWS CLI 命令時收到錯誤訊息,請確認您使用的是最新版本的 AWS CLI

您可能會從直接對 Elastic Beanstalk 進行的 API 呼叫,以及由 Elastic Beanstalk 管理的其他 AWS 服務 (例如 AWS CloudFormation、Amazon Elastic Compute Cloud (Amazon EC2)、Auto Scaling 和 Load Balancing) 收到錯誤。隨著帳戶使用量的增加或您向同一帳戶新增更多資源,限流的風險也會增加。

**注意:**由於我們的服務會根據負載進行調整,因此呼叫限制可能因一天中的不同時間而異。最佳做法是動態調整使用 API 的速率,以適應動態限制行為。

解決方案

若要防止出現或解決「超過速率」錯誤和限流,請嘗試以下解決方案:

尋找高 API 呼叫的來源

  1. 在 Elastic Beanstalk 事件串流中,確定限流錯誤。請注意收到錯誤時的時間範圍。或者,如果 API 呼叫來自應用程式或指令碼,請在應用程式日誌中尋找時間範圍。

  2. 對於在時間範圍內所找到發生 RequestLimitExceeded 錯誤的請求,請使用 AWS CloudTrail 檢視事件並驗證 eventNameeventSource (該服務) 和 userAgent。將 Elastic Beanstalk 事件或日誌中錯誤的時間戳記與 CloudTrail 中發現的錯誤進行比對。這有助於了解帳戶中的哪個來源消耗最多的 API 呼叫。

注意: 手動計算 CloudTrail 的記錄可能很困難。您也可以透過 CloudTrail 使用 Athena 查詢

Amazon CloudWatch 使用量指標可協助您監控一段時間內的 API 使用量。請注意,目前的使用量指標並不支援所有服務和 API 呼叫。

第三方應用程式可以連續呼叫 Elastic Beanstalk 或由 Elastic Beanstalk 管理的其他 AWS 服務。如果您授予第三方應用程式在您的帳戶中進行 API 呼叫的權限,請確保您同時也監控這些 API 呼叫。

依照最佳實務減少 API 使用量

使用錯誤重試、指數退避和抖動來協助限制 API 呼叫的速率。雖然每個 AWS 開發套件都實作自動重試邏輯和指數退避演算法,但如果預設重試邏輯不足,您可能需要調整開發套件組態設定以符合需求。

注意: 開發套件設定只是需要考慮的一部分。呼叫開發套件時,您自己的程式碼也應該使用退避、重試和抖動邏輯。

如果您有一個自訂指令碼每秒進行 API 呼叫,請考慮是否有必要。對於進階使用案例,請考慮建立快取層以減少 API 使用量。您也可以考慮使用多帳戶策略。最佳實務是避免單一 AWS 帳戶變得過大。將開發或測試資源與生產資源分開,可以防止開發資源從生產資源取走 API 使用量。

請求提高 API 呼叫速率限制的值

如有需要,您可以請求提高 API 呼叫速率限制的值。這些限制比典型的資源型限制更難提高,並需要強而有力的使用案例理由。我們的團隊將審核您的 API,並確保其遵循最佳實務。如有任何需要,應提前提出請求。

申請提高限制時,請提供以下資訊:

  • 您的 AWS 區域和與限流問題相關的時間範圍
  • 您使用的 API 呼叫和所需的呼叫率
  • 詳細的使用案例理由,例如業務需求和技術需求的增加

在發送請求之前,請務必嘗試使用錯誤淘汰、指數退避和抖動。在請求中包含這些嘗試的結果,以及與嘗試相關的任何資訊。


相關資訊

AWS 中的錯誤重試和指數退避

指數退避和抖動

使用 AWS CloudTrail 記錄 Elastic Beanstalk API 呼叫

CloudWatch 使用量指標

使用多個 AWS 帳戶的好處

AWS 官方
AWS 官方已更新 2 年前