【发布时间】:2022-01-12 18:44:24
【问题描述】:
我使用 AWS Lambda 并使用本地 SAM 进行了近一年的测试,没有出现重大问题。但是,我编写了一个 Lambda 函数,它使用 S3 API 修改一些文件。
函数以 502 结束:收到无效的 lambda 响应:Lambda 返回
这是在我的函数有机会完成之前... 我设法将代码压缩为以下内容:
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