Отправка сообщения в тему SNS с двумя подписками SQS, каждая с лямбда-триггером, приводит к пустым очередям - PullRequest
0 голосов
/ 07 июня 2019

На данный момент я настроил тему SNS с двумя подписками SQS.С каждым SQS связан лямбда-триггер.

Когда я отправляю сообщение через SNS.publish следующим образом, чтобы отправить сообщение во 2-ю подписку SQS:

response = sns.publish(
    TopicArn='arn:aws:sns:us-west-2:234723472:test',
    Message=json.dumps({'default': json.dumps({"c": code, "event_type": queuename})}),
    MessageAttributes={'event_type':{'DataType':'String', 'StringValue':queuename}
)

очередь остается пустой.

пока, когда я отправляю сообщение прямо в очередь, лямбда-триггер работает.Но сообщения, кажется, не проходят мимо после отправки в SNS.Ошибки не вызваны.Обидно, что SNS не показывает журнал полученных сообщений, поэтому я не могу отладить что-то здесь.

Чего мне не хватает?

Я также пробовал с * 1012 и без него* выше, и это не имело никакого значения.

Это расстраивает, не зная, где происходит тихая ошибка в AWS.

1 Ответ

1 голос
/ 08 июня 2019

У меня была такая же проблема. Проверьте, установлены ли у вас разрешения для SQS, чтобы он мог принимать сообщения от SNS.

Пример:

# SQS Queue
MyQueue: 
  Type: AWS::SQS::Queue 
    Properties: 
      QueueName: MyQueue

# SNS Topic
MyTopic: 
  Type: AWS::SNS::Topic 
  Properties: 
    TopicName: MyTopic

# Topic Subscription 
MyTypicSubscription: 
  Type: AWS::SNS::Subscription 
    Properties: 
      Endpoint: !GetAtt MyQueue.Arn 
      Protocol: sqs 
      RawMessageDelivery: true 
      TopicArn: !Ref MyTopic 

#Permissions for SQS to receive SNS notifications 
MyQueuePermissions: 
  Type: AWS::SQS::QueuePolicy 
  Properties:  
    PolicyDocument: 
      Statement: 
        Effect: Allow 
        Principal: 
          AWS: '*' 
        Action: SQS:SendMessage 
        Resource: 
        - !GetAtt MyQueue.Arn 
        Condition: 
          ArnEquals:  
            aws:SourceArn: !Ref MyTopic 
    Queues:  
    - !Ref MyQueue 

В консоли это выглядит так:

enter image description here

Служба SNS уведомляет своих подписчиков, но «не заботится», доступен ли подписчик или нет, поэтому в SNS нет сообщений об ошибках. Надеюсь, это поможет!

...