【问题标题】:Create bucket and lambda trigger in same serverless framework在同一个无服务器框架中创建存储桶和 lambda 触发器
【发布时间】:2021-09-15 23:58:11
【问题描述】:

我想创建一个 s3 存储桶,并在将某些文件上传到存储桶中的“上传”文件夹时触发 lambda 函数。我想在 aws 中使用无服务器框架创建这些资源。

我在“provider.s3”下定义了我的 s3 存储桶配置,然后我尝试在 functions.hello.events.bucket 下引用该存储桶

但是,当我运行 sls package 时出现以下错误

 Serverless Error ----------------------------------------

     MyS3Bucket - Bucket name must conform to pattern (?!^(\d{1,3}\.){3}\d{1,3}$)(^(([a-z0-9]|[a-z0-9][a-z0-9-]*[a-z0-9])\.)*([a-z0-9]|[a-z0-9][a-z0-9-]*[a-z0-9])$). Please check provider.s3.MyS3Bucket and/or s3 events of function "hello".

serverless.yml

service: some-service
frameworkVersion: '2'
useDotenv: true

provider:
  name: aws
  runtime: python3.8
  lambdaHashingVersion: 20201221
  s3:
    MyS3Bucket:
      bucketName: ${env:MY_BUCKET_NAME}
      accessControl: Private
      lifecycleConfiguration:
        Rules:
          - Id: ExpireRule
            Status: Enabled
            ExpirationInDays: '7'    
package:
  individually: true

functions:
  hello:
    name: my-lambda-function
    handler: function.handler
    memorySize: 128
    timeout: 900
    events:
      - s3:
          bucket: MyS3Bucket
          event: s3:ObjectCreated:*
          rules:
            - prefix: uploads/

我的下一个尝试是在“资源”下定义 s3 存储桶,并在 lambda 触发器中使用存储桶的引用。我仍然收到警告消息

Serverless: Configuration warning at 'functions.hello.events[0].s3.bucket': should be string

serverless.yml

service: some-service
frameworkVersion: '2'
useDotenv: true

provider:
  name: aws
  runtime: python3.8
  lambdaHashingVersion: 20201221
    
package:
  individually: true

functions:
  hello:
    name: my-lambda-function
    handler: handler.handler
    memorySize: 128
    timeout: 900
    events:
      - s3:
          bucket: 
            Ref: MyS3Bucket
          event: s3:ObjectCreated:*
          rules:
            - prefix: uploads/
          existing: true

resources:
  Resources:
    MyS3Bucket:
      Type: AWS::S3::Bucket
      Properties:
        AccessControl: Private
        BucketName: 'test.bucket'
        OwnershipControls:
          Rules:
            - ObjectOwnership: ObjectWriter
        LifecycleConfiguration:
          Rules:
            - Id: ExpireRule
              Status: Enabled
              ExpirationInDays: '7'

【问题讨论】:

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


    【解决方案1】:

    您应该使用您的存储桶名称,而不是 MyS3Bucket:

        events:
          - s3:
              bucket: ${env:MY_BUCKET_NAME}
    

    【讨论】:

    • 是否提供对存储桶的引用而不是指定名称本身?
    • @UtkristAdhikari 对不起,我不明白。什么参考? ${env:MY_BUCKET_NAME} 不起作用?
    猜你喜欢
    • 2021-12-31
    • 1970-01-01
    • 2018-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-06
    • 2020-11-27
    相关资源
    最近更新 更多