[英]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.