【问题标题】:Why is my AWS Lambda function ending before finishing with no timeout message?为什么我的 AWS Lambda 函数在没有超时消息完成之前就结束了?
【发布时间】:2022-01-12 18:44:24
【问题描述】:

我使用 AWS Lambda 并使用本地 SAM 进行了近一年的测试,没有出现重大问题。但是,我编写了一个 Lambda 函数,它使用 S3 API 修改一些文件。

函数以 502 结束:收到无效的 lambda 响应:Lambda 返回 而不是 dict

这是在我的函数有机会完成之前... 我设法将代码压缩为以下内容:

exports.handler = async (event, context) => {
    console.log("Goldi");
    await fish(event, context);
    console.log("Locks");
    return { statusCode: 200, body: "Finished!" };
};

无论我是在 SAM Local 中运行它还是上传到 AWS Lambda,我都会得到以下输出:

START RequestId: 6a30e157-3e9b-465e-a945-3e9f7fa2cd7e Version: $LATEST
2022-01-12T18:36:27.601Z        6a30e157-3e9b-465e-a945-3e9f7fa2cd7e    INFO    Goldi
2022-01-12T18:36:27.603Z        6a30e157-3e9b-465e-a945-3e9f7fa2cd7e    INFO    Some output from fish()...
END RequestId: 6a30e157-3e9b-465e-a945-3e9f7fa2cd7e
REPORT RequestId: 6a30e157-3e9b-465e-a945-3e9f7fa2cd7e  Init Duration: 0.18 ms  Duration: 12600.03 ms   Billed Duration: 12700 ms       Memory Size: 512 MB     Max Memory Used: 512 MB
Invalid lambda response received: Lambda returned <class 'NoneType'> instead of dict
2022-01-12 18:36:38 127.0.0.1 - - [12/Jan/2022 18:36:38] "POST / HTTP/1.1" 502 -

我已将此 Lambda 函数配置为有几分钟的超时时间,并且我不在“上下文”中调用任何函数

我花了几个小时试图弄清楚 Lambda 函数如何在没有任何错误消息(来自我的代码)或超时通知的情况下结束。

这是一种已知的行为吗?有谁知道我如何找出导致函数突然停止而没有输出的原因?

【问题讨论】:

  • fish() 是否真的被声明为异步?它返回什么?
  • fish() 仅返回一个对象:{ statusCode: 200 }; 但是代码甚至没有运行到 return 语句,Lambda 函数在 fish() 完成之前结束。
  • 值得添加 fish() 的代码,至少是仍然重现问题的最低限度,这样这里的人就可以使用它进行测试。
  • 顺便说一句,您的日志显示运行时间为 12 秒,因此 fish() 函数似乎不太可能仅返回以下对象:{ statusCode: 200 }。它正在做更多的工作。它是否有记录错误的异常处理代码?

标签: amazon-web-services aws-lambda timeout sam


【解决方案1】:

如果超时正确,内存大小配置是多少,可能是内存阻碍了性能

【讨论】:

  • 我已将内存限制从 512 增加到 4096,但问题仍然存在。在我的计算机上监控性能时,这个 lambda 函数根本没有使用太多内存。
【解决方案2】:

当 lambda 突然退出其中一个代码路径时,可能会发生这种情况。 Java 中 System.exit() 行中的内容。

在 JS 中,lambda 循环运行以消耗事件。 如果您的 fish 函数通过调用运行时结束/关闭应该发送响应的套接字来关闭 lambda 环境。 Lambda 将自行完成,不会发送响应或超时。

req.on('socket', function (socket) { socket.unref() })

【讨论】:

    猜你喜欢
    • 2018-08-12
    • 2019-10-09
    • 1970-01-01
    • 2019-09-17
    • 2019-02-06
    • 1970-01-01
    • 2021-04-03
    • 2015-04-26
    • 1970-01-01
    相关资源
    最近更新 更多