AWS LambdaでNode.jsを使っていた時にnode_modulesにあるライブラリを使おうとした時にちょっと詰まったので、備忘録として残そうと思います。
あとは、アドベントカレンダーに沿ってアウトプットの大切さを書きます。
node_modulesの導入
前提条件
- npm コマンドが使える環境があること
- ローカルマシンでも問題ありません
簡単な流れ
- ディレクトリの用意
- 必要なライブラリをインストール
- ディレクトリのzip化
- レイヤー登録
- Lambda関数でレイヤー追加
- Lambda関数のコードでライブラリを読み込む
ディレクトリの用意
初っ端から一番大事です。作成する場所はどこでも良い(ローカルマシンでも可)ですが、ディレクトリの名前が重要です。
「nodejs」という名前のディレクトリを生成します。
$ mkdir nodejs
これについてはドキュメントにあります。
必要なライブラリをインストール
生成したディレクトリの中で、コマンドを叩いてライブラリをインストールします。
$ cd nodejs
$ npm i <ライブラリ名>
ここで、一旦nodejsディレクトリからの構成を見直してみます。
以下のようになっていれば大丈夫です。
nodejs/node_modules/<ライブラリ名>
ディレクトリのzip化
nodejsディレクトリをzip化します。
生成するzipファイルの名前は何でもいいです。
windowsならコマンドなくてもzip生成できますが、できない環境の場合はコマンドでzip化します。
$ zip -r lib.zip ./nodejs
レイヤー登録
生成したzipをAWS Lambdaのレイヤーに登録します。
必要な情報を入力します。好きな名前をつけて問題ありません。
「アップロード」のボタンで生成したzipファイルをアップロードします。
ライブラリが多くて、zipが10MBを超える場合はS3を使用すると良いみたいです。
Lambda関数でレイヤー追加
Node.jsランタイムのLambda 関数を編集する画面の一番下に、レイヤーを設定する箇所があります。
「レイヤーの追加」を選択します。
レイヤーソースは「カスタムレイヤー」を選択します。
ドロップダウンから、登録したレイヤーを選んで「追加」を押せば完了です。
Lambda関数のコードでライブラリを読み込む
レイヤーの追加までできれば、コードから読み込むことができます。
これで終了です!お疲れ様でした!
const HOGE = require('<ライブラリ名>');
アウトプットする理由
ここからはアウトプットの良さについて語っていきます。
個人的に一番大きいのは、自分の中で情報を整理し、保存することが出来るところだと思います。
今回私は、AWS Lambdaを使用する上で詰まって解決したところを記事としてまとめました。
対応している最中は、手探りで試行錯誤を繰り返しています。
つまり、様々な情報がごちゃまぜの状態です。
解決方法が見つかったとしても、このままアウトプットしなかった場合はどうなるか。
おそらくそのまま忘れて、次回似たような事が起こった時にまた同じことを調べると思います。
当時自分が書いたコードも、数カ月後に見れば「誰だこのクソコードを書いたのは?」と感じるように人間はすぐに忘れる生き物です。
では今回のように、Qiitaに記事として投稿したとします。
記事として多くの人に見てもらうので、記事の書き方を考えるでしょう。
(この「多くの人」というのは未来の自分自身も含まれます)
どうすれば今回の問題をわかりやすく伝えられるか、誤解を生まない文章はなにか、なにをしたら解決できたのか。
これらを考えることで今回得た情報を整理します。ごちゃ混ぜ状態だった情報が整理される訳です。
情報を分かりやすく整理し、保存することで後から振り返ったり、より理解のある人から意見をもらえたりします。
意見の交流は自分の成長に大きく繋がります。
アウトプットで自分や、他の人の成長に繋がれば嬉しいですね。