AWS Lambda避免递归触发



我正在从API下载数据并将其写入我存储在S3桶中的csv文件。然后,我将文件从这个输入桶复制到一个带有Lambda函数的输出桶中。从输出桶我摄取它到MySQL RDS实例与另一个Lambda函数。

当我在桶中创建新对象时,copy到另一个桶和upload到rds lambda函数都会被触发。由于我追加到我的csv文件,上传到rds函数被触发的方式比它应该,我最终在我的数据库中有~30行,而不是6。

我认为通过在S3桶之间复制文件可以避免这种情况,但它没有帮助。是否有任何方法只上传csv文件到数据库,一旦它已经写入,而不是,而它正在更新?我能推迟扳机吗?

我能想到的唯一其他解决方案是完全跳过复制到另一个桶的功能,并安排上传到rds的功能。

您需要认识到S3不支持更新现有文件。如果要向S3中的现有CSV文件添加一行,则该操作需要再次将CSV文件的整个内容上传到S3, S3将其视为新对象。

如果您需要在S3中存储CSV文件的临时版本,那么您应该将其存储在单独的路径中,例如s3://your_bucket/tmp,然后当您完成更新时,将其移动到最终路径,例如s3://your_bucket/complete,并且仅在/complete路径上配置Lambda触发器。

最新更新