こんばんわ、フリーランスエンジニアの堀口です。
前回はSAMについて書かせていただきましたが、今回はLambdaのLayerについてです。
複数のLambdaを実装していくと、同じような処理を色々なLmabdaで実装する必要が出てくる時があるかと思います。
Lambdaを1つの閉じられた処理と考えれば同じような処理が合っても仕方ないと思う人もいるかもしれませんが、
メンテナンスを考えるとこのような状況はあまりよくありません。
このような課題を解決するのが、LambdaのLayerになります。
技術的には、Layer は ZIP で登録された追加ファイル群であり、Lambda 実行時に関数本体のコードへ “上乗せ” でマウントされます。
実行環境では /opt 配下に展開され、Python であれば python/ ディレクトリ以下のモジュールが自動的にインポートパスに含まれます。
Layer を使うことで、以下のようなメリットがあります。
①DB 接続やログフォーマットなど「全 Lambda で揃えたいルール」を Layer に閉じ込めることで、各関数が薄く・レビューしやすくなる
②依存ライブラリを各関数に同梱しなくて済むため、関数ごとの zip が軽くなる
物理的な制限として、1 関数あたり最大 5 Layer、関数本体+Layer の展開後サイズ合計 250 MB という上限があります。分けすぎ・入れすぎには注意しましょう。
「共通処理のコピペが増えてきたな」と感じたら、Layer の導入を検討してみてください。