在Lambda的Node.js 10.x中,当出现错误返回时,不会自动写入到CloudWatch Logs的问题

更新

我在2019年06月03日进行确认时发现,日志写入的问题已经修复了!

错误被写入并附有“ERROR Invoke Error”前缀。根据错误类型,可能会有所不同。

スクリーンショット 2019-06-03 13.45.37.png

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中没有输出。

スクリーンショット 2019-05-17 11.13.01.png

Node.js 8.10 可以使用 JavaScript 平台开发和运行服务器端应用程序。

在Nodejs 8.10版本中,日志也会输出到CloudWatch Logs中。

スクリーンショット 2019-05-17 11.13.40.png

规格或故障

售后支持表示查询后发现出现了意料之外的行为,并计划修复。很高兴这不是规格变更。

在修正之前

只需要一个选项吗?这是我的其中一个选项:
考虑到console.log的输出通常会被执行,无法忍受这个问题,所以我会使用catch进行日志记录,然后重新抛出错误或者等待修复。像这样子应该可以吧。虽然不太优雅,但我倾向于选择等待修复。

exports.handler = async (event) => {
    try {
        throw new Error("my error");
    } catch(e) {
        console.log(e);
        throw e;
    }
};
广告
将在 10 秒后关闭
bannerAds