AWS CDKでnode_modulesを含めてLambda(node.js)デプロイする方法

AWS CDKでnode_modulesを含めてLambda(node.js)デプロイする方法

前提

CDKプロジェクト作成は「AWS CDKでLambda(node.js)をデプロイする」参照してください。

node_modulesを含める

AWS CDKはすごい便利っぽいけども、node_modules(外部ライブラリ)や共通のjsはどうするんだろうと思ってとりあえずnode_modulesの含め方です。

npm i --save-dev esbuild@0

bundleするesbuildモジュールというのを追加する必要があるようです。webpackみたいなものだと思います。

その後に、ここではmoment-timezoneを外部依存として追加します。

npm i --save moment-timezone

moment-timezoneを追加してpackage.jsonに含めておきます。

lib配下のts修正

tsファイルを修正します。

import { Stack, StackProps, aws_lambda_nodejs as lambda, Duration } from 'aws-cdk-lib';
import { Runtime } from 'aws-cdk-lib/aws-lambda';
import { Construct } from 'constructs';

export class Sample001Stack extends Stack {
  constructor(scope: Construct, id: string, props?: StackProps) {
    super(scope, id, props);

    const index = new lambda.NodejsFunction(this, 'IndexHandler', {
      entry: "lambda/index.js",
      runtime: Runtime.NODEJS_16_X,
      timeout: Duration.minutes(10),
      bundling: {
        nodeModules: ['moment-timezone']
      }
    })
  }
}

buildingオプションでモジュールを配列で指定します。

building: {
  nodeModules: ['追加するモジュール','追加するモジュール',...]
}

という感じで指定が必要なようです。

これでデプロイします。

cdk deploy

node_modules入ってます。

AWS CDKでnode_modulesを含めてデプロイする方法

top level awaitがサポートされていない

AWS CDKでデプロイしたLambdaに関して、現時点では、esbuildでtop level awaitがサポートされていないようです。

support for top level await · Issue #253 · evanw/esbuild
I am currently working with deno which has top level support, is there any way to use esbuild with top level await?

参考サイト

@aws-cdk/aws-lambda-nodejs module · AWS CDK
Language | Package
CDKを使ったLambdaデプロイの最適解を考える

コメント

株式会社CONFRAGE ITソリューション事業部をもっと見る

今すぐ購読し、続きを読んで、すべてのアーカイブにアクセスしましょう。

続きを読む

タイトルとURLをコピーしました