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

时间:2019-10-30 17:49:20

标签: aws-lambda amazon-sns

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

  • RequestID,

  • ErrorCode,

  • ErrorMessage,

但是,我无法轻易找到哪个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)?

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

每个Lambda函数应具有一个DLQ。这会让您知道死信的来源。

答案 2 :(得分:0)

我最终进行了配置:

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

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