You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQS队列绑定Lambda触发场景下如何捕获函数执行的error trace

SQS触发Lambda同步执行场景错误Trace捕获方案

方案1:函数内手动捕获异常投递自定义死信

  • 在Lambda函数中增加全局异常捕获逻辑,捕获执行错误时构造包含三类信息的自定义消息:
    • 原始SQS消息的全部元信息(messageId、receiptHandle、消息体等)
    • 完整错误栈、错误类型、发生时间
    • Lambda执行上下文信息(请求ID、函数版本、内存配置等)
  • 调用SQS SDK将自定义消息发送到预先创建的专用错误死信队列,之后再抛出异常触发SQS原生红rive策略即可。原生DLQ可作为备份,业务侧直接消费自定义死信队列即可获取完整错误信息
  • 权限要求:需为Lambda执行角色添加对应SQS队列的sqs:SendMessage权限

方案2:基于CloudWatch Logs关联错误与原始消息

  • Lambda执行日志默认上报到CloudWatch Logs,错误栈会默认输出到日志流中
  • 改造Lambda日志为结构化输出,打印错误日志时主动携带当前处理的SQS消息messageId,输出示例:
    {
      "level": "ERROR",
      "sqs_message_id": "<原始SQS消息唯一ID>",
      "error_trace": "<完整错误栈内容>",
      "lambda_request_id": "<Lambda执行请求ID>"
    }
    
  • 配置CloudWatch Logs订阅过滤器,匹配ERROR级别的日志,自动将携带messageId的错误日志转存到目标存储或队列,后续可通过messageId与原生DLQ中的原始消息做关联匹配,获取完整的请求+错误信息。

方案3:利用批量失败响应携带错误摘要

如果开启了SQS事件源映射的ReportBatchItemFailures功能,可在返回批量失败项时,将错误信息编码后放到itemIdentifier字段透传:

  • 开启配置:在AWS::Lambda::EventSourceMapping资源中设置FunctionResponseTypes = ["ReportBatchItemFailures"]
  • 代码示例(Python):
    import traceback
    
    def lambda_handler(event, context):
        batch_failures = []
        for record in event["Records"]:
            try:
                # 业务处理逻辑
                process_record(record)
            except Exception as e:
                # 拼接消息ID和错误栈,注意处理换行符
                error_content = f"{record['messageId']}|{traceback.format_exc().replace('\\n', ' ')}"
                batch_failures.append({"itemIdentifier": error_content})
        return {"batchItemFailures": batch_failures}
    
  • 该方案受限于itemIdentifier字段最大1024字符的限制,适合错误栈较短的场景,超出长度需做截断处理。

内容的提问来源于stack exchange,提问作者Justin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 15:09:04