AWS

【AWS Lambda】Pythonでレイヤーの作成と共有方法の紹介

・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関数を作成します。
細かい作り方は下記を参考してください。

https://osusublog.net/?p=2956

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