使用 2 个 SQS 订阅向 SNS 主题发送消息,每个订阅都有一个 lambda 触发器导致空队列

Sending message to SNS topic with 2 SQS subscriptions each with a lambda trigger results in empty queues

到目前为止,我已经设置了一个 SNS 主题,其中包含 2 个 SQS 订阅。每个 SQS 都有一个与之关联的 lambda 触发器。

当我像这样通过 SNS.publish 发送消息以将消息发送到第二个 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}
)

队列仍然是空的。

然而,当我直接向队列发送消息时,lambda 触发器起作用了。但是一旦发送到 SNS,消息似乎就不会过去。不会触发任何错误。令人沮丧的是 SNS 没有显示它收到的消息日志,所以我不能在这里真正调试东西。

我可能遗漏了什么?

我也尝试过使用和不使用上面的 MessageStructure='json',但没有任何区别。

不知道 AWS 中哪里发生了静默错误,这令人沮丧。

我遇到了同样的问题。请检查您是否在 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 

在控制台中它看起来像这样:

SNS 服务会通知其订阅者,但 "doesn't care" 订阅者是否可用,因此 SNS 上没有错误消息。 希望对您有所帮助!