・AWS Lambdaのレイヤー機能の紹介
・Pythonでの作成方法と関数内の利用方法
はじめに
AWS Lambdaにはレイヤーと呼ばれる機能があります。
ライブラリとかのように各関数で共通している処理をまとめる場合などに使います。
今回はPythonでレイヤーを作成してPythonで作成した関数で呼んでみます。
Lambda関数の作成方法は下記を参照ください。
Pythonコード作成
まずはレイヤーとして使うPythonコードを用意します。
テスト用なので簡単に今日を返すコードです。
import datetime
# 本日取得
def get_today():
today = datetime.datetime.now()
return today
レイヤー作成前の準備
コードを作成したらレイヤーへアップロードする前の準備が必要です。
まずは現時点でのフォルダ構成は下記となります。
python
└test.py
このフォルダをZip化します。
Zip化する場所は「python」フォルダから行います。
注意点としては、Zip化するフォルダは「python」であることと、zipファイルのファイル名は「layer.zip」にする必要があります。
レイヤー作成
「layer.zip」ファイルを作成したらAWS Lambdaからレイヤーを作成します。
AWS Lambdaコンソールからレイヤーを選択して、「レイヤーの作成」を選択します。
https://console.aws.amazon.com/lambda/home
レイヤー作成画面にて任意の名前を入力します。
前述にて作成したZipファイルをアップロードします。
ランタイムについてはPython3.7を設定しています。
ここで設定したランタイムと、Lambda関数で設定したランタイムと一致しているレイヤーのみ設定可能です。
名前・ファイル・ランタイムが設定出来たら「作成」を選択します。
AWS Lambda関数作成
続いてLambda関数を作成します。
細かい作り方は下記を参考してください。
AWS Lambda関数にてレイヤーを設定
上記で簡単なLambda関数を作成したらレイヤーを追加します。
コードタブの最下部にあるレイヤーから「レイヤーの追加」を選択します。
ここで表示されない場合はランタイムが関数とレイヤーであっていない可能性もあります。
AWS Lambda関数でレイヤーの内容を利用
Lambda関数内でレイヤーを使う準備は整いましたのであとは関数内で呼ぶだけです。
呼び方はライブラリと同じでインポートを使います。
import json
import test
def lambda_handler(event, context):
hoge = json.dumps(['hoge', 'Hello World'])
print(test.get_today())
return {
'statusCode': 200,
'body': hoge
}
追加した部分は2行目と6行目です。
2行目でレイヤーとして追加したpythonファイル「test.py」をインポートします。
6行目で「test.py」ファイルにあるget_todayメソッドを呼んでいます。
結果も無事に本日を返しています。
最後に
以上でレイヤーの追加と関数での使い方の紹介となります。
注意すべき点としてはアップロードする際のフォルダ名とZipファイル名ですね。
割愛していますがレイヤーを更新した際、レイヤーのバージョンアップが行われます。
その際にLambda関数の設定もバージョンアップしたバージョンを指定する必要がありますのでレイヤーのバージョンアップ後には関数での設定も忘れないでください。
Latestとか設定出来れば良いのですが・・・
参考サイト
Lambda レイヤーの作成と共有
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/configuration-layers.html