amazon-web-services - 如何在 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 函数中获得这个文件的完整路径。
解决方案
S3 通知事件结构在此处详细描述。
例如从事件中获取存储桶名称(假设事件中有 1 条记录):
bucket_name = event['Records'][0]['s3']['bucket']['name']
同样的关键:
key_name = event['Records'][0]['s3']['object']['key']
推荐阅读
- angular - 性能:使用@Input 和 getter/setter 的两种方式数据绑定
- jquery - 渲染响应不适用于 jquery ajax 请求
- php - 如何在 HEREDOC SQL 查询中使用 PHP 变量?
- java - Seq2Seq 模型 (DL4J) 做出荒谬的预测
- debugging - 在 VSCode 中触发扩展命令时,我如何知道执行了代码的哪一部分?
- azure - 无法访问 Azure 文件共享 | 端口 445
- firebase - Firestore 实时更新或 Sockets.io 用于实时聊天
- unity3d - Animator SetFloat(int 0) as Transition,现在是为了防止循环?
- java - 装饰器设计和工厂设计模式
- selenium-webdriver - 试图点击登录按钮,但它说元素不可交互