首页 > 解决方案 > 无服务器框架 - S3 上传 lambda 触发器

问题描述

我想根据上传文件的文件夹在同一个bucket上触发不同的lambda。基本上,当用户将文件上传到“user/some_id/bills”时,我想触发 lambda 1;当用户将文件上传到“user/some_id/docs”时,我想触发 lambda 2;

我尝试了下面的配置,但没有奏效......

insertUploadBill:
handler: resources/insertUploadBill.main
events:
  - s3:
      bucket: ${self:custom.settings.BUCKET}
      event: s3:ObjectCreated:*
      rules:
        - prefix: user/*/bills/       

insertUploadDocs:
handler: resources/insertUploadDoc.main
events:
  - s3:
      bucket: ${self:custom.settings.BUCKET}
      event: s3:ObjectCreated:*
      rules:
        - prefix: user/*/docs/

标签: amazon-s3serveraws-lambdaserverless-framework

解决方案


如果您查看文档 https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html#notification-how-to-filtering

规则中的通配符(前缀/后缀)不能使用。

  1. 因此,您可以更改 S3 对象键以匹配类似这样的内容 user/images/[user-id]
  2. 或者您可以创建一个单独的 lambda 以在所有s3:ObjectCreated:*事件上调用,然后使用此 lambda 匹配键并调用您当前的 lambda。resources/insertUploadBill.mainresources/insertUploadDoc.main

推荐阅读