💬

AWS Lambda Pythonで外部モジュールを利用する方法

2024/11/20に公開
  • 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で対応するバージョンのみを選択する

参考

https://zenn.dev/ndjndj/articles/69a2aabb227530
https://qiita.com/Bashi50/items/1f72a93dbde23de55dda#エラーの理由
https://repost.aws/ja/knowledge-center/lambda-python-package-compatible

Discussion