概要
- 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でテンプレート化されている場合は不要)
参考