簡體   English   中英

使用 API 網關和無服務器框架在 AWS Lambda 上超過了速率

[英]Rate Exceeded on AWS Lambda Using API Gateway and serverless framework

當我嘗試調用具有 HTTP 事件的方法時,它會導致500 Internal server error

在 CloudWatch 日志上,它顯示Recoverable error occurred (Rate Exceeded.)Recoverable error occurred (Rate Exceeded.)

當我嘗試調用一個沒有 lambda 的函數時,它會隨着響應執行。

這是我的無服務器配置:

配置

您已將 Lambda 的reservedConcurrency設置為 0。這將阻止您的 Lambda 被調用。 當您的函數被調用時,將其設置為 0 通常很有用,但您不確定原因並想立即停止它。

如果要調用它,請將reservedConcurrency更改為正整數(默認情況下,它可以是 <= 1000 的正整數,但您可以通過聯系 AWS 來增加此限制)或簡單地從 .yml 文件中刪除reservedConcurrency屬性,如它將使用默認值。

為什么要使用reservedConcurrency呢? 好吧,假設您的 Lambda 函數是由來自 API Gateway 的請求觸發的。 假設您每秒收到 400 個(高峰時間)請求,並且在每次請求時,都會觸發另外兩個 Lambda 函數,一個用於為給定圖像生成縮略圖,另一個用於在 DynamoDB 中插入一些元數據。 理論上,您將有 1200 個同時運行的 Lambda 函數(假設您的所有 Lambda 函數都在不到一秒的時間內完成它們的執行)。 這會導致限制,因為 Lambda 函數的默認並發執行是 1000。但是縮略圖生成是否與來自 API Gateway 的請求一樣重要? 很可能不是,因為它自然是最終一致的任務,因此您可以將縮略圖 Lambda 上的reservedConcurrency設置為僅 200,這樣您就不會用完並發,這意味着其他函數將能夠啟動以執行更有用的操作給定時間點(在我們的示例中,接收 HTTP 請求比生成縮略圖更重要)。 剩下的 800 個並發可以在 API Gateway 觸發的函數和將數據插入 DynamoDB 的函數之間拆分,從而防止對重要內容進行節流並保持不那么重要的內容最終保持一致。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM