我想弄清楚什么是5小时后调用aws lambda函数的最佳方法.我有另一个lambda函数可以发出多个检索作业来从aws冰川中取出物品,我需要一个解决方案,一旦它们被检索,就会对每个物品运行另一个lambda函数,大约5个小时.我正在考虑使用sns但是想知道是否还有其他方法.任何输入都表示赞赏.
Ioa*_*kos 11
我觉得基于 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');
}
Run Code Online (Sandbox Code Playgroud)
执行队列:将执行队列作为触发器添加到您的 Lambda(您要调度)。
然后,要安排您的 lambda,您只需将消息发布到等待队列。
消息将进入等待队列,在那里它将被错误输出 lambda 使用。它将 tgen 放在等待队列中,直到其可见性超时,并将被推送到死信执行队列以供您计划的 lambda 提取。
除了使用CloudWatch之外,您的另一种有趣的方法是使用AWS Step Functions:
通过设置固定周期(或者如果向状态机提供输入数据,甚至是动态周期)来使用等待状态:
{
"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
}
}
}
Run Code Online (Sandbox Code Playgroud)或者,您可以在任务状态中使用单独的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:CheckJob",
"End": true
}
}
}
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
3797 次 |
| 最近记录: |