如果Lambda函数引发错误(不是超时),如何将错误发送到DLQ?

时间:2018-10-18 11:45:50

标签: aws-lambda amazon-sqs

我正在使用Lambda函数,希望可以返回一些结果。因此,如果我发送了错误的参数,则它将失败,例如在函数中间。

如果在DLQ中发送任何错误,是否可以处理我的方法,在消息中打印错误,然后重试,然后删除消息?

  • CloudWatch的示例错误:
  

TypeError:commandArray不可迭代

2 个答案:

答案 0 :(得分:1)

AWS Lambda函数在异步调用上具有重试机制,如果AWS Lambda无法完全处理该事件,它将自动重试两次调用,两次重试之间会有延迟。

重试后,AWS Lambda将ERROR消息详细信息发送到指定的Amazon SQS队列或Amazon SNS主题。

https://docs.aws.amazon.com/lambda/latest/dg/retries-on-errors.html

由于任何原因(异常/超时),错误消息均不包含失败的Lambda函数名称。要在错误消息中添加lambda函数名称,您可以考虑两个主意。

解决方案-1

  • Lambda函数名称可以通过S3 API找到,S3存储桶详细信息可以通过错误消息中接收到的事件对象找到。

解决方案-2

惯例:SNS主题名称中包含lambda函数名称

  • 将SNS主题配置为lambda函数
  • 将Lambda函数添加到SNS主题订户列表中
  • 订阅的lambda函数可以从SNS主题名称获取lambda函数名称,并且可以在收到的错误消息中添加任何自定义详细信息

答案 1 :(得分:0)

Lambda可以重试并将故障注入死信队列。

  

在丢弃事件之前,将重试两次任何异步调用的Lambda函数。如果重试失败,但您不确定原因,请使用死信队列(DLQ)将未处理的事件定向到Amazon SQS队列或Amazon SNS主题以分析失败。

然后,您可以在SNS主题或SQS队列上具有Lambda函数,该Lambda函数可以响应错误并以您希望的方式做出反应。

有关更多信息,请参见:https://docs.aws.amazon.com/lambda/latest/dg/dlq.html