在单个 S3 对象上传事件上触发多个 lambda

Posted

技术标签:

【中文标题】在单个 S3 对象上传事件上触发多个 lambda【英文标题】:Trigger multiple lambda on single S3 object upload event 【发布时间】:2022-01-18 01:46:29 【问题描述】:

我在我的存储桶上设置了一个 S3 事件,该事件触发 lambda 以调整图像大小。因此,每次将文件放入存储桶 S3 时,都会调用 lambda 函数,将包含来自已创建文件的信息的事件发送到 lambda 函数。

这是一个如何触发的示例:

下一个:

这是一个示例代码 lambda nodejs 来做到这一点:

exports.handler = (event, context, callback) => 

  var lastCreatedFile = event.Records[0].s3.object.key;
  console.log(lastCreatedFile);

;

但我的要求是在一个 S3 事件(上传对象)上触发 2 个 lambda - 一个图像调整大小,另一个将图像元数据存储回 RDS。

但目前 S3 事件不支持多个 lambda 触发器。我看到了一个使用 SNS 然后发送到多个 lambdas 的实现,但我不想使用那个,因为在这种情况下我需要更改我当前的架构。

所以让我知道或展示一些其他的实现或建议。

【问题讨论】:

【参考方案1】:

最近发布的Amazon S3 Event Notifications with Amazon EventBridge 让您可以使用触发多个 lambdas off bucket 事件,并具有回放和存档等优点。

或者,您可以坚持使用 S3 通知并链接 lambda 调用:S3 -> lambda1 -> lambda2。呸。或使用 Step Function S3 -> lambda -> Sfn -> lambda1 + lambda2。双呸。 [编辑]:Triple Yuck - S3 -> Lambda1 -> S3 -> Lambda2

【讨论】:

除此之外,还有向 SNS 主题发送事件通知并将 Lambda 函数订阅到该主题的选项。这种方法的问题是事件与直接从 S3 事件获取时不同(它周围有额外的 SNS 消息层)

以上是关于在单个 S3 对象上传事件上触发多个 lambda的主要内容,如果未能解决你的问题,请参考以下文章

AWS - 想要将多个文件上传到 S3,并且只有在所有文件都上传后才会触发 lambda 函数

Cloudformation 模板在 S3 事件上触发 Lambda

aws lambda函数为单个事件多次触发

无服务器框架:使用来自资源的存储桶的 S3 Lambda 触发器

当 S3 和 Lambda 位于不同区域时,如何使用 S3 事件通知触发跨区域 Lambda 函数

读取由 s3 事件触发的文件