微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

aws cloudformation 模板 sns sqs

如何解决aws cloudformation 模板 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 队列接收到。

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

谢谢!

其他信息

  • 如果我删除 Cloudformation 通过控制台创建的订阅,然后通过控制台创建一个订阅,则消息发布正常。所以订阅肯定有问题。

  • 我使用 AWS CLI 将 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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。