AWS CDKのNodejsFunctionでsource mapを使う
課題
NodejsFunction、TSをバンドルしてデプロイまでシュッとやってくれてめっちゃ便利。
けど、trace logががsource map効いてなくて/var/task/index.js:73679:5
ってなってしまう。
対策
以下のように設定する。 (追記の通り、とくに本番環境では推奨されません。)
new NodejsFunction(this, 'lambda-function', { environment: { NODE_OPTIONS: '--enable-source-maps', }, bundling: { sourceMap: true, }, });
2022-03-07追記
以下の記事の通り、現在--enable-source-maps
NODE_OPTIONS を使用すると、nodeの実行パフォーマンスが著しく落ちます。
NODE_OPTIONS=–enable-source-mapsを有効化したらLambdaのコールドスタートが1.5秒から5.3秒まで悪化した話
このパフォーマンス問題はnodejs自体の問題です。
対策2で示すとおり、lambdaのコードに追記して対応するのが良さそうです。
対策2
対策1はパフォーマンス問題の懸念があるためこちらが推奨されます。
1. source-map-support
をインストールする。
npm i source-map-support npm i -D @types/source-map-support
or
yarn add source-map-support yarn add -D @types/source-map-support
2. lambdaのhandlerの先頭に以下の記述を追加する。
import 'source-map-support/register'
3. cdkのNodejsFunctionを以下のように設定する。
new NodejsFunction(this, 'lambda-function', { bundling: { sourceMap: true, }, });
余談
AWS CDKにissue立ててPRも出してたけど、同じ理由でお蔵入りするなどした。CloudWatch Logsのソースマップサポートが待たれるなぁ。。。