AWS Lambdaのレイヤーを使ってnode_modulesとLambdaを分離する方法
Lambdaにレイヤーという機能が追加されていました。
/opt配下からレイヤーが使えるようです。ちなみに/tmpも使えます。
レイヤーは共通ライブラリなどを作成しておいて、全てのLambdaから/opt配下のレイヤーを呼び出せるといった感じでしょうか。
Layerはローカル環境で作成してzip圧縮してLayerに上げるかS3から上げるか、CloudFormationでデプロイすることになりそうです。
ローカル環境でLayer.jsというファイルを作成して7zipなどで圧縮してからアップロードします。
Layer.js
module.exports = { getMessage: () => { return 'hello world'; } };
こんなデザイナーになりますのでLayerをクリックします。
レイヤーが表示されるので「レイヤーの追加」をクリックします。
レイヤーを選択し、「追加」をクリックします。
Lambdaでレイヤーを読み込みます。
const layer = require('/opt/Layer'); // レイヤーのLayer.jsファイルを読み込み exports.handler = async (event) => { const response = { statusCode: 200, body: layer.getMessage() // ここでレイヤーで定義した関数を使っている }; return response; };
こんな感じで使えます。最大5つのレイヤーが使えるようです。
node_modulesとLambdaを分離する
/opt配下にレイヤーが配置されるので、node_modulesをレイヤーにして、Lambdaと分離することができます。
pathが通っているので、nodejsというフォルダでlayerを作成する必要があるようです。
node.jsのpath |
---|
nodejs/node_modules |
nodejs/node8/node_modules |
※公式ドキュメント:https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/configuration-layers.html
このようにnode_modulesをレイヤーにすることによってLambdaのサイズが小さくすることができます。Lambdaのサイズが大きくなるとマネジメントコンソール上での編集が不可になったり、zip圧縮してもデプロイできなくなったりするので、Lambdaは軽いサイズにしておくほうが良いです。
自作モジュール含めてcloudformationでlambdaレイヤーをデプロイする方法は「Lambda Layerにnode_modulesと自作モジュールを含めてCloudFormationでLambdaデプロイする」を参照下さい。
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント