在单个 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
无服务器框架:使用来自资源的存储桶的 S3 Lambda 触发器