AWS EC2 上に、MySQLをインストールして、Lambda関数(python実装)で、pymysql / cryptography ライブラリを使用して、表題のエラーに2週間ほどハマっていた。
上記の(pymysql / cryptography)ライブラリは、共に、layers/common_layer/python/lib/python3.13/site-packages/ に配置していた。しかし、どうしても表題のエラーとなる。
結論から言うと、site-packages 内に、Amazon Linux 2023 でコンパイルされた _cffi_backend.cpython-312-x86_64-linux-gnu.so というバイナリファイル(.so)が必要であった。
ローカルマシンである、Macで、pymysql / cryptography を、pip install すると、Mac 用の .so ファイルが作成されるのであるが、これをAmazon Linux 2023上にデプロイしても動作しないと言うオチ。
では、どのように _cffi_backend.cpython-312-x86_64-linux-gnu.so を作成するかと言うと、EC2インスタンスを立ち上げ、ワーク用のディレクトリを作成し、pip install pymysql / pip install cryptography を実行してインストールする。すると、ディレクトリ内に、お目当ての、_cffi_backend.cpython-312-x86_64-linux-gnu.so が生成される。
これを、ローカル環境に持ってきて、layers/common_layer/python/lib/python3.13/site-packages/cryptography 内に配置する。そして、CDKにてデプロイすれば動作するようになる。
とりあえず、解決できて良かった。
※追記
その後、動作していたプログラムが再度動かなくなった。結論から言うと、pythonのバージョンをきちんと合わせていなかったことが原因のようだ。
LambdaのPythonバージョンの誤り: Lambda関数の設定で指定しているPythonのランタイムバージョンが、レイヤーをビルドしたPythonのバージョン(ファイル名から推測するとPython 3.12)と完全に一致しているか再度確認してください。バージョンが異なると、ネイティブ拡張ライブラリが正しくロードされないことがあります。そして、_cffi_backend.cpython-312-x86_64-linux-gnu.so は、cryptography パッケージ内に入れてください。
compatibleRuntimes: [lambda.Runtime.PYTHON_3_12],
layers/common_layer/python/lib/python3.12/site-packages/
_cffi_backend.cpython-312-x86_64-linux-gnu.so