在Lambda的Node.js 10.x中,当出现错误返回时,不会自动写入到CloudWatch Logs的问题
更新
我在2019年06月03日进行确认时发现,日志写入的问题已经修复了!
错误被写入并附有“ERROR Invoke Error”前缀。根据错误类型,可能会有所不同。
AWS Lambda现在支持Node.js 10.x运行时 ?
由于v6系列迟迟没有成为EoS,我一直在思考发生了什么问题,但可能是由于自动更新功能的运行时版本升级和对Amazon Linux2的支持而花费了一些时间。
立即踏入
和上一次在Lambda的Node.js v8.10中指定时区后变成UTC时间的问题类似,我兴高采烈地立刻改变了运行环境,结果遭遇到了故障。
自动将错误写入CloudWatchLogs时无法工作。
根据以下文档,如果返回错误,则错误的字符串表达将自动写入CloudWatch Logs。
https://docs.aws.amazon.com/lambda/latest/dg/nodejs-prog-model-handler.html
The callback method automatically logs the string representation of non-null values of error to the Amazon CloudWatch Logs stream associated with the Lambda function.
然而在nodejs10.x环境下无法运行。使用以下的重现代码。
exports.handler = async (event) => {
throw new Error("my error");
};
Node.js10.x- 使用Node.js的10.x版本
尽管在v8.10版本上有一些不同的内容,响应仍会返回错误,但在下方的CloudWatch Logs中没有输出。
Node.js 8.10 可以使用 JavaScript 平台开发和运行服务器端应用程序。
在Nodejs 8.10版本中,日志也会输出到CloudWatch Logs中。
规格或故障
售后支持表示查询后发现出现了意料之外的行为,并计划修复。很高兴这不是规格变更。
在修正之前
只需要一个选项吗?这是我的其中一个选项:
考虑到console.log的输出通常会被执行,无法忍受这个问题,所以我会使用catch进行日志记录,然后重新抛出错误或者等待修复。像这样子应该可以吧。虽然不太优雅,但我倾向于选择等待修复。
exports.handler = async (event) => {
try {
throw new Error("my error");
} catch(e) {
console.log(e);
throw e;
}
};