Python3.8 サポート終了
こちらの記事でlambda(python3.8)を使用したRDSの接続方法についての記事を書きましたが、2024年10月をもってPython3.8のサポートが終了するらしく、pythonのバージョンをあげた対応をしてみました。
作成するpythonのバージョン
今回は「Python3.10.14」で作成していきます。
python3.10.14の理由
ランタイムを「Python3.12」、「Python3.11」それぞれ試しましたが、どちらも下記のエラーとなってしまいました。
import module 'lambda_function': No module named 'psycopg2._psycopg'
AWSドキュメントではPython3.12もサポートされているようですが、これはおそらくランタイム「Amazon Linux2023」の場合だと想定
ランタイム「python3.x」はAmazon Linux2 なんだと思います。
Python3.11がダメな理由は・・・なんだろう?
いつかリベンジしたいと思いますが、今回は3.10で
手順
1.Amazon Linux 2のDockerコンテナ起動
docker run -it amazonlinux:2 /bin/bash
2.OpenSSL 1.1インストール
yum update -y
yum install -y openssl11 openssl11-devel
3.開発ツールインストール
※GCCやMakeに必要です
yum groupinstall -y "Development Tools"
4.開発ライブラリとwgetインストール
yum install -y bzip2-devel libffi-devel zlib-devel wget
5.Pythonダウンロード
cd /usr/src
wget https://www.python.org/ftp/python/3.10.14/Python-3.10.14.tgz
tar xzf Python-3.10.14.tgz
cd Python-3.10.14
./configure --enable-optimizations
make altinstall
6.PostgreSQLの開発パッケージをインストール
yum install -y postgresql-devel
7.Lambdaレイヤーのディレクトリ作成
mkdir -p /opt/python/lib/python3.10/site-packages
※AWS Lambdaは、レイヤーをデプロイする際に、この特定のディレクトリ構造(python/lib/python3.x(ランタイム)/site-packages)を期待しています。この構造に従うことで、Lambda関数が実行時に自動的にこれらのライブラリを読み込むことが可能となる
8.psycopg2インストール
python3.10 -m pip install aws-psycopg2 -t /opt/python/lib/python3.10/site-packages
ポイントはaws-psycopg2にすることです。
psycopg2だと↓のエラーになってしまいました
import module 'lambda_function': No module named 'psycopg2._psycopg'
9.アップロード用のzipファイルを作成
cd /opt
zip -r /opt/psycopg2_layer.zip python
以上です。
作成したlambdaレイヤーのアップロード方法等はこちらの記事も参考にしてみてください