我正在尝试使用无服务器框架创建一个AWS SQS死信队列
这个想法是让SQS触发Lambda函数,
并具有另一个SQS作为DeadLetterQueue,即。在Lambda失败或超时的情况下提取消息
我执行了以下操作来创建测试项目-
mkdir dlq
cd dlq/
serverless create --template aws-nodejs
以下是我的serverless.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
答案 0 :(得分:0)
为了给您一些背景知识,Dead Letter Queue就是普通的SQS队列。 AWS Lambda的配置会通知它在处理消息时出现任何错误时将消息推送到此队列。
您可以通过参考“异步调用”下的“死信队列服务”在管理控制台中进行验证
答案 1 :(得分:0)
迟到总比不到好。希望这对您或搜索此问题的人有所帮助。
当您配置 SQS 以触发 Lambda 时,应该在 SQS 上配置 DLQ(因为它不是异步调用)。 请注意链接中的“注意”部分 Source
因此您的 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
maxReceiveCount 根据 AWS 文档设置为 5。