首页 > 解决方案 > 如何在 Lambda 函数中获取 S3 触发器详细信息?

问题描述

我创建了一个使用 S3 PutObject 事件触发的 lambda 函数。我的 S3 存储桶看起来像这样:

s3://my-bucket-name/directory_1/...
s3://my-bucket-name/directory_2/...
s3://my-bucket-name/directory_3/...

另一个应用程序正在创建像 directory_1 这样的文件夹。在此目录中创建数据后,应用程序还会创建一个名为 _SUCCESS 的文件。所以其中一个目录如下所示:

s3://my-bucket-name/directory_1/data.txt
s3://my-bucket-name/directory_1/_SUCCESS

现在我想在创建这个 _SUCCESS 文件后立即触发我的 lambda 函数。所以我在 lambda 中添加了 S3 的触发器,如下所示:

Event type: ObjectCreatedByPut
Bucket: my-bucket-name
Prefix: directory
Suffix: _SUCCESS

目前,我可以看到每当在任何目录中创建新的 _SUCCESS 文件时都会正确触发 lambda 函数。但我也想知道触发此功能的 _SUCCESS 文件的确切键是什么。这该怎么做?

例如,如果 s3://my-bucket-name/directory_1/_SUCCESS 触发了我的 lambda,我应该能够在这个 lambda 函数中获得这个文件的完整路径。

标签: amazon-web-servicesamazon-s3aws-lambda

解决方案


S3 通知事件结构在此处详细描述。

例如从事件中获取存储桶名称(假设事件中有 1 条记录):

bucket_name = event['Records'][0]['s3']['bucket']['name']

同样的关键:

key_name = event['Records'][0]['s3']['object']['key']

推荐阅读