AWS lambda顺序调用相同的函数



我的数据库中有近1000个项目。我必须对每个项目执行相同的操作。问题是,这是一个第三方服务,每个操作都有1秒的速率限制。直到现在,我都能在lambda函数中完成所有的事情。现在已接近15分钟(900秒)的超时限制。

我想知道分割这个的最好方法是什么。我可以将每个项目(或批量项目)转储到SQS中并使用lambda函数顺序处理它们吗?但据我所知,这不是推荐的方法,因为我无法将调用延迟足够长的时间。或者我必须在lambda中调用lambda,这听起来也很奇怪。

AWS步进函数是这里的方法吗?我还没有使用过这项服务,所以我想知道是否还有其他选择。如果它有任何意义,我也使用无服务器框架来做这件事。

您提到的两种方法都是可以工作的选项。在lambda中,您可以在处理一个项目后添加延迟(睡眠),然后在延迟之后触发另一个lambda调用。当然,如果您使用这种方法,您将为此付出代价,因此阶跃函数可能是一种更优雅的解决方案。一个lambda当然可以调用另一个lambda——甚至调用自己。如果异步调用下一个lambda,则初始函数将在新调用的函数开始运行时完成。这篇关于异步调用的文章将对这种方法有所帮助。从本质上讲,每个lambda调用将负责处理一个项,充分延迟以适应服务限制,然后调用下一个项。

如果出现任何问题,您将希望构建适当的异常处理,因此一个项目的问题要么停止其余部分,要么允许链的其余部分继续,这取决于适合您的用例。

<<p>步骤功能/strong>也可以很好地处理这个用例。使用Wait和循环等选项可以达到相同的效果。例如,您的步骤函数流可以调用一个lambda来处理一个项目并返回下一个项目,然后它可以运行一个等待步骤,然后处理下一个项目,以此类推,直到您到达结束。您可以使用运行lambda任务和等待任务的Map:

Map状态("Type": "Map")可用于运行一组步骤输入数组的每个元素。并行状态执行时使用相同输入的步骤的多个分支,Map状态将对处于状态的数组的多个条目执行相同的步骤输入。

这篇关于使用Lambda迭代循环的文章也很有用。

如果您希望以串行方式处理消息并乐意将消息转储到sqs,则设置并发性batchsize触发函数到1的sqs事件属性

使它成为一个FIFO队列,这样消息就不会被处理超过一次,如果这是重要的。

最新更新