update
2019/06/03に確認したところログへの書き込みは修正されていました!
ERROR Invoke Error というprefixと共に書き込まれていました。エラーの種類でこのあたりは変わるのかもしれません。
AWS LambdaのNode.jsランタイムが10.xをサポートしました 🎉
v6系がEoSになってもなかなか来なかったので、どうした事かと思っていましたが自動的な10.x系でのランタイムバージョンアップ機能やAmazon Linux2への対応で時間がかかっていたのでしょう。
さっそく踏み抜いた
前回 LambdaのNode.js v8.10でタイムゾーンを指定してもDateがUTCになる問題 と同様にさっそく喜び勇んでランタイムを変更したところ不具合を踏み抜きました。
エラー時の自動的なCloudWatchLogsへの書き込みが動作しない
以下のドキュメントにあるようにエラーを返却するとエラーのstring representationが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");
};
nodejs10.x
v8.10の時とは内容に若干違いがあるものの、レスポンスにはエラーが返ってきますが下部にあるCloudWatch Logsの方には出力がありません。
nodejs8.10
nodejs8.10だとCloudWatch Logsにも出力されています。
仕様 or 不具合
サポートに問い合わせたところ想定外の挙動で今後修正が予定されるとのことです。仕様変更じゃなくてよかった。
修正されるまで
console.log での出力は普通にされるので、しょうがないのでcatchしてログ記録してエラーを投げなおすか修正待ちになるかなと。
こんな感じになるでしょうか。美しくないですね。私は修正待ちにしようかと思います。
exports.handler = async (event) => {
try {
throw new Error("my error");
} catch(e) {
console.log(e);
throw e;
}
};


