agiledigital/serverless-sns-sqs-lambda

Support for fanout pattern (multiple subscriptions)

Opened this issue · 1 comments

I find that this plugin works well for 1:1 message transfer between sns and sqs, but do you support sqs with multiple subscriptions. My use case requires the use of the SNS fanout pattern, so I'm wondering what the configuration would look like. I tried the most obvious config below, but I only see one (the last) subscription bound to my SQS queue.

functions:
  processEvent:
    handler: handler.backofficeConsumer
    events:
      - snsSqs:
          name: sqsbackoffice
          topicArn: !Ref RegisterBroker
      - snsSqs:
          name: sqsbackoffice
          topicArn: !Ref UpdateBroker

resources:
  Resources:
    RegisterBroker:
      Type: AWS::SNS::Topic
      Properties:
        TopicName: sns-register-broker
    UpdateBroker:
      Type: AWS::SNS::Topic
      Properties:
        TopicName: sns-update-broker

In serverless.yml I could do something like this, but I want to use your integration to have a queue between them:

functions:
  hello:
    handler: handler.run
    events:
      - sns:
          arn: arn:aws:sns:us-east-1:00000000000:topicname
          topicName: topicname-account-1-us-east-1
      - sns:
          arn: arn:aws:sns:us-east-1:11111111111:topicname
          topicName: topicname-account-2-us-east-1

Appreciate any suggestions.

Hi @lsacco-nutreense, thanks for the report!

I think this isn't working because the CloudFormation logical IDs are generated based on the name attribute, so your two snsSqs definitions are conflicting with each other. In fact, I think after #552 lands, you would get an error instead of a silent failure. It seems somewhat related to #444

I'll do some testing at some point,. In the meantime, you might be able to get it to work by giving each event definition a different name attribute. For example:

functions:
  processEvent:
    handler: handler.backofficeConsumer
    events:
      - snsSqs:
          name: sqsbackoffice1
          topicArn: !Ref RegisterBroker
      - snsSqs:
          name: sqsbackoffice2
          topicArn: !Ref UpdateBroker