我有几个AWS lambda函数由其他应用程序的事件触发,例如通过Kinesis。其中一些事件应触发其他时间发生的事情。例如,考虑自事件X发生24小时后,向用户发送有关某事的提醒/通知电子邮件的情况。
我以前使用过通过运行时动态创建CloudWatch“ cron”规则来调度其他lambda函数的lambda函数,但是我现在正在重新审视我的旧设计并考虑这是否是最佳方法。设置安排其他Lambda的Lambda有点麻烦,因为除了以新Lambda作为目标提交CW规则外,我还必须处理由新CW规则触发的调用Lambda权限的运行时授予。
因此,我正在考虑的另一种方法是提交作业,方法是将作业添加到具有给定执行时间的数据库表中,然后每隔X分钟运行一条CW cron规则,以检查数据库是否有应有的作业。这降低了CW规则(仅需一条,需要静态规则),lambda权限(也为静态)等的复杂性,但增加了附加数据库表等的复杂性。另一个区别是,旧设计仅执行一个执行了一个“作业”每次调用,此设计都可能在同一调用中执行100个待处理的作业,但我不确定这是否会导致超时等问题。
有人成功实现了类似的东西吗?您选择哪种方式?
我知道也有其他服务,例如AWS Batch,但是这对于调度简单任务(例如,自事件t
发生时间e
起经过时间{{1}}之后发送电子邮件来说似乎是过大的,因为据我所知它不支持简单的lambda作业。 SQS还支持定时消息,但最多只能支持15分钟,因此似乎无法在24小时内安排某些时间。
答案 0 :(得分:0)
一个有趣的替代方法是在给定的延迟后使用 AWS Step Functions 触发AWS Lambda函数。
Step Functions具有可以调度或延迟执行的Wait状态,因此您可以实现一个相当简单的Step Functions状态机,该状态机在调用Lambda函数之前设置了延迟。不需要数据库!
有关概念的示例(略有不同,但足够接近),请参见: