Lambdaの新機能Layerの使い方

こんにちは! hacknoteのr.katoです!
今回はタイトル通りLayerの使い方について紹介していきます。

AWSのLambdaにLayerという機能が2018年の年末に実装されました。
今までLambdaに実装されていないライブラリ(numpyとか)を使用する場合lambda_function.pyと一緒にzipで固めてアップロードする必要がありました。
しかし、Layer機能が実装されたことでユーザーの使いたいライブラリを登録することでLambdaで自由に使用できるようになります。

また、Layerはバージョン管理が可能なので新しいバージョンのライブラリがリリースされたとしても、
以前のライブラリを残したまま同じ名前のLayerで新しいバージョンのライブラリを使用する事も可能です。

設定のながれ

今回は例としてseleniumをインストールした場合を紹介していきます。
ディレクトリ構成は以下の形になるようにしていきます。
python以外は公式のドキュメントを参考にしてください。

hoge - python - selenium
              ㅏ selenium-3.141.0.dist-info
              ㅏ urllib3
              ㄴ urllib3-1.24.1.dist-info

そして、pythonを以下の形になるようにそのままzipで固めLayerにアップロードします。

selunium.zip - python - selenium
                      ㅏ selenium-3.141.0.dist-info
                      ㅏ urllib3
                      ㄴ urllib3-1.24.1.dist-info

Layer側の設定(Layerの新規追加)

以下のようにコードをターミナルで打てば良いです。
pipコマンドは-tオプションを使うことでライブラリのインストール先ディレクトリを指定することができます。

mkdir hoge
cd hoge
mkdir python
pip install selenium -t ./python/
zip -r selenium.zip ./*

Zipで固めたらAWSコンソールのLambdaにアクセスします。
左側にLayerがいるのでクリックすると次のような画面になるので「レイヤーの作成」をクリックします。

名前と説明には任意のものを入力し、先ほど作成したzipファイルをアップロードします。

互換性のあるランタイムは複数選べますので今回作成しているLayerの使用できるバージョンを選択してください。
今回はpython3.6とpython3.7に対応しているので、その二つを選択します。そして「作成」ボタンをクリックします。

これでLayerの設定は終了です。
あとはLayerを使いたいLambda関数側で設定をします。

Lambda側の設定(Layerの接続)

Lambda関数を開くと上の方に次のような所があります。ここのLayersをクリックし、下までスクロールします。

下までスクロールすると次のようになっているので「レイヤーの追加」をクリックします。

そして、Lambda関数で使用したいレイヤーとそのレイヤーのバージョンを指定し、「追加」をクリックすればOKです。

これでLambda関数でLayerに設定した外部ライブラリを普段と変わらず使用できます。

ちなみに…

Layerにあげたライブラリは/opt/に入るようです。
なので先ほど扱ったseleniumライブラリは

opt - python - selenium
             ㅏ selenium-3.141.0.dist-info
             ㅏ urllib3
             ㄴ urllib3-1.24.1.dist-info

となっています。