Python 3.12版LambdaでGemini APIを叩くと出る『urllib3のインポートエラー』の回避策

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-aiv2.0系 (デフォルト)OpenSSLの互換性によりインポート失敗
AWS Lambda 標準環境v1.x系推奨boto3等との整合性維持が必要

[解決策] urllib3のバージョンを1.x系に固定

解決策はシンプルです。requirements.txt において、urllib3 のバージョンを明示的に 2.0未満 に固定してデプロイし直します。

修正内容:requirements.txt

Before:

google-generative-ai

After:

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の実行環境を構築できます。

タイトルとURLをコピーしました