(AWS)Lambda Layer をpythonで試してみた

shimo
VELTRA Engineering
Published in
4 min readApr 5, 2019

re:Invent 2018 で Lambda Layer が発表されました。

便利そうな機能だったので、触ってみました。

Lambda Layer とは Lambda のモジュールや共通処理を Layer にして複数のLambda 関数からコールすることができる機能です。

詳しくは こちらをご参照ください。

本稿では簡単な実例を紹介したいと思います。

Layer の設定

まずは Layer の設定から始めます。

Layer 用のコードは python フォルダ内に設置し、python フォルダごと圧縮するようにしてください。

そうすると、 Layer は /opt 以下に展開されます。 /opt/python にはパスが通っているので、import が通常通り行えます。

パスは以下のコードで確認できます。

import sysdef lambda_handler(event, context):
return{
‘path’: sys.path
}

Layerに登録する 共通関数を作成し、 zip で圧縮します。

今回は単純に文字列を戻すのみの関数にします。

def Call():  return "Hello"def SayCall(name):  return “{} Hello”.format(name)

続けて Layer を作成します。

AWS のコンソール画面で Layer を選択し Layer の作成 をクリックします。

名前、 作成した zip ファイル、互換性のあるランタイム(複数選択可能) を入力し、 作成をクリックすると Layer を作成することができます。

Lambda 関数の作成

続いて Layer に登録した関数を呼び出す Lambda 関数を作成していきます。

AWS Lambda のダッシュボードを開いて、 関数の作成をクリックします。

関数名、ランタイムを選択し作成をクリックします。

ランタイムは Layer で選択した ランタイムから選択してください。

新規 Lambda の画面が開きます。 関数名の下に Layers(0) と表示されるのでクリックします。

レイヤーの選択画面が出てくるので レイヤーの追加をクリックし、先ほど作成した Layer とバージョンを選択します。

Designer の画面で Layers の数字が0から1に変わり、保存されていない変更があると表示されますので、 ひとまず保存しておきます。

Lambda 関数もそのまま作成していきます。

Layer に登録した関数を import しコールした結果をログに書き出します。

import common # Layer に登録したpython のimport
import logging
logger = logging.getLogger()
def lambda_handler(event, context):
logger.info(common.Call()) # 関数をコール
logger.info(common.SayCall(‘hoge’)) # 関数をコール

引数が無いので、 テストイベントはデフォルトのまま作成しテストします。

ログにコールした結果が書き出されているのが確認できます。

  • Layer には Lambda 関数で使用する共通コード
  • Lambda 関数には 各関数ごとの固有の処理

と使い分けると Lambda 関数を複数作るときに重宝しそうですね。

--

--