概要
Lambdaで標準ライブラリ以外を使用したい場合、モジュールをLambdaの関数と一緒にアップロードする方法がありますが、モジュールのサイズが大きいとコンソール上でコードを編集することが出来なくなります。
そのため、Lambda Layerを作成して、そこにモジュールをアップロードすることで、モジュールのサイズが大きくてもコードが編集できるようにします。
1.モジュールの準備
アップロードするモジュールを準備します。
以下を実行し、モジュールが入ったzipファイルを作成します。
なお、zipファイルが解凍されたときにpythonフォルダが出力され、
pythonフォルダ内にモジュールが入っている必要があります。
※任意のフォルダ名だと外部モジュールは使用できません。
mkdir python
pip install <モジュール> -t ./python
zip -r layer.zip ./python
2.LambdaLayerの作成
AWSコンソール画面にアクセスして、Lambdaの設定画面を開きます。
左メニューから[レイヤー]をクリック→[レイヤーの作成]をクリックします。
レイヤーの作成画面から以下を行います。
- [名前]に適当な名前を入れます。
- Zipファイルをアップロードを選択し、作成したzipファイルをアップロードします。
- アップロードするモジュールに合わせランタイムを選択します。
- [作成]をクリックし、LambdaLayerを作成します。
Lambda設定画面の左メニューより[関数]をクリックして関数一覧を表示します。外部モジュールを使用したい関数をクリックし、関数の設定画面を開きます。
画面下にレイヤー項目があるので、[レイヤーの追加]をクリックします。
レイヤーの追加画面で以下を実施します。
- [レイヤーソース]に「カスタムレイヤー」を選択します。
- [カスタムレイヤー]に作成したLambdaLayerを選択します。
※関数のランタイムとLambdaLayerのランタイムが一致しないと選択できません。 - [バージョン]を選択します。作成したばかりだと、1しかないです。
[関数の概要]項目で、Layersに追加したLambdaLayer数が表示されます。
後は、外部モジュールを使用できるようにコードを書きます。
pythonだとimport文を使用すればいいです。
まとめ
とりあえず、Layerにまとめておく方が関数にアップロードしておくより、スッキリする感じがします。バージョン管理もできるので、とりあえずLayerを作成しておいた方がいいと思います。次はTerraformで実装する方法を書きたいと思います。