node_modulesをLambdaレイヤーにアップロードしてライブラリを使用する


経緯

  • 同じライブラリを使用しているLambda関数が増えた
  • コンソール画面からコードを編集できるようにしたい
  • 上記の理由から、layerに共通ライブラリを登録し、それを読み込ませることでLambda関数を軽量化する

環境

  • ローカルOSはWindows10(Macでもで順は同様)
  • LambdaはNode.jsを使用

node_modules準備

  • 『nodejs』という名前のフォルダを作成する

※名前がめちゃくちゃ大事です。layerはnodejs/node_modulesのフォルダ構成じゃないと読み込んでくれません(正確に言えばopt直下に生成されるのでopyt/nodejs/node_modulesとなりますが気にしなくて良いです)

① 新規で準備する場合

→作ったフォルダ直下にnode_modulesを作成

npm install 必要なライブラリ名

② すでにnode_modulesフォルダが有る場合

→node_modulesフォルダを先程作ったnodejsフォルダに移動する

  • nodejsフォルダをzip化する

Lambdaレイヤーの作成

  • AWS Lambdaのレイヤーから「レイヤーの作成」をクリック

  • 名前を入力
  • 先程zip化したフォルダをアップロード
  • ランタイムを選択(今回はNode.jsを選択)
  • 「作成」ボタンをクリック

これでレイヤーは完成です

Lambda関数への適用

  • 適応するLambda関数の「設定」→「デザイナー」→「Layers」を選択し、下の「レイヤー」→「レイヤーの追加」をクリック

  • 名前とバージョンを先程作ったレイヤーに設定(新規で作った場合はバージョン1です)

  • 各関数からレイヤーに上げたモジュールを削除する

これでパッケージとして動いていた時と同じ動作をするはずです