如何知道哪个 Lambda 向死信队列发送了消息?

How to know which Lambda sent a message to the Dead Letter Queue?

我使用 SNS 主题作为死信队列来处理多个 Lambda 抛出的错误。在错误消息中,有以下属性:

但是,我无法轻易找到哪个 Lambda 引发了错误,因为消息中没有任何相关内容出现(例如:ARN、函数名称...)

虽然可以在 CloudWatch 上查找请求 ID,或创建多个主题,但应该有一种更简单的方法来查找哪个 Lambda 引发了错误。以下是收到的消息的结构:

{
    "Records": [
        {
            "EventSource": "aws:sns",
            "EventVersion": "1.0",
            "EventSubscriptionArn": "",
            "Sns": {
                "Type": "Notification",
                "MessageId": "",
                "TopicArn": "",
                "Subject": null,
                "Message": "",
                "Timestamp": "",
                "SignatureVersion": "",
                "Signature": "",
                "SigningCertUrl": "",
                "UnsubscribeUrl": "",
                "MessageAttributes": {
                    "RequestID": {
                        "Type": "String",
                        "Value": ""
                    },
                    "ErrorCode": {
                        "Type": "String",
                        "Value": "200"
                    },
                    "ErrorMessage": {
                        "Type": "String",
                        "Value": "test"
                    }
                }
            }
        }
    ]
}

是否有任何方法可以在触发此错误消息的 Lambda 上添加信息,例如 ARN?

您可以使用 AWS CloudTrail 来识别执行了哪个 Lambda:

https://docs.aws.amazon.com/lambda/latest/dg/logging-using-cloudtrail.html

每个 Lambda 函数应该有一个 DLQ。这将使您知道死信的来源。

我结束了配置:

  • 每个 lambda DLQ 一个唯一的 SNS 主题。
  • 监听上述主题并将请求 ID 存储在 S3 中的 lambda
  • CloudTrail 上的跟踪记录每个 lambda 调用
  • 与 S3 和 cloudtrail 日志中失败的请求 ID 匹配的 lambda。后者提供失败的 lambda 的名称。

此基础架构可能看起来有点复杂,但运行良好。它只允许在每个 lambda 配置文件中添加唯一的 onError: ... 行代码。