当满足所有条件时,检查多个s3事件以触发lambda吗?

时间:2020-08-21 16:10:02

标签: amazon-web-services aws-lambda

我有一个step函数,它运行一系列lambda函数。我想设置一个lambda,它会在3个输入文件中的所有文件均已更新时每天触发此事件。

我知道您可以触发s3事件,但是我如何要求必须全部更新这三个事件?也就是说,我不希望触发器在三个事件(或条件)中的任何一个上触发,我希望在所有三个事件都已更新(和条件)时触发。

我将如何设置此类触发事件?

谢谢

3 个答案:

答案 0 :(得分:1)

无法定义一个触发器,该触发器显示“仅在这三个文件上传后才运行”。

您需要自己实现此逻辑。

上传将触发AWS Lambda函数。此功能应检查是否存在其他两个文件。如果存在,则应继续处理。如果不存在,则应退出。

答案 1 :(得分:1)

就像现在一样,没有直接的方法可以根据这种条件来猛虎Lambda。您需要在单独的lambda中编写逻辑,这将触发您的步进功能。

您可以参考here来了解如何从Lambda触发步进功能。

现在,让我们来谈谈Lambda中将检查文件的逻辑。在这里,我相信您知道这三个文件,或者至少知道文件前缀,因此,无论何时将任何文件上传到S3,您都可以在Lambda中检查是否存在三个文件。如果找到了所有三个文件,则可以直接从Lambda触发状态机,否则可以自己停止。完成Step Machines执行后,您可以清理这三个文件,也可以将其重命名为其他文件,也可以将这些文件移动到其他“文件夹”,以便下次您上载这三个文件时,lambda可以不会触发状态机。

我想到的另一种逻辑是,将所有这些文件作为zip一起上传。将zip文件上传到S3后,您的lambda会收到通知,处理zip文件并提取所有三个文件,进行一些处理并使用已处理的数据触发状态机。

答案 2 :(得分:0)

这是我最终使用的解决方案。我正在为每个文件使用一个带触发器的lambda。对于每个触发器,lambda会将触发它的文件的名称添加到s3上存储的文件中。然后,它检查文件是否具有所有必需的文件名才能继续。如果是这样,它将启动步进功能并清除列表。我正在从默认通过lambda_function(event,context)传递的事件对象中捕获触发lambda的文件的名称。

因此,在给定的一天中,同一lambda会被多次触发,每次记录文件名,直到收集全部文件。