Lambda実行時に「Unable to import module ‘lambda_function’: /lib64/libc.so.6: version `GLIBC_2.28′ not found」エラー
以前、Python で Paramiko を使った Lambda を書く機会がありました。
その際、pycrypt 周りで Lambda 実行時エラーが出て苦労した記憶があります。
今回、他の Lambda を久し振りに serverless でデプロイしたところ、同じエラーに遭遇したので解決したいと思います。
エラーの内容
Lambda 実行時に表示されたエラーは以下の通り。
Runtime.ImportModuleError: Unable to import module ‘lambda_function’: /lib64/libc.so.6: version `GLIBC_2.28′ not found (required by /var/task/cryptography/hazmat/bindings/_rust.abi3.so)
lambda_function は Lambda の実行ファイル名です。
AWS Lambda では GLIBC_2.28 を実行できないけど、どこかのタイミングでライブラリ側が使うようになってしまっているのでしょうか。
対応策
そこで、該当するライブラリ周りのバージョンを指定してみることにします。
requirements.txt に以下の定義を追加してみましょう。
cryptography と bcrypt を追記してみました。
paramiko==3.2.0
pycrypto==2.6.1
cryptography==3.4.8
bcrypt==3.2.2
これで問題なく Lambda を実行することができました。
定期的に更新がかかる Lambda だともっと早く気付けたかもしれないので、開発環境だけでも定期的に serverless でデプロイしておきたいですね。
久し振りに触った Lambda でこういったことが起こると焦ります・・・。
まとめ
冒頭の Lambda のエラーの解決方法を紹介してきました。
glibc や _rust.abi3.so などを同梱するという方法もあるでしょうが、今回はライブラリのバージョン固定で回避。
運用上、管理が手薄になってしまっているプログラムには気をつけていきたいですね。