高容量 Lambda 函数上的“LAMBDA_RUNTIME”错误

Mal*_*tor 6 amazon-sqs amazon-web-services aws-lambda

我目前正在使用用 Javascript 编写的 Lambda 函数,该函数设置了 SQS 事件源,以自动从 SQS 队列中提取消息并对消息内容进行一些基本处理。我无法显示代码,但 lambda 函数的执行摘要基本上是:

对于批处理中的每条消息,它作为事件的一部分接收:

  1. 它将主体(JSON 字符串)解析为 Javascript 对象。
  2. 它从 S3 中读取一个对象,该对象使用getObject.
  3. 它使用 将记录放入 DynamoDB 表中put
  4. 如果没有错误,它会删除使用deleteMessage.

这个 SQS 队列是高容量的,并且批量接收消息,定期积压数百万条消息。Lambda 通常能够扩展以同时处理数十万条消息。这个解决方案过去在其他应用程序中对我来说效果很好,但我现在遇到了以下间歇性错误,随着 Lambda 的扩展,这些错误开始可靠地出现:

[ERROR] [#############] LAMBDA_RUNTIME Failed to post handler success response. Http response code: 400.
Run Code Online (Sandbox Code Playgroud)

我一直无法在任何地方找到有关此错误含义及其原因的任何信息。对于哪些处决遇到它,似乎没有明显的模式。该函数通常能够运行一小段时间而不会遇到错误并扩展到预期水平。但是,正如您所看到的,错误开始突然出现并通过强制其自动缩减来完全破坏 Lambda 吞吐量:

有谁知道这个“LAMBDA_RUNTIME”错误是什么意思以及可能导致它的原因是什么?我的 Lambda 函数运行时是 Node v12。

Jes*_*ker 6

我只收到此错误:
[ERROR] [1638918279694] LAMBDA_RUNTIME Failed to post handler success response. Http response code: 413.

我转到 aws 控制台上的 lambda 函数,并使用我构建的自定义事件运行测试,得到的错误是:

{
    "errorMessage": "Response payload size exceeded maximum allowed payload size (6291556 bytes).",
    "errorType": "Function.ResponseSizeTooLarge"
}
Run Code Online (Sandbox Code Playgroud)

因此,这是 cloudwatch 不会返回但 lambda 函数控制台的测试部分会返回的实际错误。

我想我必须将信息返回到 S3 文件或其他文件,但这是另一回事。

  • 嗯,不确定是否回答了问题,但这建议他通过 aws lambda Web 控制台测试该函数并获得不同的错误消息,并分享了我的案例以及它如何为我提供更多信息。如果我违反了某些规则,那不是我的本意 (2认同)

小智 4

您的函数是异步调用的,因此当它完成时,它会向调用者发出信号是否成功。您应该在几毫秒前出现错误,可能是未记录未处理的异常。如果是这种情况,您的函数将在不知道异常的情况下结束,并尝试发布成功响应。

  • 这是对我帮助最大的答案。我们的 Lambda 使用第三方服务以异步方式推送日志。错误消息是“在建立安全 TLS 连接之前客户端网络套接字已断开”。以下是我使用的 AWS CloudWatch Log Insights 查询:````fields @timestamp, @message | 过滤消息 LIKE /Uncaught/ | 排序 @timestamp desc | 限制2000```` (2认同)