我需要用亚马逊工具构建"任务调度程序"。主要问题是我需要以巨大的延迟执行任务一次(可能是几个小时或几周(。
我尝试研究如何使用CloudWatch和Lambda函数构建它。据我了解 - 我需要为一次超时执行使用单独的规则。但 AWS 只允许我 100 个规则/账户。
可能我走错了路,这个工具不适合我的任务。
我也尝试了 SQS,但它不允许我设置超时超过 15 分钟。最简单的方法 - 使用自己的 mircoservice 和 crone,但我希望可以在云中做到这一点(
可能有人有同样的问题,可以与我分享有关实施的想法?
CloudWatch 规则应该有效,您可以对事件计划使用 cron 表达式。
我建议您使用disque来延迟消息/重试,并使用apscheduler(python(来调度任务。
您也可以将 disque 用作集群。
您可以根据您的使用案例将这两个放在 ec2 机器中。
如果您需要任何帮助,请告诉我!
为此,您可以使用 AWS Step Functions Wait State。我自己没有使用过它,但似乎您可以定义一个状态机,其中 lamdba 函数的结果可用于确定等待下一步函数的时间。
或者,我的 API https://posthook.io 能够在特定时间向定义的端点发出 HTTP POST 请求。
正如之前有人指出的那样,您可以使用 AWS step 函数,这是一个示例定义,它将在指定的时间段内延迟 lambda 执行。您可以从云监视事件规则目标或事件桥接触发此步骤功能
{
"Comment": "An example of the Amazon States Language using wait states",
"StartAt": "wait_using_seconds",
"States": {
"wait_using_seconds": {
"Type": "Wait",
"Seconds": 450, // time to delay
"Next": "FinalState"
},
"FinalState": {
"Type": "Task",
"Resource": "arn:aws:lambda:<region>:<account-name>:function:<function-name>",
"End": true
}
}
}
如果您有使用AWS以外的云提供商的灵活性,Google Cloud Tasks API可以提供您正在寻找的功能。有一个简单的演示 Web 服务使用此 API 构建 https://delayedrequest.com