首页 > 解决方案 > 关于使用 cloudformation 在 AWS 上创建 SQS 队列/死信队列的问题

问题描述

我想创建一个连接到死信队列的 SQS 队列。我希望将 SQS 队列中收到但无法正确处理的消息放入死信队列。另外我想设置这个做云的形成。我看过 这些文档。但我仍然对设置过程有疑问。我在页面下方看到了这段代码片段,它显示了如何执行此操作:

AWSTemplateFormatVersion: "2010-09-09"
Resources: 
  MySourceQueue: 
    Type: AWS::SQS::Queue
    Properties: 
      RedrivePolicy: 
        deadLetterTargetArn: 
          Fn::GetAtt: 
            - "MyDeadLetterQueue"
            - "Arn"
        maxReceiveCount: 5
  MyDeadLetterQueue: 
    Type: AWS::SQS::Queue
Outputs: 
  SourceQueueURL: 
    Description: "URL of the source queue"
    Value: 
      Ref: "MySourceQueue"
  SourceQueueARN: 
    Description: "ARN of the source queue"
    Value: 
      Fn::GetAtt: 
        - "MySourceQueue"
        - "Arn"
  DeadLetterQueueURL: 
    Description: "URL of the dead letter queue"
    Value: 
      Ref: "MyDeadLetterQueue"
  DeadLetterQueueARN: 
    Description: "ARN of the dead letter queue"
    Value: 
      Fn::GetAtt: 
        - "MyDeadLetterQueue"
        - "Arn"

我的问题是:

1) 这个代码片段是 1 sqs/dead letter queue 的吗?所以如果我想做很多这些,我会为每个复制整个块?

2)如果sqs队列已经存在但我想在云形成中添加一个死信队列,我可以把那个队列的名称放在某个地方并让它生成正确的死信队列吗?还是我必须拆除旧队列并使用云形成重新创建它们?

标签: amazon-web-servicesamazon-cloudformationamazon-sqs

解决方案


此代码段正在创建一个名为的 Amazon SQS 队列MyDeadLetterQueue

  MyDeadLetterQueue: 
    Type: AWS::SQS::Queue

这个片段:

  MySourceQueue: 
    Type: AWS::SQS::Queue
    Properties: 
      RedrivePolicy: 
        deadLetterTargetArn: 
          Fn::GetAtt: 
            - "MyDeadLetterQueue"
            - "Arn"
        maxReceiveCount: 5

是说:

  • 创建一个名为的 Amazon SQS 队列MySourceQueue
  • 将死信队列设置为MyDeadLetterQueue
  • 如果一条消息处理 5 次失败,则将其移至MyDeadLetterQueue

如果您愿意,多个队列可以使用相同的死信队列,因此对您希望创建的每个队列重复此块。

如果死信队列已经存在,那么您可以为队列提供 ARN:

  • 创建参数以接受 ARN
  • 请参阅队列定义中的 ARN

例如:

Parameters: 
  DLQarn: 
    Type: String

Resources:
  MySourceQueue: 
    Type: AWS::SQS::Queue
    Properties: 
      RedrivePolicy: 
        deadLetterTargetArn: 
          Ref: DLQarn
        maxReceiveCount: 5

推荐阅读