【问题标题】:Scheduled jobs using AWS Lambda使用 AWS Lambda 的计划作业
【发布时间】:2019-10-04 11:37:13
【问题描述】:

我有几个由其他应用程序的事件触发的 AWS lambda 函数,例如通过运动。其中一些事件应该触发另一个时间发生的事情。例如,考虑在事件 X 发生 24 小时后向用户发送提醒/通知电子邮件的情况。

我之前曾使用 lambda 函数,通过在运行时动态创建 CloudWatch“cron”规则来调度其他 lambda 函数,但我现在正在重新审视我的旧设计并考虑这是否是最佳方法。设置调度其他 lambdas 的 lambdas 有点乏味,因为除了提交以新 lambda 为目标的 CW 规则之外,我还必须处理运行时授予调用的 lambda 权限以由新的 CW 规则触发。

所以我正在考虑的另一种方法是通过将作业添加到数据库表中来提交要完成的作业,具有给定的执行时间,然后每 x 分钟运行一个 CW cron 规则,检查数据库是否有到期作业.这降低了 CW 规则的复杂性(仅需要一个静态规则)、lambda 权限(也是静态的)等,但增加了额外数据库表等的复杂性。另一个区别是,虽然旧设计只执行一个执行一个“作业”每次调用,此设计可能会在同一次调用中执行 100 个待处理作业,我不确定这是否会导致超时问题等。

有没有人成功实现过类似的东西?你选择了什么方法? 我知道还有其他服务,例如 AWS Batch,但这对于安排简单任务(例如在事件 t 发生后发送电子邮件)似乎有点过头了,因为据我所知,它没有支持简单的 lambda 作业。 SQS 也支持定时消息,但最多只能发送 15 分钟,因此在 24 小时内安排某事似乎没有用。

【问题讨论】:

    标签: amazon-web-services aws-lambda amazon-cloudwatch aws-batch


    【解决方案1】:

    一个有趣的替代方法是使用 AWS Step Functions 在给定延迟后触发 AWS Lambda 函数。

    Step Functions 有一个等待状态,可以安排或延迟执行,因此您可以实现一个相当简单的 Step Functions 状态机,在调用 Lambda 函数之前放置一个延迟。不需要数据库!

    有关概念的示例(略有不同,但足够接近),请参阅:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-07-15
      • 2018-07-14
      • 2021-08-15
      • 2017-01-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多