AWS Lambda(Python利用)でcerberusを使いたいが、Lambdaにはこちらの欲しいライブラリがインストールされていないため当然ながらエラーになる。
そこでLayerを使って先に外部ライブラリを用意しておく。
準備
WSLでUbuntuを起動し、python3.9とaws cliをインストールする。
コマンドは以下。
sudo apt -y update
sudo apt -y dist-upgrade
sudo add-apt-repository -y ppa:deadsnakes/ppa
sudo apt -y install zip unzip python3.9 python3.9-venv python3-pip
sudo ln -s /usr/bin/python3.9 /usr/bin/python
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
aws configure
なお、python3で指定してインストールすると3.10が入ってしまったため、3.9を指定して入れなおしている。
作成とアップロードの例
ここではcerberusとemail_validatorをLayerとしてアップロードしている。各パラメータは固有のため適宜変更の必要あり。
なおディレクトリ名は必ずpython/ を指定する。Lambdaの仕様上そう指定されているので、適当なディレクトリ名を使うと動作しない。
mkdir python
pip install -t python/ cerberus email_validator
chmod 755 -R python/
zip -r cerberus.zip python/
aws lambda publish-layer-version --layer-name develop-cerberus --zip-file fileb://cerberus.zip --compatible-runtimes python3.9
aws lambda update-function-configuration --function-name develop_send_mail --layers "arn:aws:lambda:ap-northeast-1:XXXXXXXXXXXX:layer:develop-cerberus:1"
備考
- Zipで圧縮したライブラリ群をAWS Lambdaにアップロードするだけなのだが、OSはLinux、CPUのアーキテクチャも作業するノードとLambdaの設定を合わせなければ動作しない恐れがある。そのためWindowsから直接行うことはできず、WSL上のUbuntuから行う。また対応できるLambda関数もx86_64のもののみと考える。
- arm64のほうが料金が安いのだが――大ざっぱに8掛けくらい――もともとそこまでLambdaの料金が高いサービスを扱う予定はないのでx64のまま使ってしまう。もし大きなコストがかかるLambdaの使い方をするなら、arm64を使うことを改めて検討する。