【问题标题】:AWS SNS to SQS publish fails using CloudformationAWS SNS 到 SQS 发布使用 Cloudformation 失败
【发布时间】:2021-08-12 13:56:13
【问题描述】:

我最近开始使用 AWS 服务学习和实施服务。所以,我想我错过了一些我无法理解的小步骤。

我正在尝试使用 Cloudformation 模板实现下图。除非一切正常。 Lambda 和 SQS 队列已成功订阅 SNS 主题。每当文件存储在桶中,甚至当我手动向 SNS 主题发布消息时,都会成功触发 lambda 函数,但消息不会发布到 SQS 队列。我还添加了 AWS::SQS::QueuePolicy 以允许 SNS 向 SQS 发送消息,但它仍然不起作用。

模板.yml:

...

Resources:
  S3ObjectPutTopic:
    Type: AWS::SNS::Topic
    Properties:
      TopicName: !Sub ${AppName}-vrp-creation-${Environment}-topic

  BucketToSNSPermission:
    Type: AWS::SNS::TopicPolicy
    ...

  Bucket:
    Type: AWS::S3::Bucket
    ...

  Lambda:
    Type: AWS::Serverless::Function
    ...

  Queue:
    Type: AWS::SQS::Queue
    Properties:
      DelaySeconds: 0
      MaximumMessageSize: 262144
      MessageRetentionPeriod: 864000
      QueueName: !Sub ${AppName}-${Environment}-queue
      ReceiveMessageWaitTimeSeconds: 0
      VisibilityTimeout: 90

  TopicToQueuePermission:
    Type: AWS::SQS::QueuePolicy
    Properties:
      Queues:
        - !Ref Queue
      PolicyDocument:
        Version: 2012-10-17
        Statement:
          - Effect: Allow
            Principal:
              Service: s3.amazonaws.com
            Action: sqs:SendMessage
            Resource: !GetAtt Queue.Arn
            Condition:
              ArnEquals:
                aws:SourceArn: !Ref S3ObjectPutTopic

  TopicToQueueSubscription:
    Type: AWS::SNS::Subscription
    Properties:
      Protocol: sqs
      TopicArn: !Ref S3ObjectPutTopic
      Endpoint: !GetAtt Queue.Arn
      RawMessageDelivery: true

完整的 Cloudformation template.yaml 文件:template.yaml

【问题讨论】:

    标签: amazon-web-services aws-lambda amazon-cloudformation amazon-sqs amazon-sns


    【解决方案1】:

    您在 SQS 政策中提到了 Service: s3.amazonaws.com 而不是 Service: sns.amazonaws.com。更新模板并尝试。

    TopicToQueuePermission:
    Type: AWS::SQS::QueuePolicy
    Properties:
      Queues:
        - !Ref Queue
      PolicyDocument:
        Version: 2012-10-17
        Statement:
          - Effect: Allow
            Principal:
              Service: s3.amazonaws.com
            Action: sqs:SendMessage
            Resource: !GetAtt Queue.Arn
            Condition:
              ArnEquals:
                aws:SourceArn: !Ref S3ObjectPutTopic
    

    【讨论】:

      猜你喜欢
      • 2021-07-20
      • 1970-01-01
      • 2018-07-25
      • 1970-01-01
      • 2018-03-01
      • 2011-08-21
      • 2021-03-03
      • 2015-11-16
      • 1970-01-01
      相关资源
      最近更新 更多