こんにちは! 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
となっています。