amazon-web-services - 无服务器框架如何创建 AWS SQS DeadLetter 队列?
问题描述
我正在尝试使用无服务器框架创建 AWS SQS 死信队列
想法是让 SQS 触发 Lambda 函数,
并让另一个 SQS 作为死信队列,即。在 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 以触发 Lambda 时,应该在 SQS 上配置 DLQ(因为它不会是异步调用)。注意链接 源中的“注释”部分
因此,您的 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。
推荐阅读
- php - 在文件名上而不是在模板上排队
- c# - 访问令牌过期
- jquery - jQuery Ajax jSON 将变量数组值设置为 ajax JSON
- javascript - 在控制台中执行时显示此 JQuery 错误
- java - 带有 URI 的 Java 相对路径
- ios - iOS 错误:检测到堆损坏,空闲列表已损坏且保护值不正确:0
- python - AttributeError: 'list' 对象在尝试围绕 assertEquals 进行包装时没有属性 '_getAssertEqualityFunc'
- angular - Angular 升级后 E2E 打字稿测试没有被转译
- shell - 根据shell脚本中的特殊字符从变量中提取子字符串
- angular - 使用angular2更改html中的值