簡體   English   中英

如何在多個 S3 通知上僅觸發一次 AWS Lambda

[英]How to trigger AWS Lambda just once on multiple S3 notifications

我們正在設計一個管道。 我們得到一些進入 S3 存儲桶的原始文件,然后我們應用一個模式,然后將它們保存為 parquet。

到目前為止,我們正在為每個寫入的文件觸發 lambda function,但理想情況下,我們希望僅在寫入所有文件后才開始此過程。 我們怎樣才能觸發 lambda 一次?

我鼓勵您使用一種替代方案,以保持發布者(無論誰在寫作)和訂閱者(您)之間的分離。 出版商會告訴你什么時候寫的; 您有責任選擇何時處理這些事情。 這里的簡潔模式是讓發布者分批編寫其文件並發布清單供您觸發:即一個列表,上面寫着“我剛剛寫了所有這些東西,你可以在這些地方找到它們”。 由於您沒有該/無法更改發布者,因此我建議以下內容:

  1. 將通知從發布者發送到SQS 隊列

  2. 安排您的 lambda 按計划運行; 多久取決於您願意延遲攝入多長時間。 如果您希望數據在發布和被系統攝取之間最多延遲 5 分鍾,請將 lambda 設置為每 4 分鍾觸發一次。 您可以為此使用 Cloudwatch 通知。

  3. 當您的 lambda 運行時,輪詢隊列。 繼續前進,直到您累積最大數量的通知 X,您想在一個 go 中處理,或者隊列為空。

  4. 過程。 如果停止輪詢時隊列不為空,則立即觸發另一個 lambda 執行。

以上注意事項:

  1. 如所寫,它不是並行的,因此如果您的 lambda 執行速度比隊列填滿的速度慢,您需要 1. 更頻繁地運行或 2. 插入負載平衡步驟:lambda 是按計划觸發,輪詢隊列,並根據需要調用盡可能多的處理 lambda,以便每個都收到 X 通知。

  2. 一般的 SNS 和 SQS 非 FIFO 隊列具體不保證完全一次交付。 他們可以向您發送重復的通知。 確保您可以干凈地處理重復處理。

將您的 Lambda 連接到 Webhook(API 網關),然后在您的客戶端應用程序完成后從您的客戶端應用程序調用它。

解決方案:

  1. Zip 所有文件一起, Lambda 解壓
  2. 創建一個UI代碼並一個一個發送文件,發送最后一個時從它觸發lambda
  3. Lambda 檢查文件,如果沒有找到所有文件,靜默退出。 如果找到所有文件,則在一個線程中處理所有文件

暫無
暫無

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

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