簡體   English   中英

延遲數小時調用 lambda function

[英]invoke lambda function with hours delay

我試圖找出 5 小時后調用 aws lambda function 的最佳方法是什么。 我還有另一個 lambda function 會發出多個檢索作業以從 aws 冰川中抓取物品,我需要一個解決方案來在每個物品被檢索后運行另一個 lambda function,這大約需要 5 個小時。 我正在考慮使用 sns,但想知道是否有其他方法可以解決這個問題。 任何輸入表示贊賞。

除了使用 CloudWatch,另一個有趣的方法是使用AWS Step Functions

  1. 通過設置固定時間段來使用等待狀態(如果您向狀態機提供輸入數據,甚至可以使用動態時間段):

     { "Comment": "An example of the Amazon States Language using wait states", "StartAt": "WaitState", "States": { "WaitState": { "Type": "Wait", "Seconds": 10, "Next": "MyLambda" }, "MyLambda": { "Type": "Task", "Resource": "arn:aws:lambda:REGION:ACCOUNT_ID:function:FUNCTION_NAME", "End": true } } }
  2. 或者,您可以在任務狀態中使用單獨的 Lambda 函數,並結合選擇狀態來檢查其他函數是否應該運行:

     { "Comment": "A state machine that submits a Job to AWS Batch and monitors the Job until it completes.", "StartAt": "Wait X Seconds", "States": { "Wait X Seconds": { "Type": "Wait", "SecondsPath": "$.wait_time", "Next": "Get Job Status" }, "Get Job Status": { "Type": "Task", "Resource": "arn:aws:lambda:REGION:ACCOUNT_ID:function:CheckJob", "Next": "Job Complete?" }, "Job Complete?": { "Type": "Choice", "Choices": [ { "Variable": "$.status", "StringEquals": "RUNNING", "Next": "Wait X Seconds" }, { "Variable": "$.status", "StringEquals": "SUCCEEDED", "Next": "Do Job" } ], "Default": "Wait X Seconds" }, "Do Job": { "Type": "Task", "Resource": "arn:aws:lambda:REGION:ACCOUNT_ID:function:DoJob", "End": true } } }

我覺得基於 cloudwatch 和 step-functions 的解決方案不能很好地擴展,而且它們在代碼方面非常繁重。

我建議創建兩個 SQS 隊列。 一個是等待隊列,另一個是執行隊列。

等待隊列:將執行隊列設置為等待隊列的死信隊列。 將默認可見性超時設置為您希望等待運行 lambda 的時間(最多 12 小時)。 設置最大接收數為 1。創建一個使用 SQS 消息並返回錯誤的 Lambda。 將等待隊列作為觸發器添加到此 lambda。

exports.handler =  async function(event, context) {
  throw new Error('Go back to the waiting queue and wait');
}

執行隊列:將執行隊列作為觸發器添加到您的 Lambda(您要調度)。

然后,要安排您的 lambda,您只需將消息發布到等待隊列。

消息將進入等待隊列,在那里它將被錯誤輸出 lambda 使用。 它將 tgen 放在等待隊列中,直到其可見性超時,並將被推送到死信執行隊列以供您計划的 lambda 提取。

理想的方法是使用 CloudWatch 事件調度 Lambda 函數。 請在此處查看更多詳細信息

如果您願意使用 AWS 生態系統之外的解決方案,請查看https://delayedrequest.com ,這是一個使用 Google Cloud Tasks API 構建的通用延遲 http 請求服務。

暫無
暫無

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

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