我有檔案上傳到我的 s3 存盤桶中 - 每天兩次,總是 6 個。我正在運行一個相當標準的設定:
- S3 -> SNS -> SQS -> λ
每個 lambda 處理新上傳的檔案,然后將其洗掉。我知道每批檔案的確切數量,但我不能要求客戶端執行任何其他操作(例如 SNS 上的訊息)。
問題:處理所有檔案后執行某個操作的最簡單/最佳方法是什么?
我的想法:
- Step Functions - 不確定如何?
- 如果 s3 專案計數為零(或檢查 sqs 訊息佇列大小?),只需檢查每個 lambda - 不確定之前是否不會出現針對洗掉的競爭條件(是否始終一致)或類似問題?
- 當 SQS 佇列深度為零時 CloudWatch 警報 -> SNS -> lambda - 我想它應該可以作業,不確定正確的指標?
我將不勝感激有關實作它的最佳/最簡單方法的資訊。
uj5u.com熱心網友回復:
如果您確定在 x 點之前,您的所有 6 個檔案都將繼續進行,那么您只需創建一個云手表并將其安排在晚上 11:50,然后根據您的驗證洗掉檔案即可。
uj5u.com熱心網友回復:
您可以使用 S3 存盤桶位置中的檔案數來捕獲“檔案計數”狀態。處理 lambda 在每個檔案添加上運行,但僅在objectCount === 6.
我們如何使用 S3 來跟蹤檔案數?很多可能性,這里有兩種:
選項 1:推遲處理,直到所有 6 個檔案都到達
觸發時OBJECT_CREATED,lambda 計算 S3 物件。如果objectCount < 6lambda 在沒有進一步操作的情況下退出。如果存在 6 個檔案,則處理所有 6 個檔案,洗掉檔案并執行后處理操作。
選項 2:使用 S3 標簽來指示PROCESSED狀態
觸發時OBJECT_CREATED,lambda 處理新檔案并將PROCESSED標簽添加到 S3 物件。然后 lambda 計算帶有PROCESSED標簽的 S3 物件。如果為 6,則洗掉檔案并執行后處理操作。
在任何情況下,都要考慮競爭條件和其他錯誤狀態。這通常是“最好”和“最簡單”有時會發生沖突的地方。
NB Step Functions 可用于將處理步驟鏈接在一起,但它們沒有提供不同的方式來跟蹤檔案計數狀態。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/417393.html
標籤:
