繁体   English   中英

AWS sam 模板如何为 S3 事件添加多个规则?

[英]AWS sam template How to add multiple rules for S3 event?

我正在尝试使用堆栈下方的 s3 事件触发器创建 lambda。 当 object 被放置在同一个 s3 的两个目录中时,我想触发 lambda

 MyBucket:
    Type: AWS::S3::Bucket
    Properties:
        BucketName: !Ref S3

LambdaS3:  # Name change -change fun name
    Type: AWS::Serverless::Function
    Properties:
      Handler: lambda_function.lambda_handler
      Runtime: python3.7
      Timeout: 60
      FunctionName: !Sub "${Environment}somefun" 
      CodeUri: ./mysource/src
      Role: !GetAtt myiam.Arn
      Description: "Test"
      Environment:
        Variables:
          KINESIS_STREAM: !Sub "${Environment}_my_kinesis"
          ENVIRONMENT: !Sub "${Environment}"
         
      Events:
          FileUpload:
              Type: S3
              Properties:
                Bucket: !Ref MyBucket
                Events: s3:ObjectCreated:*
                Filter:
                  S3Key:
                    Rules:
                      - Name: prefix
                        Value: "L1/Test_1/INPUT/"
                      - Name: suffix
                        Value: ".json"
                      - Name: prefix
                        Value: "L2/Test_2/INPUT/"
                      - Name: suffix
                        Value: ".json"  

现在这里我指的是事件触发器的两个 s3 位置

L1/Test_1/INPUT/ and L2/Test_2/INPUT/

但是在我部署代码之后,出现以下错误:

Following Resources Failed to create[MyBucket]. Property rules contains duplicate value

任何人都可以帮忙吗?

您收到错误是因为Rules数组中有重复值,如错误中所述。 在这种情况下,重复值是

- Name: suffix
  Value: ".json"

除此之外, AWS SAM 文档还指出:

同一类型的过滤规则不能多次使用。 例如,您不能指定两个前缀规则。

所以我假设即使删除双重条目也不会使堆栈部署。 您也可以在 lambda function 中编写过滤器,并且不处理未通过过滤器的传入事件。 这在过滤方面提供了更多的灵活性,但将确保在存储桶中的每次上传时触发 lambda function,这可能是不希望的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM