基于AWS实现死信队列遇阻:Lambda报错未触发SQS队列
AWS Lambda死信队列(DLQ)配置异常:报错事件无法推送至SQS队列
我正在基于AWS实现Lambda失败事件的死信队列(DLQ)方案,已完成以下配置:
- 创建了一个名为
dlq的SQS队列 - 两个Lambda函数:
- 第一个函数执行时直接抛出错误
- 第二个函数监听上述SQS队列,收到消息时触发并将事件日志输出到CloudWatch
在AWS管理控制台中可确认:
- 抛错的Lambda函数已配置死信队列
- 监听SQS的Lambda函数配置正常——手动向SQS发送消息时,CloudWatch日志显示它能按预期触发
但目前遇到的问题是:抛错的Lambda函数报错时,无法将事件发送到SQS队列,也就无法触发监听的Lambda函数。我已查阅官方文档、观看教程视频,尝试过onError配置,均未解决该问题。
相关代码
handler.js
module.exports.function = async (event) => { throw new Error('Throwing error 🚨') } module.exports.dispatcher = async (event) => { try { console.log(`Dispached Event:${JSON.stringify(event)}`) } catch (error) { console.log(error) return error } }
serverless.yml
service: dlq-example frameworkVersion: '3' provider: name: aws runtime: nodejs14.x iam: role: statements: # Allow functions to list all buckets - Effect: Allow Action: '*' Resource: '*' plugins: - serverless-plugin-lambda-dead-letter functions: hello: handler: handler.function description: Throws error. deadLetter: targetArn: GetResourceArn: DeadLetterQueue dispatcher: handler: handler.dispatcher description: Dispatcher function. Configured to be triggered by events sent to SQS and handle them. events: - sqs: arn: Fn::GetAtt: - DeadLetterQueue - Arn resources: Resources: DeadLetterQueue: Type: AWS::SQS::Queue Properties: QueueName: dlq
AWS控制台配置截图说明
- 配置了DLQ的抛错Lambda函数截图:显示函数的死信队列已关联目标SQS队列
- 监听SQS的Lambda函数截图:显示函数的触发器配置为目标SQS队列
- SQS队列及Lambda触发器配置截图:显示SQS队列已绑定监听Lambda作为触发器
内容的提问来源于stack exchange,提问作者Sonny Fishback
相关产品推荐
相关产品推荐

