AWS Lambdaには、共通の関数などをパッケージ化するLambdaLayerという機能があります。
これを使えば、Lambdaごとに同じような処理を書かなくてよいですし、共通機能の変更はLambdaLayerを変更するだけですべてのLambdaに適用することができます。
今回は、そんな便利な機能であるLambdaLayerの使い方について説明していきます。
LambdaLayer本体の作成
今回はPythonを例に説明していきます。
LambdaLayerといってもその実態は、ただの共通ライブラリです。
なので、まず作るべきは共通化したい関数を集めたpythonのプログラムを作ることです。
例えば以下のような感じです。
def sample_method1(): print("sample_method1") def sample_method2(): print("sample_method2") def sample_method3(): print("sample_method3")
こんな感じで、共通関数を列挙していきます。
LambdaLayer本体の作成はこれで完了です。
LambdaLayerをZIP圧縮
作成したプログラムをLambdaLayerとして使用するには、そのプログラムをZIP圧縮してAWS上にアップロードする必要があります。
ZIP化する際には、以下のようにpythonディレクトリの配下に作成したLambdaLayerを配置する必要があります。
python LambdaLayerSample.py
このようなディレクトリ構造で、python.zipを作成します。
作成したpython.zipを以下のようにAWSコンソール上からアップロードします。
「Lambda>Layer>レイヤーの作成」を選択。
それぞれの項目を設定していきます。
名前 | LambdaLayerの名前。あくまでAWS上での管理名で、参照の時に使用されるわけではない。 |
---|---|
説明 - オプション | LambdaLayerの簡単な説明を入力。 |
アップロード | 先ほど作成したZIPファイルをアップロードする。 |
互換性のあるランタイム - オプション | LambdaLayer使用できる言語を指定できます。今回はPythonで使用するのでPython3.7を選択します。 |
作成完了。
LambdaからLambdaLayerを参照する
最後に作成したLambdaLayerをLambdaから使用してみます。
まずはLambdaコンソールからLambdaLayerを追加します。
「Designer」から「Layers」を選択します。
「レイヤーの追加」を選択。
レイヤーとバージョンを選択します。
以下のように追加されていればOKです。
コンソールからのLambdaLayerの参照が完了したら、次はプログラム上から参照設定を行います。
使用する際は、以下のように「import プログラム名」で参照が可能です。
# LambdaLayerの参照設定。sampleはエイリアス(別名)。 import LambdaLayerSample as sample def lambda_handler(event, context): # LambdaLayerの呼び出し sample.sample_method1()
注意点としては、先ほども書きましたが、参照名がLambdaLayer名ではないということです。
あくまでZIP圧縮したファイルの中にあるプログラム名を記載する必要があります。
例えば、LambdaLayer名が「LambdaLayerSample」でも、ZIPファイルの中身が「LambdaLibrary.py」だとしたら、参照設定は、「import LambdaLibrary」となります。