到目前为止,我已经设置了2个SQS订阅的SNS主题。每个SQS都有一个关联的Lambda触发器。
当我通过SNS发送消息时,请像这样发布以将消息发送到第二个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中发生静默错误的地方令人沮丧。
答案 0 :(得分:1)
我有同样的问题。请检查您是否在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服务通知其订户,但“不在乎”订户是否可用,因此SNS上没有错误消息。 希望有帮助!