【AWS】Lambdaレイヤーでライブラリを共通化

Lambdaレイヤーの作成方法

LambdaデプロイパッケージではLambda関数ごとにライブラリをzipファイルで用意する必要がありましたが、lambdaレイヤーという機能を使用することで複数のLambda関数で使用するライブラリの共通化を行うことが出来ます。

本記事では関数のランタイムをPython3にしていますが、それ以外の言語でも基本的な仕組みや考え方は同じです。

ライブラリの用意

デプロイパッケージで行うように、目的のライブラリをzipファイルに含めます。

ディレクトリ名を指定

zip化するライブラリを含めるディレクトリ名を、
pythonもしくはpython/lib/python3.8/site-packagesとする必要があります。
(ランタイムがPythonの場合)

これは、Lambda環境の/optというパスが関数実行時のライブラリ検索パスとなっており、
パスを定義された名称に揃えることで、レイヤーの内容が関数内からimport出来るようにするためです。

Lambdaランタイム ごとに、PATH 変数には /opt ディレクトリ内の特定のフォルダが含まれます。レイヤー .zip ファイルアーカイブに同じフォルダ構造を定義すると、関数コードはパスを指定しなくても、レイヤーコンテンツにアクセスできます。

公式ドキュメント 「ライブラリの依存関係をレイヤーに含める」より
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/configuration-layers.html#configuration-layers-path

1. 開発環境にて、Pythonディレクトリを作成

2. (例) pyminizipライブラリを用意する

3. zip化

zipファイル自体の名前は任意で問題ないようです。

レイヤーの作成

ライブラリの準備が出来たら、コンソールよりLambdaレイヤーを作成していきます。

Lambda > レイヤー > レイヤーの作成

任意のレイヤー名を設定し、用意しておいたzipをアップロードします。

ランタイムを実行する関数と同じものに揃え、作成します。

レイヤーの作成が完了したら、Lambda関数一覧から対象を選択し、画面下部のレイヤー追加をクリック。

「カスタムレイヤー」から、先ほど作成したレイヤーとバージョン(初めて作成した場合は1のみ)を選択し追加をクリック。

作成が正常に行えると対象よりレイヤーの紐付けを確認できます。

1つの関数に対して最大で5つまでレイヤーを使用できます。

Follow me!