繁体   English   中英

无服务器框架如何创建 AWS SQS DeadLetter 队列?

[英]Serverless Framework how to create an AWS SQS DeadLetter queue?

我正在尝试使用无服务器框架创建 AWS SQS 死信队列
这个想法是有一个SQS来触发一个Lambda function,
并有另一个 SQS 作为 DeadLetterQueue,即。 在 Lambda 失败或超时的情况下接收消息

我做了以下创建一个测试项目 -

mkdir dlq
cd dlq/
serverless create --template aws-nodejs

以下是我的无服务器。yaml -

service: dlq

provider:
  name: aws
  runtime: nodejs12.x
  region: ap-southeast-1
  role: arn:aws:iam::xxxx:role/dlqLambdaRole

plugins:
  - serverless-plugin-lambda-dead-letter

functions:
  dlq:
    handler: handler.hello
    events:
      - sqs:
          arn:
            Fn::GetAtt:
              - MainQueue
              - Arn

    deadLetter:
      targetArn:
        GetResourceArn: DeadLetterQueue

resources:
    Resources:  
        MainQueue:
            Type: AWS::SQS::Queue
            Properties:
                QueueName: main
        DeadLetterQueue:
            Type: AWS::SQS::Queue
            Properties:
                QueueName: dlq

我还尝试了以下 -

service: dlq

provider:
  name: aws
  runtime: nodejs12.x
  region: ap-southeast-1
  role: arn:aws:iam::xxxx:role/dlqLambdaRole

plugins:
  - serverless-plugin-lambda-dead-letter

functions:
  dlq:
    handler: handler.hello
    events:
      - sqs:
          arn:
            Fn::GetAtt:
              - MainQueue
              - Arn

    deadLetter:
      sqs: dlq

resources:
    Resources:
      MainQueue:
        Type: AWS::SQS::Queue
        Properties:
          QueueName: main

但在这两种情况下,框架只是创建了一个普通的 SQS

我正在关注这份文件 -
https://www.serverless.com/plugins/serverless-plugin-lambda-dead-letter

迟到总比不到好。 希望这可以帮助您或寻找此问题的人。

当您配置 SQS 以触发 Lambda 时,应该在 SQS 上配置 DLQ(因为它不会是异步调用)。 注意链接中的“注释”部分

因此,您的 serverless.yaml 需要在主队列中声明 ReddrivePolicy 以引用 DQL。 (以下)

service: dlq

provider:
  name: aws
  runtime: nodejs12.x
  region: ap-southeast-1
  role: arn:aws:iam::xxxx:role/dlqLambdaRole


functions:
  dlq:
    handler: handler.hello
    events:
      - sqs:
          arn:
            Fn::GetAtt:
              - MainQueue
              - Arn

    deadLetter:
      targetArn:
        GetResourceArn: DeadLetterQueue

resources:
    Resources:  
        MainQueue:
            Type: AWS::SQS::Queue
            Properties:
                QueueName: main
                RedrivePolicy: 
                  deadLetterTargetArn: 
                    Fn::GetAtt: 
                      - "DeadLetterQueue"
                      - "Arn"
                  maxReceiveCount: 5
        DeadLetterQueue:
            Type: AWS::SQS::Queue
            Properties:
                QueueName: dlq

根据 AWS 文档,maxReceiveCount 设置为 5。

给你一些背景知识,死信队列就是一个普通的 SQS 队列。 它是 AWS Lambda 的配置,通知它在处理消息时出现任何错误时将消息推送到此队列。

您可以通过参考“异步调用”下的“死信队列服务”从管理控制台验证这一点

在此处输入图像描述

暂无
暂无

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

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