我想将AWS Lambda用作社交媒体帖子调度程序,但我找不到一种优雅的方法。在我们的应用中,用户可以创建社交媒体帖子并设置时间。然后,我们会在指定的时间通过社交网络的API发布它们。
我需要能够安排一个Lambda在预定的时间运行一次,并使用唯一的数据(作为用户的标记和帖子的主体)来完成它。这是一个例子:
John希望在下周四下午2点发布到Twitter。他预定了一个 帖子与身体“你好世界!”那段时间通过我们的网络应用程序。该 应用程序将通过API与AWS Lambda通信并设置Lambda函数 下周四下午2点开火一次。该函数将触发请求 使用John的令牌和正文(“Hello world!”)来获取Twitter API。
很想能够用Lambda做这个无服务器,但我找不到一个好方法。如果您可以将Cloudwatch预定事件触发器与唯一有效负载配对,那可能会有效,但我不认为这是可能的。否则,似乎这需要为每个帖子创建一个新的Lambda函数,其中数据是硬编码的,或者让Lambda命中数据库以查找计划的帖子。创建潜在的数百个定制Lambda函数似乎是一个巨大的混乱,并且在Lambda运行时命中数据库似乎是对数据库的过度压力,因为我们拥有在我们安排时手头需要的所有数据。
有关如何使用Lambda实现此目的的任何建议?是否有另一个更适合该任务的AWS服务?我应该放弃无服务器,只需设置另一个EC2实例来处理调度程序吗?
答案 0 :(得分:3)
您绝对不想为每个计划任务创建一个功能+事件。
执行此操作的可扩展方法是安排单个函数定期运行(例如每小时)并检查数据库以查看是否有任何帖子安排在最后一小时(即自上次运行以来),并执行它们如此。
我建议使用数据库的原因是因为您需要管理您的状态(即后期负载/详细信息)某处,并且依赖CloudWatch Events这是不正确的方法,由于您在问题中列出的所有原因。
数据库的替代方案是将有效负载放在S3中,并使调度函数检查需要处理的有效负载的特定位置/存储桶。 Lambda到S3通信非常快,您不必担心负载或网络传输。
答案 1 :(得分:1)
您可以使用AWS Step Functions执行此任务。通过这些,您可以建模状态机,等待触发的确切时间戳。
https://aws.amazon.com/step-functions/
唯一的缺点是,文档仍然很少,但如果您登录AWS控制台,他们会提供一些示例来说明如何实现这些等待过程。