如何为 s3 触发事件添加过滤器值

问题描述

我使用以下模板创建了一个存储桶触发器

我只需要为 test-bucket-3422344 中的文件夹 test/sample/ 触发

    AWstemplateFormatVersion: "2010-09-09"
    Transform:  'AWS::Serverless-2016-10-31'
    Resources:
    
      MyBucket:
        Type: AWS::S3::Bucket
        Properties:
          BucketName: test-bucket-3422344
    
      rData:
        Type: AWS::Serverless::Function
        Properties:
          CodeUri: functions/load_data     
          FunctionName: sample-function
          Handler: lambda_function.lambda_handler
          Runtime: python3.8
          MemorySize: 3008
          Timeout: 100
          Role: !Sub arn:aws:iam::${AWS::AccountId}:role/main_service_role
          Environment:
            Variables:
              bucket_name: sample-bucket
              file_name: config/test.csv
          Events:
            S3Event:
              Type: S3
              Properties:
                Bucket: !Ref MyBucket
                Events: s3:ObjectCreated:Put   

添加了与事件并行的如下过滤器

       Filter:
            S3Key:
               Rules:
                  - Name: prefix
                  - Value: test/sample

我有错误

E0001 Error transforming template: Resource with id [rData] is invalid. property Filter not defined for resource of type AWS::Serverless::Function```    

解决方法

您的 - 中不需要 Rules。修正后的模板如下:

AWSTemplateFormatVersion: "2010-09-09"
Transform:  'AWS::Serverless-2016-10-31'
Resources:

  MyBucket:
    Type: AWS::S3::Bucket
    Properties:
      BucketName: test-bucket-3422344
      BucketEncryption:
        ServerSideEncryptionConfiguration: 
          - BucketKeyEnabled: true
            ServerSideEncryptionByDefault: 
              SSEAlgorithm: aws:kms

  rData:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: functions/load_data          
      FunctionName: sample-function
      Handler: lambda_function.lambda_handler
      Runtime: python3.8
      MemorySize: 3008
      Timeout: 100
      Role: !Sub arn:aws:iam::${AWS::AccountId}:role/main_service_role
      Environment:
        Variables:
          bucket_name: sample-bucket
          file_name: config/test.csv
      Events:
        S3Event:
          Type: S3
          Properties:
            Bucket: !Ref MyBucket
            Events: s3:ObjectCreated:Put   
            Filter: 
              S3Key: 
                Rules: 
                  - Name: prefix
                    Value: test/sample