AWS Lambda - 仅在 S3 存储桶的根上发生的事件

AWS Lambda - events solely on root of S3 bucket

我正在使用 Lambda 为 S3 编写自动调整图像大小的工具。我想在 PUT 操作时在存储桶的子文件夹中创建缩略图,但如果我将文件放在存储桶中的任何位置,事件就会被触发。

有人能告诉我如何只在指定存储桶的根目录中而不在其子文件夹中启动事件吗?

您似乎无法将 S3 通知配置为仅在某些路径上触发,因此最好的选择是在您的 Lambda 函数中实现此逻辑:

var key = event.Records[0].s3.object.key;
if (key.indexOf('/') === -1) {
    // No slash in key name, must be in root of bucket, do stuff here
}

这会起作用,因为如果对象在子文件夹中并且 不是 根目录,密钥将 have a slash in the name.

使用前缀过滤器。例如,使用 uploads/ 的前缀过滤器配置您的触发器。它会在创建 uploads/thumb1.jpg 时触发,但不会在创建 any_other_prefix/thumb1.jpg 时触发。然后,只需确保在 PUT 缩略图时在键中使用前缀即可。