LoginSignup
1
2

More than 1 year has passed since last update.

AWS CDK + AWS Lambda + Lambda Layers + JavaScript + VSCode 構成例

Last updated at Posted at 2022-03-09

TL; DR

  • VSCode に分からせるには tsconfig.json の paths
  • CDK に分からせるには bundling.externalModules

先行研究とか資料

重要な知識

Lambda layer は /opt 以下にマウントされる

例えば ./layers/app-base 以下にファイルだのフォルダだのたくさん置いて、このように指定したとします

stack.js
const lambda = require('@aws-cdk/aws-lambda')

    const layer = new lambda.LayerVersion(this,"theLayer",{
      code: lambda.AssetCode.fromAsset("layers/app-base"),
    })

こうすると、ローカルの ./layers/app-base/file が Lambda 環境では /opt/file としてアクセス可能になります。

同様に、フォルダが含まれる場合は ローカルの ./layers/app-base/path/to/file が Lambda 環境では /opt/path/to/file としてアクセス可能になります。

これを利用することで、Lambdaの実装コード中の記述としては require("/opt/path/to/file") となります。

しかし、このように書いてしまうと aws-lambda-nodejs を使った変換時にエラーになってしまいます(たぶん(開発のローカルマシンに /opt/path/to/file があった場合そこを見るのだろうか……))。

そこで /opt/* 以下の指定を無視するようにする必要があります。

CDK で aws-lambda-nodejs を使っている場合の除外指定

stack.js
const lfn = require('@aws-cdk/aws-lambda-nodejs');

    new lfn.NodejsFunction (this, "function", {
      bundling:{
        externalModules:[
          'aws-sdk',
          '/opt/*',
        ],
      },
    });

これで aws-lambda-nodejs を使う場合の不整合は解決されましたが、ローカルでは相変わらずエラー表示が続いているはずです(あなたの開発ローカルマシンには /opt/path/to/file は存在しないはずなので……)

tsconfig.json で読み替えをお願いする

tsconfig.json を編集します。

json/tsconfig.json

    "paths": {
      "/opt/*": [
        "./layers/app-base/*",
      ],
    },

こうすることで、ローカルでは require("/opt/path/to/file")./layers/app-base/path/to/file を見てくれるようになります。

以上。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2