如何對 Lambda 函數限流的「速率超出」和 429 "TooManyRequestsException" 錯誤進行疑難排解?

1 分的閱讀內容
0

我的 AWS Lambda 函數正在產生「速率超出」和 429 "TooManyRequestsException" 錯誤。

解決方法

Lambda 函數有時會受到限流,以保護您的資源和下游應用程式。即使 Lambda 自動擴展以適應傳入流量,但是您的函數仍然會因各種原因受到限流。

若要對 Lambda 限流問題進行疑難排解,包括速率超出TooManyRequestsException 錯誤,請檢閱下列步驟。

確認哪些資源受到限流

限流錯誤可能不是來自您的 Lambda 函數。在函數調用期間,API 呼叫也可能會進行限流。

若要確認哪些資源受到限流,請檢查下列資源。

檢查您的 Amazon CloudWatch Logs 以查看是否存在限流錯誤,但 Lambda 限流指標中沒有對應的資料點

如果沒有 Lambda 限流指標,則 Lambda 函數程式碼中的 API 呼叫正在進行限流。

檢查您的函數程式碼是否有任何限流的 API 呼叫

如果特定 API 呼叫受到限流,請確保您在程式碼中使用指數退避來重試 API 呼叫。

**注意:**如果您需要更高的每秒交易數 (TPS) 配額來進行 API 呼叫,則請求增加服務配額。並非所有配額都可調整。

檢查函數的並行指標

在 Amazon CloudWatch 中檢閱您的 Lambda 指標

在您看到限流的 AWS 區域中,檢查函數的 ConcurrentExecutions 指標。

比較相同時間戳記的 ConcurrentExecutions 指標與「限流」指標

檢視 ConcurrentExecutions上限統計資料限流總和統計資料。查看上限 ConcurrentExecutions 是否接近您在該區域中的帳戶層級並行數量配額,以及限流圖表中的對應資料點。

檢查您是否超過特定 AWS 區域的初始爆量並行配額

在 CloudWatch 主控台中 Lambda 的指標頁面上,將圖表的時間範圍縮短為 1 分鐘。如果您受到爆量擴展限制,則會在圖表上看到與 ConcurrentExecutions 階梯模式對應的限流激增。

**注意:**若要解決爆量並行限制,您可以設定佈建的並行

檢查函數的持續時間指標峰值

並行取決於函數持續時間。如果您的函數程式碼需要很長時間才能完成,則可能沒有足夠的運算資源。

嘗試增加函數的記憶體設定。然後,使用 AWS X-RayCloudWatch Logs 隔離持續時間增加的原因。

**注意:**變更記憶體設定可能會影響執行時間所產生的費用。

您可以將函數新增至 Amazon Virtual Private Cloud (Amazon VPC)。當函數位於 Amazon VPC 中時,請參閱如何讓網際網路存取連線到 Amazon VPC 的 Lambda 函數?

檢查函數的「錯誤」指標是否增加

錯誤增加可能會導致重試並導致調用整體增加。增加的調用可能導致並行增加。使用 CloudWatch Logs 來識別和消除錯誤,並讓您的函數程式碼處理例外狀況。

**注意:**您的函數也可以根據每個區域的調用請求數 (每秒請求數) 進行限流,這是並行執行數配額的 10 倍

設定預留並行

確認您在函數上設定了預留並行

使用 Lambda 主控台 檢查預留並行的設定。如果未設定預留並行,則函數會使用未預留並行。當對函數的調用超過未預留並行時,會發生限流。

**注意:**如果您已設定零保留並行的函數,則該函數會受到限制,因它無法處理任何事件。請確保將該值增加到大於零的數字。

檢閱 CloudWatch 中您函數的上限統計資料

查看函數指標是否在任何時候達到 ConcurrentExecutions 指標的上限值。

將函數的預留並行增加至並行值,以防止函數被限流

使用 Lambda 主控台變更設定,或呼叫 PutFunctionConcurrency API。

在您的應用程式中使用指數退避

若要重試限流的請求,最佳實務是在呼叫 Lambda 函數的應用程式中使用指數退避

使用無效字母佇列

對於非同步事件來源 (例如 Amazon Simple Storage Service (Amazon S3)Amazon EventBridge),請使用無效字母佇列 (DLQ) 設定函數。然後,驗證非同步調用組態的錯誤處理。DLQ 捕捉因持續限流而捨棄的任何事件,並且在您看到大量限流時可以保護您的資料。

**注意:**對於 Amazon Simple Queue Service (Amazon SQS) 事件來源,您必須在 Amazon SQS 佇列上設定 DLQ。

請求增加服務配額

如果您的工作負載需要更高的並行執行的服務配額,請使用服務配額主控台請求增加服務配額


相關資訊

使用 AWS Lambda 函數的最佳實務

對 AWS Lambda 中的調用問題進行疑難排解

AWS Lambda 中的錯誤處理和自動重試

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