无服务器框架如何创建 AWS SQS 死信队列?
Serverless Framework how to create an AWS SQS DeadLetter queue?
我正在尝试使用无服务器框架创建 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
为了给您一些背景知识,死信队列就是一个普通的 SQS 队列。它是 AWS Lambda 的配置,它通知它在处理消息时只要出现任何错误就将消息推送到此队列。
您可以在管理控制台中参考“异步调用”下的“死信队列服务”进行验证
迟到总比不到好。希望这对您或搜索此问题的人有所帮助。
当您配置 SQS 以触发 Lambda 时,DLQ 应该在 SQS 上配置(因为它不会是异步调用)。
注意 link 中的 'Note' 部分
Source
因此您的 serverless.yaml 需要在主队列中声明 ReddrivePolicy 以引用 DLQ。 (下)
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。
我正在尝试使用无服务器框架创建 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
为了给您一些背景知识,死信队列就是一个普通的 SQS 队列。它是 AWS Lambda 的配置,它通知它在处理消息时只要出现任何错误就将消息推送到此队列。
您可以在管理控制台中参考“异步调用”下的“死信队列服务”进行验证
迟到总比不到好。希望这对您或搜索此问题的人有所帮助。
当您配置 SQS 以触发 Lambda 时,DLQ 应该在 SQS 上配置(因为它不会是异步调用)。 注意 link 中的 'Note' 部分 Source
因此您的 serverless.yaml 需要在主队列中声明 ReddrivePolicy 以引用 DLQ。 (下)
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。