定义多个ARN以触发Lambda函数。

3

这是我在AWS文档中看到的AWS::Lambda::EventSourceMapping的样例CloudFormation语法:

Type: "AWS::Lambda::EventSourceMapping"
Properties: 
  BatchSize: Integer
  Enabled: Boolean
  EventSourceArn: String
  FunctionName: String
  StartingPosition: String

假设我有一组 DDB 流 ARN,我想将其作为一个 Lambda 函数的触发器(而不是一个 ARN 作为触发器)。我尝试像这样定义这种关系:

Parameters:
   DDBStreamARN:
     Type: String
     Default: arn:aws:dynamodb:us-west-2:someId1
     AllowedValues:
       - arn:aws:dynamodb:us-west-2:someId1
       - arn:aws:dynamodb:us-west-2:someId2
       - ...
     Description: ARNs for the DDB Streams

Resources:
  RegistrationRequestStreamMapping:
     Type: AWS::Lambda::EventSourceMapping
     Properties:
       BatchSize: 70
       EventSourceArn:
         Ref: DDBStreamARN
       FunctionName:
         Fn::GetAtt:
           - TestLambdaFunction
           - Arn
       StartingPosition: TRIM_HORIZON
       Enabled: True

但是语法似乎不起作用,因为只有默认值 (arn:aws:dynamodb:us-west-2:someId1) 才能作为触发器正常工作,而其他 ARN 不会触发 Lambda 函数。您有什么建议如何解决这个问题吗?

2个回答

2
您可以为同一个 Lambda 函数定义多个 AWS::Lambda::EventSourceMapping。
例如:
RegistrationRequestStreamMapping1:
     Type: AWS::Lambda::EventSourceMapping
     Properties:
       BatchSize: 70
       EventSourceArn:
         Ref: DDBStream1ARN
       FunctionName:
         Fn::GetAtt:
           - TestLambdaFunction
           - Arn
       StartingPosition: TRIM_HORIZON
       Enabled: True

RegistrationRequestStreamMapping2:
     Type: AWS::Lambda::EventSourceMapping
     Properties:
       BatchSize: 70
       EventSourceArn:
         Ref: DDBStream2ARN
       FunctionName:
         Fn::GetAtt:
           - TestLambdaFunction
           - Arn
       StartingPosition: TRIM_HORIZON
       Enabled: True

1
将您的CFT部署两次。第一次使用arn:aws:dynamodb:us-west-2:someId1作为DDBStreamARN参数的值,第二次使用arn:aws:dynamodb:us-west-2:someId2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接