通过 S3 PUT 在未定义文件夹的子文件夹中触发 Lambda 函数

Trigger Lambda function by S3 PUT in subfolder of undefined folder

我有一个 AWS Lambda 函数,我想在用户将文件上传到其 S3 目录中的子文件夹时触发。

每个用户在 'private/' 前缀内都有自己的文件夹,但是当用户上传文件时,它会放在子文件夹中。这意味着触发器前缀应该是 'private/userID/subFolder/',但我找不到如何定义用户 ID 可以是任何东西。

我试过制作前缀 'private/*/subFolder/',但这并没有触发任何东西。如果我做前缀'private/',函数将被不必要地触发。

最好的方法是什么?

您必须为每个用户创建一个规则:

private/userID1/subFolder
private/userID2/subFolder
private/userID3/subFolder

您不能为触发器添加动态值。所以一个解决方案是在像 /prefix 这样的通用级别获取事件,然后获取对象的路径。提取您想要的数据并调用您的实际 lambda。您也可以在 1 个 lambda 中执行此操作,而不必创建 2 个。

S3 -> Lambda (extract path here) -> (actual) Lambda

替代方案是解析路径后在SQS中添加消息。然后相应地调用任意数量的 lambda。

S3 -> Lambda (extract path here) -> Path1 -> SQS1 -> Lambda

S3 -> Lambda (extract path here) -> SQS -> Lambda