aws cloudformation 模板 sns sqs

aws cloudformation template sns sqs

我已经在 Cloudformation 堆栈中定义了一个 SNS 主题、一个 SQS 队列和一个 SNS 订阅资源。这三个都在相同的堆栈、相同的区域和相同的 AWS 账户中。

Resources:
  SqsQueue:
    Type: AWS::SQS::Queue
    Properties:
      QueueName: 'some-queue'
  SnsTopic:
    Type: AWS::SNS::Topic
    Properties:
      TopicName: 'some-topic'
  SnsSubscription:
    Type: AWS::SNS::Subscription
    Properties:
      Endpoint: !GetAtt [SqsQueue, Arn]
      Protocol: sqs
      TopicArn: !Ref SnsTopic

当我 运行 堆栈时,所有三个资源都已成功创建,但是当我从 SNS 发布消息时,SQS 队列从未接收到它。

我一直在关注这个 link (https://aws.amazon.com/premiumsupport/knowledge-center/sqs-sns-subscribe-cloudformation/),据我所知,我已经做了我需要做的一切。我还缺少什么?

谢谢!

附加信息

您需要添加策略以允许 SNS 主题发布到您的队列。像这样:

  SnsToQueuePolicy:
    Type: AWS::SQS::QueuePolicy
    Properties: 
      Queues:
        - !Ref SqsQueue
      PolicyDocument: 
        Version: '2012-10-17'
        Statement:
          - Sid: allow-sns-messages
            Effect: Allow
            Principal: '*'
            Resource: !GetAtt SqsQueue.Arn
            Action: SQS:SendMessage,
            Condition: 
              ArnEquals:
                aws:SourceArn: !Ref SnsTopic