概要
- paramikoを使ってSFTP送信処理を実装
- ローカルでは問題なく動作していたが、AWSの開発環境にLambdaとレイヤーをデプロイするとライブラリが不足している旨のエラーが発生する
Unable to import module 'sftp_file_uploader': libffi.so.6 cannnot open shared object file: No such file or directory.
環境
- Python(v3.13.1)
- paramiko(v3.5.1)
- Cloud9(Platform: Amazon Linux 2)
- ここでGit環境のコードをLambdaをデプロイ
- Lambda(Runtime: Python 3.13)
原因
- Lambdaの実行環境(
Python3.13)と、デプロイ時の環境(Amazon Linux 2)に差分があった - エラー発生時は、Cloud9上のPlatformを
Amazon Linux 2にして、ライブラリをビルドしたものをパッケージ化していたが、現在のLambdaのPython 3.13ランタイムは、Amazon Linux 2023(AL2023)ベースに変わっている
AL2023環境では、libffi ライブラリのバージョンが上がり、libffi.so.6 が廃止され、libffi.so.8 になったため、古い libffi.so.6 を必要とするパッケージが動かなくなっている
アップロードしたZIPやレイヤーに含まれているライブラリ(例:paramiko, cffi, cryptography など)は、古いAmazon Linux 2(AL2) ベース環境用にビルドされており、 libffi.so.6 を参照しようとして失敗している
解決方法
- ライブラリをビルドする環境をAL2023にする
- 作成したパッケージをレイヤーに追加(CloudFormationでテンプレート化されている場合は不要)
参考