はじめに
Pythonを扱う前提の記事です。
Layers(レイヤー)とは
ガイドによると
レイヤーは、ライブラリ、カスタムランタイム、またはその他の依存関係を含む ZIP アーカイブです。レイヤーを使用することで、関数のライブラリを使用することができます。
ライブラリのような共通で使用するモジュールをLayerにすることで、デプロイパッケージにライブラリを含める必要がなくなります。
つまり、Lambdaでサードパーティ製のライブラリやモジュールを使用する際に、Layerに格納して各Lambda関数から呼び出して使用するというような使い方ができます。
注記
・Lambdaで一度に利用できるLayerは5つまで
・解凍後のデプロイパッケージのサイズ制限 250 MB
ディレクトリ構成
Lambda実行環境のパスは /opt ディレクトリとなるので、
Layerのディレクトリ構成としては /opt/python/Layer となります。
レイヤー自体のパッケージ構成はこんな感じ。
python
├ layer.py (共通処理などコードも入れられます。common的に扱える)
├ Crypto (外部ライブラリその1)
├ psycopg2 (外部ライブラリその2)
├ sqlalchemy (外部ライブラリその3)
…etc
Layerの作成
ローカルで作成してみます。
ライブラリを場所指定でpip installする。
$ pip install pycryptodome -t .
そしてzip
$ zip -r ../python .
AWS上でLayerの作成を行います
上から順に
・名前(必須)
・説明(なくても可)
・アップロード(先ほど作成したzipを選択)
・互換性のあるランタイム - オプション(忘れがちになるので注意)
・ライセンス - オプション(なくても可)
「作成」をクリックしLayerを作成します。
Lambda関数に紐付け
今度はLambda関数にLayerを紐付けます。
Layerを紐付けたいLambda関数から「デザイナー」を選択し、
「レイヤーの追加」を選択。
「レイヤーの選択」から「カスタムレイヤー」をクリックし作成したLayerを選びます。
その後「バージョン」を設定し、「追加」をクリックして完了です。
Lambdaから呼び出すときはimportして呼び出します。
import layer
よくあるミス
・LambdaはAmazon Linux上で動作するので、
pip installした環境によっては実行エラーとなるライブラリもあります。
・AWSにアップロードしたLayerはバージョンごとにダウンロードすることも出来ます。
そしてLayerが増えてくるとディレクトリで、こんな感じで管理することもあるかと思います。
test_layer
├ python
├ layer.py
├ Crypto
この場合、そのまま解凍し修正してzipしがちですが、
そのままzipすると親ディレクトリも圧縮してしまいアップロード後の展開時にディレクトリ階層とマッチしなくなるので
作成した時と同じく中身をzipしましょう。
$ zip -r ../python .
まとめ
Layerは上手く使えばLambda間でのコード共有など非常に便利です。
上手く活用していきましょう。
参考