我正在使用无服务器模型编写服务器,目前是 aws lambda。并要求在准确的日期时间运行作业
目前我正在使用 aws cloudwatch 运行一个 cron 作业,每分钟执行一次我的服务器,找到所有时间戳早于当前的任务,然后执行这些任务。这既浪费时间,又有时会比实际需要的时间延迟或提前一分钟(因为 cloudwatch 的最大频率只有每分钟 1 个 ping)。这不是一个理想的方法
而且每天的工作也不一样。客户端可以使用动态日期时间来 ping 我的服务器
我希望应该有一些像消息队列一样的服务,但可以根据调度时间戳主动调用目标 URL。有这样的事吗?如果可以放置请求的 URL,它可以是 aws 之外的任何服务
非常感谢
您是否考虑过获得小型 EC2 实例,然后在那里设置 cron 作业?然后它可以将事件发布到 SNS 或直接调用所需的任务。而且您还应该能够动态安排新作业。
为此,您可以将 DynamoDB 与 TTL、DynamoDB Streams 和 AWS Lambda 结合使用。
由于计划是动态的并且来自用户,因此您可以将这些项目保存在 DynamoDB 表中,并将其 TTL 设置为计划的执行时间。
当某个项目达到 TTL 时,它将创建一个 DynamoDB 流,然后您可以使用它来触发 Lambda 函数。
参考文献:
作为解决方法,为什么不让 lambda 在 Cloudwatch 警报上唤醒,然后每 5 秒检查一次任务,直到 55 秒过去?
您可能已经找到了解决方案,但我的服务 https://posthook.io 可能非常适合您的用例。它可以让您通过 API 调用来安排“挂钩”,如下所示:
curl https://api.posthook.io/v1/hooks \
-H 'X-API-Key: ${POSTHOOK_API_KEY}' \
-H 'Content-Type: application/json' \
-d '{
"path": "/webhooks/ph/event_reminder",
"postAt": "2018-07-03T01:11:55Z",
"data": {
"eventID": 25
}
}'
然后,在 lamdba 函数中,您可以使用以
data
形式传入的数据或 hook
的唯一 ID 在数据库中查找内容并执行所需的工作。免费帐户允许您每月安排 500 个此类请求。
其他解决方案似乎很有希望,但我发现了另一种解决方案
使用步骤函数等待状态
http://docs.aws.amazon.com/step-functions/latest/dg/amazon-states-language-wait-state.html
我还不能在我的区域使用它,因为我的区域是新加坡,它不能跨区域使用。目前我会尝试查看上面的 dynamodb 解决方案
截至 2018 年,步进功能已普遍可用并按预期工作
截至 2018 年,出现了 Azure 逻辑应用程序。与 azure 上的 aws step 函数等效的服务。它包含延迟连接器,可以安排延迟时间
https://learn.microsoft.com/en-us/azure/connectors/connectors-native-delay
另一种解决方案是使用 EventBridge 调度程序 - https://docs.aws.amazon.com/scheduler/latest/UserGuide/schedule-types.html#one-time