AWS Lambda(Python 3.12)環境でGemini APIを導入しようとした際、ライブラリの依存関係によるImportErrorにハマったので備忘録として残します。
この記事でわかること
- AWS Lambda Python 3.12環境で発生するurllib3のインポートエラーの原因
- google-generative-ai SDKとboto3の依存関係の競合回避策
- 正しいrequirements.txtの設定方法
[現象] 発生したエラー内容
Lambda Layerを使用して google-generative-ai をデプロイし、関数を実行したところ、以下のエラーが発生してSDKのロードに失敗しました。
ImportError: cannot import name 'DEFAULT_CIPHERS' from 'urllib3.util.ssl_'[環境]
- ランタイム: Python 3.12
- 使用ライブラリ: google-generative-ai
- デプロイ方式: Lambda Layer (requirements.txtによるパッケージ管理)
[原因] urllib3 v2.0系とOpenSSLの不整合
このエラーの根本原因は、urllib3のバージョン競合にあります。
google-generative-ai SDKはデフォルトで最新の urllib3 (v2.0系) を要求します。しかし、urllib3 v2.0以降は OpenSSL 1.1.1以降 を必須としています。AWS LambdaのPythonランタイム環境に含まれる他のライブラリ(boto3など)や特定のOpenSSL構成において、古いSSL定義を参照しようとすると、v2.0系で変更・削除された内部モジュール(DEFAULT_CIPHERSなど)が見つからず、名前解決に失敗します。
| ライブラリ名 | 要求するurllib3バージョン | 発生する問題 |
|---|---|---|
| google-generative-ai | v2.0系 (デフォルト) | OpenSSLの互換性によりインポート失敗 |
| AWS Lambda 標準環境 | v1.x系推奨 | boto3等との整合性維持が必要 |
[解決策] urllib3のバージョンを1.x系に固定
解決策はシンプルです。requirements.txt において、urllib3 のバージョンを明示的に 2.0未満 に固定してデプロイし直します。
修正内容:requirements.txt
Before:
google-generative-aiAfter:
google-generative-ai
urllib3<2.0.0この指定を行うことで、google-generative-ai の依存関係を満たしつつ、Lambda環境のOpenSSLとも整合性が取れる urllib3 v1.26.x 系がインストールされるようになります。修正後、再度Layerをビルドしてアップロードすればエラーは解消されます。
[まとめ]
Python 3.12版のAWS LambdaでGemini APIを利用する際は、urllib3 v2.0の壁に突き当たることが多いです。特に DEFAULT_CIPHERS 関連のImportErrorが出た場合は、迷わず urllib3<2.0.0 を試してみてください。これにより、安定したGemini APIの実行環境を構築できます。


