如何从两个不同的AWS服务(SQS和SNS)调用相同的Lambda函数?

时间:2019-05-14 20:14:55

标签: aws-lambda amazon-sqs amazon-sns

以下代码调用SNS,但我也希望SQS也调用它。我们可以使用多个Principal和Source Arn吗?我也尝试过此方法,但是没有用-

LambdaPermissionMainSNS:
    Type: AWS::Lambda::Permission
    Properties:
      Action: lambda:InvokeFunction
      FunctionName: !GetAtt LambdaFunctionMain.Arn
      Principal: sns.amazonaws.com
      SourceArn: !Ref SNSTopic
LambdaPermissionMainSQS:
   Type: AWS::Lambda::Permission
   Properties:
     Action: lambda:InvokeFunction
     FunctionName: !GetAtt LambdaFunctionMain.Arn
     Principal: sqs.amazonaws.com
     SourceArn: !Ref SQSQueue

1 个答案:

答案 0 :(得分:0)

您需要AWS::Lambda::EventSourceMapping资源来进行SQS:

SQSEventSource:
  Type: AWS::Lambda::EventSourceMapping
  Properties: 
    BatchSize: 10 # this is the default
    Enabled: true
    EventSourceArn: !Ref SQSQueue
    FunctionName: !GetAtt LambdaFunctionMain.Arn
  

AWS :: Lambda :: EventSourceMapping资源在事件源和AWS Lambda函数之间创建映射。 Lambda从事件源读取项目并触发功能。

然后,您可以让SNS和SQS“触发”您的Lambda函数。您必须在函数内部实现自己的逻辑以处理不同的事件格式。

另请参阅Using AWS Lambda with Amazon SQS