1

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

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

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

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

4

1 回答 1

0

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

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

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

于 2019-05-17T08:35:45.863 回答