node.js
でlambdaで開発に欠かせないのがnpm package
です。
しかし、このlambda全ての関数にnode_modules
があって重い。そして、その結果、コンソールからlambdaのコードが見れない!
どうすればいいのだろうかと思ってググったら。AWS Lambda レイヤーという仕組みがあって、これを使えば、ライブラリをLayerとしてアップロードしておくことができ、ここのlambdaは、このアップロードされたLayerを使えるというもの。
Layerはコンソール上からも使えますが、実際の開発でコンソールを使うのはあまりないので、今回は、僕もよく使っているserverless frameworkの方法をメモっときます。
環境
-
macOS Catalina
- 10.15.4
-
serverless framework
- Framework Core: 1.67.3 (standalone)
- Plugin: 3.6.6
- SDK: 2.3.0
-
node.js
- v12.15.0
-
aws
- aws-cli/1.18.0 Python/3.7.3 Darwin/19.4.0 botocore/1.15.0
serverless frameworkを使ってサービスの作成
node.jsなのでaws-nodejsテンプレートを使います。
|
|
npm パッケージをインストール
ディレクトリ直下にlayerフォルダを作ります。構成はこんな感じ。
|
|
nodejs
フォルダに移動します。npmパッケージをインストールします。ここでは、試しにhello-world-npmを使います。
|
|
ここまで終わったらフォルダ構成は以下のようになっていると思います。
|
|
serverless.ymlの設定
|
|
設定は割と簡単ですね。組み込み関数Refを使って、指定したパラメータまたはリソースを返すだけ。
あとは、lambdaでhello-world-npmを読んであげればいいだけ。
|
|
これで終わりです。試しにちゃんと動くはチェック。問題なく動いてます。
|
|
ついでにAWS コンソール側も確認しておきます。
ちゃんとlayersが追加されています。
関数コード側もnode_modules
やpackage.json
やらがなくなって、スッキリしました。