AWS Lambdaのレイヤーを使ってnode_modulesとLambdaを分離する方法

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';
  }
};

AWS Lambdaのレイヤーを使ってみる

こんなデザイナーになりますのでLayerをクリックします。

レイヤーが表示されるので「レイヤーの追加」をクリックします。

AWS Lambdaのレイヤーを使ってみる

レイヤーを選択し、「追加」をクリックします。

AWS Lambdaのレイヤーを使ってみる

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デプロイする」を参照下さい。

コメント

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