💬
AWS Lambda Pythonで外部モジュールを利用する方法
-
AWS LambdaはAmazon Linuxで動作するため、そのOSとモジュールをpip installした環境と異なることによって、関数の実行時にエラーとなる場合があります。
-
AWS Cloud9を利用して必要なモジュールをダウンロード、lambda Layerを作成する方法をまとめます。
-
例として、qrcodeとpillowをまとめてCustome Layer として作成しました。
aws Lambda python とOS
Python | OS | 廃止日 |
---|---|---|
Python 3.12 | Amazon Linux 2023 | |
Python 3.11 | Amazon Linux 2 | |
python 3.10 | Amazon Linux 2 | |
Python 3.9 | Amazon Linux 2 | |
python 3.8 | Amazon Linux 2 | 2024年10月14日 |
Amazon Linux2でAWS Cloud9を作成する
- OSについてAmazon Linux2 を選択する
AWS Cloud9にpythonの環境を構築する
必要なパッケージのインストール
sudo yum install -y gcc openssl-devel bzip2-devel libffi-devel readline-devel sqlite sqlite-devel xz xz-devel zlib-devel
pyenv のインストール
- python 切り替えのため pyenv 最新版をインストールする
curl https://pyenv.run | bash
echo 'export PATH="$HOME/.pyenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init --path)"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bashrc
source ~/.bashrc
Python バージョンのインストール
- aws lambda python の最新バージョンまでをインストールする
pyenv install 3.10.0
pyenv install 3.12.0
OpenSSL のインストール
- openSSLをインストールする
cd ~
wget https://www.openssl.org/source/openssl-1.1.1k.tar.gz
tar -zxvf openssl-1.1.1k.tar.gz
cd openssl-1.1.1k
./config --prefix=$HOME/openssl --openssldir=$HOME/openssl
make
make install
環境変数の設定
export CFLAGS="-I$HOME/openssl/include"
export LDFLAGS="-L$HOME/openssl/lib"
export LD_LIBRARY_PATH="$HOME/openssl/lib"
export PYTHON_CONFIGURE_OPTS="--with-openssl=$HOME/openssl"
Python 3.12.0 のインストール
- aws lambda python の最新バージョンまでを揃えておく
pyenv install 3.12.0
pyenv versions
PYTHONPATH の設定
export PYTHONPATH=$PWD/python
PYTHONPATH の永続化
echo 'export PYTHONPATH=$HOME/environment/pillow/python' >> ~/.bashrc
source ~/.bashrc
AWS Cloud9でpyhonの外部モジュールをダウンロードする
必要なディレクトリを作成して移動する
mkdir -p ~/environment/pillow
cd ~/environment/pillow
Pythonのバージョンを切り替える
- 外部モジュールが対応しているpyhonの最新バージョンに切り替える
pyenv global 3.10.0
python --version
pyenv global 3.12.0
python --version
(例)Pillow をインストールする
- python ディレクトリを作成してそこにダウンロードする
pip install --upgrade pillow -t python
インストールしたディレクトリを圧縮する
- pythonディレクトリをzipファイルに圧縮する
zip -r python.zip python
圧縮されたファイルを事後確認する
ls -l python.zip
AWS Lambda Layer を作成する
- pythonで対応するバージョンのみを選択する
参考
Discussion