繁体   English   中英

用于创建多个 SQS 的 Cloudformation 模板

[英]Cloudformation template to create multiple SQS

我正在尝试使用单个 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 个队列并且工作正常

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM