AWS Lambda
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

AWS Lambda 函数死信队列

任何异步调用的 Lambda 函数都将重试两次,然后才会丢弃事件。如果重试失败并且您无法确定具体原因,请使用死信队列 (DLQ) 将未处理的事件直接发送到 Amazon SQS 队列或 Amazon SNS 主题以分析失败原因。

AWS Lambda 会将无法处理的事件直接发送到指定的 Amazon SNS 主题Amazon SQS 队列。未指定 DLQ 的函数会在用尽重试次数之后丢弃事件。有关重试策略的更多信息,请参阅AWS Lambda 重试行为

要配置 DLQ,您可以在 Lambda 函数的 DeadLetterConfig 参数上指定 Amazon 资源名称 TargetArn 值。

{ "Code": { "ZipFile": blob, "S3Bucket": "string", "S3Key": "string", "S3ObjectVersion": "string" }, "Description": "string", "FunctionName": "string", "Handler": "string", "MemorySize": number, "Role": "string", "Runtime": "string", "Timeout": number "Publish": bool, "DeadLetterConfig": { "TargetArn": "string" } }

此外,您需要向您的 Lambda 函数的执行角色添加权限,具体取决于您已定向未处理的事件的服务:

写入 DLQ 目标 ARN 的负载将成为未修改消息正文的原始事件负载。消息的属性包含有助于您了解事件未经处理的原因的信息:

DLQ 消息属性

名称 类型
RequestID 字符串 唯一的请求标识符
ErrorCode 数字 HTTP 3 位数错误代码
ErrorMessage 字符串 错误消息 (被截断为 1 KB)

由于权限问题,或者如果邮件的总大小超过目标队列或主题的限制,DLQ 邮件可能无法到达其目标。例如,如果正文接近 256 KB 的 Amazon SNS 通知触发导致错误的功能,则 Amazon SNS 添加的附加事件数据与 Lambda 添加的属性相结合,可能会导致消息超过 DLQ 中允许的最大大小。当它无法写入 DLQ 时,Lambda 会删除事件并发出 DeadLetterErrors 指标。

如果您使用 Amazon SQS 作为事件源,请在 Amazon SQS 队列本身上而不是 Lambda 函数上配置 DLQ。有关更多信息,请参阅配合使用 AWS Lambda 和 Amazon SQS