我正在研究使Lambda在给定时间运行一次任务的最佳方法。
我构想的系统基本上将具有需要发送的事件,既可以在接收/创建事件后立即发送,也可以在特定时间发送,也可以重复执行。由于可伸缩性,我想为此尽可能多地使用AWS。
我最初的想法是为事件发送一个AWS SQS队列。然后,我将有一个DynamoDB表用于将来的事件。我还将拥有两个AWS Lambda函数,一个设置是每隔几分钟在cron作业上运行,以从DynamoDB表中获取在接下来的15分钟左右安排的事件,并通过消息将其放入该AWS SQS队列中。计时器设置可延迟该消息在给定时间内可见。第二个Lambda函数将被设置并具有从该AWS SQS队列运行的触发器。该功能将负责实际发送事件。
如果需要在接下来的15分钟内将其发送出去,我可以从那里将事件添加到SQS队列中(带有或不带有消息计时器)。或将其添加到DynamoDB表中,如果将来需要将其发送出去(超过15分钟)。
我刚发现的最大问题是AWS SQS FIFO queues doesn’t support Message Timers on individual messages。我需要一个FIFO队列,因为我需要防止多次发送这些事件,或者两次触发第二个Lambda函数。
我也研究了AWS Lambda cron作业,尽管您可以每5分钟安排一次调用,但是我认为这不是我想要的,因为我希望更多地安排1次并在将来进行扩展。所以我认为这不是我想要的。
关于如何实现此目标的任何想法,因为它看起来并不像Amazon SQS消息计时器可以满足我的工作?