【发布时间】:2019-04-04 21:49:40
【问题描述】:
我正在尝试构建一个调用 AWS lambda 的流程,然后该流程利用 AWS SNS 发送触发更多 lambda 的消息。每个此类触发的 lambda 都会将输出文件写入 S3。流程如下图-
我的问题是——我怎么知道所有的 lambda 表达式都写完文件了?我想执行另一个收集所有这些文件并进行合并的进程。我可以想到两种明显的方法 -
- 持续监控 s3 中与 SNS 消息一样多的输出文件。一旦总数达到,调用最终的合并 lambda。
- 使用数据库作为同步源,为该特定作业/会话写入计数并持续监控它,直到计数达到 SNS 消息计数。
这两种解决方案都需要不断轮询,我想避免这种情况。我想以事件驱动的方式做到这一点。我希望 Amazon SQS 能够通过某种“空队列 lambda 触发器”来拯救我,但 SQS 仅支持 lambdas 触发新消息。在 AWS 中是否有任何已知的方法可以以事件驱动的方式实现这一目标?非常感谢您的建议/cmets/答案。
【问题讨论】:
-
AWS Step Functions.
-
还有其他选择吗?
-
如果您事先知道事物的数量,您可以在 DynamoDB 中初始化一个计数器,然后在工作完成时自动递减它。使用 DynamoDB Streams 在计数器发生突变时触发 Lambda 调用,并在计数器达到零时触发您的下一个阶段(或工作结束)。我没有亲自实施,但可能值得研究。
-
@jarmod DynamoDB Streams 上的触发器似乎在创建新记录时可用。当计数器达到零时,似乎没有办法触发事件。我认为最好的解决方案是 SQS 队列清除事件,但不幸的是,SQS 没有提供任何此类事件触发器!。
-
每当应用程序创建、更新或删除表中的项目时,DynamoDB Streams 都会写入一条流记录。
标签: java amazon-web-services architecture aws-lambda amazon-sqs