【问题标题】:Serverless Framework: S3 Lambda Trigger with bucket from resources无服务器框架:使用来自资源的存储桶的 S3 Lambda 触发器
【发布时间】:2021-12-31 16:26:56
【问题描述】:

我想创建一个 Lambda 函数,该函数从在同一 CloudFormation 堆栈中创建的 S3 存储桶触发,但无法完全正确地获取语法。

只有在对象上传到/uploads 时才会触发该事件。我还需要指定一些存储桶属性 (CORS)。

资源中的 S3 存储桶定义

resources:
  Resources:
    myBucket:
      Type: AWS::S3::Bucket
      Properties:
        BucketName: my-bucket
        # CORS properties...

函数定义中的事件:

events:
  - s3: 
    bucket: myBucket
    event: s3:ObjectCreated:Put
    rules:
      - prefix: uploads/

我不想使用existing: true,因为它为这个简单的任务创建了一些帮助对象。我找不到任何适合我情况的文档或示例。

【问题讨论】:

    标签: amazon-web-services amazon-s3 aws-lambda amazon-cloudformation serverless-framework


    【解决方案1】:

    existing:true 标志仅与在您的无服务器项目之外创建的 S3 存储桶相关,用于已存在的存储桶,此处不是这种情况。

    你面临的情况是你不能使用典型的 serverless 框架在 Lambda 事件触发器中定义存储桶的便利,像这样:

    functions:
      users:
        handler: users.handler
        events:
          - s3:
              bucket: photos
              event: s3:ObjectRemoved:*
    

    您不能使用该方法的原因是它创建了photos 存储桶并且不允许您提供额外的存储桶配置,例如CORS 或存储桶策略。

    解决方案是在 S3 提供程序配置中使用 CORS 策略创建 S3 存储桶,然后从您的 Lambda 函数事件配置中引用该存储桶。例如:

    provider:
      s3:
        photosBucket:
          name: photos
          versioningConfiguration:
            Status: Enabled
          corsConfiguration:
            CorsRules
              - rule1 here
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-03
      • 2021-09-15
      • 2018-02-16
      • 2020-03-02
      • 2022-01-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多