Python 3.12環境のAWS Lambda上でGemini APIを動かそうとした際、ローカルでは正常に動作するのにデプロイ後にインポートエラーが発生してハマったので、備忘録として解決策を残します。
この記事でわかること
- AWS Lambdaで「GLIBC_2.28 not found」が発生する根本原因
- google-generativeaiの依存パッケージ「grpcio」の互換性問題
- GitHub Actions等のCI/CD環境から正しくデプロイするためのpipコマンド
[現象] Lambda実行時にImportModuleErrorが発生
Lambda関数をテスト実行すると、以下のメッセージが表示され、ライブラリの読み込みに失敗します。
Runtime.ImportModuleError: Unable to import module 'lambda_function': /lib64/libc.so.6: version 'GLIBC_2.28' not found (required by /var/task/grpc/_cython/cygrpc.cpython-312-x86_64-linux-gnu.so)[環境] 開発・デプロイ構成
| ランタイム | Python 3.12 |
| 実行環境 | AWS Lambda (Amazon Linux 2023等) |
| 使用ライブラリ | google-generativeai (Gemini API SDK) |
| CI/CDツール | GitHub Actions (ubuntu-latest) |
[原因] grpcioのバイナリ互換性とGLIBCのバージョン不一致
このエラーの原因は、Gemini APIの公式SDKが依存する『grpcio』パッケージのバイナリ互換性にあります。
GitHub Actionsのデフォルトランナー(Ubuntu最新版)で pip install を実行すると、そのビルド環境のGLIBCバージョン(2.31以上)に依存したバイナリがインストールされます。一方で、AWS Lambda側の環境に含まれるGLIBCはそれより古いため、デプロイした共有ライブラリ(.soファイル)をリンクできず、実行時にエラーを吐いて停止してしまいます。
[解決策] pip install時にプラットフォームを明示指定する
GitHub ActionsなどのUbuntu環境からデプロイパッケージを作成する場合、Lambdaの実行環境と互換性のあるプラットフォームのバイナリを強制的に取得する必要があります。
【Before】(エラーが発生するデプロイ手順)
pip install google-generativeai -t .【After】(互換性を確保した修正コマンド)
pip install --platform manylinux2014_x86_64 --only-binary=:all: --target . google-generativeaiコマンドのポイント:
- –platform manylinux2014_x86_64: LambdaのOS環境でも動作する、汎用的なLinuxバイナリを指定します。
- –only-binary=:all:: ビルド環境のソースからコンパイルするのではなく、必ずビルド済みバイナリ(Wheel)を取得するように強制します。
[まとめ] バイナリパッケージを含むデプロイの注意点
AWS LambdaでGemini API(google-generativeai)を利用する際は、内部で動くgrpcioのバージョン管理が鍵となります。CI/CDパイプラインを構築する際は、OS環境の差異を意識し、今回のようにプラットフォームを明示するか、Amazon LinuxベースのDockerコンテナ内でビルドを行うようにしましょう。

