@aws-cdk/aws-lambda-nodejsというCDKのモジュールがあり、Node.js関連(TypeScriptでもOK)のLambda関数を作るときに便利。
new lambda.NodejsFunction(this, 'MyFunction', {
entry: '/path/to/my/file.ts', // accepts .js, .jsx, .ts and .tsx files
handler: 'myExportedFunc', // defaults to 'handler'
});
以上のような感じで作れるので大変楽なんだけど、内部でesbuildでビルドしている関係でちょっと制限がある。esbuildはemitDecoratorをサポートしてない。対応させるためのpluginは一応@anatine/esbuild-decorators - npmというのがあって、これを使えば対応できるのだけど、aws-lambda-nodejsはプラグインが呼び出せる形式になっていない。
なので、emitDecoratorMetadata
が必要なTypeScriptのプログラムはaws-lambda-nodejsでは動かせない。自力でlayerを設定するしかない。
AWS CDKのbundlingオプションを使ってLambdaへのデプロイ前処理もCDKで管理する方法 | DevelopersIO
この記事の「その他のランタイムの場合」のところにnodejsのlayerを自分で作成する方法があるので、そちらを参考にするとよいと思います。
あとはこちらのプルリクの進捗をwatchしておくとよさそう。