我有一个AWS Lambda,它可以启动(SNS事件)多个lambda,然后又启动(SNS事件)多个lambda。所有这些lambda都将文件写入S3,我需要知道何时已写入所有文件。将有另一个lambda,它将发送最终的SNS消息,其中包含对所生成文件的所有引用。第二组Lambda中的扇出量未知,具体取决于第一个扇出。
如果这是一次扇出,我会知道要查找多少个文件,但由于是2步扇出,所以我不确定如何监视所有文件。有人处理过吗?谢谢。
答案 0 :(得分:0)
我将创建一个DynamoDB表来跟踪此过程。当初始Lambda函数启动时,在表中创建一条记录,并使用唯一ID(例如UUID)或其他名称(如果您对此过程还没有唯一ID)的话。还要将该唯一ID添加到SNS消息中,这将是其他进程执行的所有更新所使用的密钥。此外,在第一个进程创建的splitters_invoked
记录中添加一个正在调用的第二级拆分器功能,并且将splitters_complete
属性设置为0。
在第二级拆分器功能中,您可以使用DynamoDB功能有条件的更新,使用其S3位置创建的文件列表来更新DynamoDB记录。第二级拆分器功能还将使用DynamoDB 原子计数器功能在它们退出之前更新splitters_complete
计数。
在“流程”级别,这些调用中的每一个都会对DynamoDB记录执行另一个条件更新,将其刚刚处理的单个文件标记为已完成。
最后,配置DynamoDB流以触发另一个Lambda函数。此lambda函数将检查两个条件:splitters_complete
等于splitters_invoked
,并且文件列表中的所有文件都标记为“已完成”。然后它将知道它可以执行过程的最后一步。
或者,如果您不想在DynamoDB表中保留S3文件位置的列表,也可以直接使用原子计数器,一个计数器用于第二级拆分器创建的文件总数,另一个计数器文件处理功能计数器。