【问题标题】:Cloudformation template to create multiple SQS用于创建多个 SQS 的 Cloudformation 模板
【发布时间】:2023-01-12 16:05:30
【问题描述】:

我正在尝试使用单个 cloudformation 模板创建 2 个 SQS。我想对两个队列应用相同的队列策略。目前我有下面的模板来创建 1 个队列及其相应的 dlq。我是否必须将所有资源都写入两次,或者我是否可以为 Queue2 重复使用相同的队列策略?

Resources:
  Queue1:
    Type: AWS::SQS::Queue
    Properties:
      RedrivePolicy:
        deadLetterTargetArn: !GetAtt   DeadLetterQueue.Arn
        maxReceiveCount: 10
      QueueName: queue1
      MessageRetentionPeriod: 604800
      VisibilityTimeout: 150
      ReceiveMessageWaitTimeSeconds: 0

  DeadLetterQueue1:
    Type: AWS::SQS::Queue
    Properties:
      QueueName: queue1-dlq
      MessageRetentionPeriod: 1209600

  QueuePolicy:
    Type: AWS::SQS::QueuePolicy
    Properties:
      PolicyDocument:
        Version: 2012-10-17
        Statement:
          - Sid: allow-service-to-read-and-write-messages
            Effect: Allow
            Principal:
              AWS:
                - !Sub arn:aws:iam::${AWS::AccountId}:role/User
            Resource: !GetAtt Queue1.Arn
            Action:
              - SQS:ChangeMessageVisibility
              - SQS:DeleteMessage
              - SQS:GetQueueUrl
              - SQS:ReceiveMessage
              - SQS:SendMessage
      Queues:
        - !Ref Queue1

  DeadLetterQueuePolicy:
    Type: AWS::SQS::QueuePolicy
    Properties:
      PolicyDocument:
        Version: 2012-10-17
        Statement:
          - Sid: allow-service-to-read-messages
            Effect: Allow
            Principal:
              AWS:
                - !Sub arn:aws:iam::${AWS::AccountId}:role/User
            Resource: !GetAtt DeadLetterQueue1.Arn
            Action:
              - SQS:ChangeMessageVisibility
              - SQS:DeleteMessage
              - SQS:GetQueueUrl
              - SQS:ReceiveMessage
          - Sid: allow-queue-to-send-messages
            Effect: Allow
            Principal: '*'
            Resource: !GetAtt DeadLetterQueue1.Arn
            Action:
              - SQS:SendMessage
            Condition:
              ArnEquals:
                "aws:SourceArn": !Ref Queue1
      Queues:
        - !Ref DeadLetterQueue1

Outputs:
  SourceQueueURL:
    Description: URL of source queue
    Value:
      Ref: Queue1
  SourceQueueARN:
    Value: !GetAtt Queue1.Arn
    Description: Arn of created SQS
  DeadLetterQueueURL:
    Description: URL of dead-letter queue
    Value:
      Ref: DeadLetterQueue1
  DeadLetterQueueARN:
    Value: !GetAtt DeadLetterQueue1.Arn
    Description: Arn of created SQS

仅尝试了 1 个队列并且工作正常

【问题讨论】:

    标签: amazon-web-services amazon-cloudformation amazon-sqs


    【解决方案1】:

    您必须为第二个队列单独创建策略,因为它具有不同的 !GetAtt DeadLetterQueue1.Arn。如果您不想这样做,您可以将策略提取到不同的模板,并将该模板用作带有队列的模板中的 nested stack

    【讨论】:

      猜你喜欢
      • 2017-05-16
      • 2021-07-20
      • 2021-04-19
      • 2020-12-28
      • 1970-01-01
      • 2017-09-14
      • 2019-06-21
      • 2017-07-15
      • 2020-03-11
      相关资源
      最近更新 更多