簡體   English   中英

我可以限制 AWS Lambda 的並發調用嗎?

[英]Can I limit concurrent invocations of an AWS Lambda?

我有一個 Lambda function 由 PUT 觸發到 S3 存儲桶。

我想限制這個 Lambda function 以便它一次只運行一個實例——我不希望兩個實例同時運行。

我已經查看了 Lambda 配置和文檔,但看不到任何明顯的內容。 我可以編寫自己的鎖定系統,但如果這已經是一個已解決的問題,那就太好了。

如何限制 Lambda 的並發調用數?

我建議你使用Kinesis Streams (或者DynamoDB + DynamoDB Streams ,它們基本上具有相同的行為)。

您可以將Kinesis Streams視為隊列 好的部分是你可以使用Kinesis Stream作為Lambda函數的觸發器 因此,插入此隊列的任何內容都將按順序自動傳遞給您的函數。 因此,您將能夠逐個處理這些S3事件 ,一個Lambda執行一個接一個地執行 (一次一個實例)。

為此,您需要創建一個Lambda函數,其簡單目的是獲取S3 Events並將它們放入Kinesis Stream中 然后,您將Kinesis Stream配置為Lambda觸發器

事件流程

當您將Kinesis Stream配置為Lambda觸發器時,我建議您使用以下配置:

  • 批量大小:1
    • 這意味着使用Kinesis中的 一個事件調用您的Lambda 您可以選擇更高的數字,然后您將獲得該大小的事件列表(例如,如果您要在一個Lambda執行中處理最后10個事件而不是10個連續的Lambda執行)。
  • 起始位置:修剪地平線
    • 這意味着它將表現為隊列( FIFO

有關AWS May網絡研討會系列的更多信息- 使用Amazon Kinesis和AWS Lambda進行流數據處理

我希望這可以幫助任何有類似問題的人。

PS請記住, Kinesis Streams有自己的定價 使用DynamoDB + DynamoDB流可能會更便宜(甚至免費,因為DynamoDB的非過期免費層 )。

不,這是我非常希望看到Lambda支持的事情之一,但目前還沒有。 其中一個問題是,如果發生了大量的S3 PUT操作,AWS必須以某種方式排隊所有Lambda調用,並且目前不支持這種情況。

如果您在Lambda函數中構建了一個鎖定機制,那么對於由於鎖定而未處理的請求,您將如何處理? 你會把那些S3通知扔掉嗎?

大多數人建議的解決方案是讓S3將通知發送到SQS隊列,然后將Lambda函數安排為定期運行,例如每分鍾一次,並檢查隊列中是否有需要處理的項目。

或者,讓S3將通知發送到SQS並且只有一個t2.nano EC2實例,其中單線程服務輪詢隊列。

我知道這是一個舊線程,但我遇到了它試圖弄清楚如何確保我的時間排序的 SQS 消息按順序處理,從 FIFO 隊列中出來,而不是通過多個 Lambda 同時/亂序處理線程運行。

根據文檔:

對於 FIFO 隊列,Lambda 按照接收消息的順序將消息發送到您的 function。 當您將消息發送到 FIFO 隊列時,您指定了一個消息組 ID。 Amazon SQS 確保同一組中的消息按順序傳遞到 Lambda。 Lambda 將消息分組,一次只發送一批。 如果您的 function 返回錯誤,則 function 會在 Lambda 收到來自同一組的其他消息之前嘗試對受影響的消息進行所有重試。

您的 function 可以並發擴展到活動消息組的數量。

鏈接: https://docs.aws.amazon.com/lambda/latest/dg/with-sqs.html

所以基本上,只要您使用 FIFO 隊列並提交需要使用相同 MessageGroupID 保持順序的消息,SQS/Lambda 會自動處理排序,無需任何額外設置。

讓S3“Put events”導致消息放在隊列中(而不是涉及lambda函數)。 該消息應包含對S3對象的引用。 然后安排一個lambda到“SHORT POLL整個隊列”。

PS: S3事件不能觸發Kinesis Stream ...只有SQS,SMS,Lambda(參見http://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html#supported-notification-destinations )。 Kinesis Stream價格昂貴,用於實時事件處理。

暫無
暫無

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

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