AWS LambdaでGemini APIが動かない!grpcioのImportErrorを解消する正しいデプロイ手順

PythonでGemini APIをAWS Lambdaに実装しようとして、gRPC関連の読み込みエラーにかなりハマったので備忘録として残します。

この記事でわかること

  • AWS LambdaでGemini API(google-generativeai)を使用する際の注意点
  • grpcioに起因するImportErrorの根本原因
  • M1/M2 Mac等のローカル環境からLinux用バイナリを正しくパッケージングする方法

[現象] デプロイ後に発生するImportError

ローカル環境(特にMac)で作成したZIPパッケージをLambdaにアップロードし、テスト実行すると以下のようなエラーが発生して動作しません。

ImportError: cannot import name 'cygrpc' from 'grpc._cython'
# または
Runtime.ImportModuleError: Unable to import module 'lambda_function'

[環境]

  • Runtime: Python 3.12 (または 3.9〜3.11)
  • Library: google-generativeai
  • Build OS: macOS (M1/M2/M3 シリーズ)
  • Deployment Target: AWS Lambda (Amazon Linux 2023)

[原因] アーキテクチャの不一致

原因は、google-generativeaiが内部で依存しているgrpcioパッケージにあります。このパッケージにはコンパイル済みのバイナリ(C拡張)が含まれています。

M1/M2 Macなどのローカル環境でpip installを行うと、そのMacのアーキテクチャ(darwin_arm64等)に最適化されたバイナリがダウンロードされます。しかし、AWS Lambdaの実行環境はLinuxであるため、Mac用のバイナリをそのままデプロイしても共有ライブラリ(.soファイル)のロードに失敗してしまいます。

[解決策] Linux用バイナリを明示的に指定してインストール

Lambdaと互換性のあるLinux用のバイナリを、ホストOSに関わらず強制的に取得する必要があります。以下の通りpip installのオプションを変更してください。

項目Before (失敗する例)After (成功する例)
コマンドpip install -t . google-generativeaipip install –platform manylinux2014_x86_64 –target . –implementation cp –python-version 3.12 –only-binary=:all: –upgrade google-generativeai

具体的な実行手順

作業ディレクトリで以下のコマンドを実行し、その内容をZIP化してアップロードします。

# 1. 依存ライブラリをLinux向けにインストール (Python 3.12の場合)
pip install \
    --platform manylinux2014_x86_64 \
    --target . \
    --implementation cp \
    --python-version 3.12 \
    --only-binary=:all: \
    --upgrade \
    google-generativeai

# 2. ZIPに固める
zip -r deploy_package.zip .

※Lambdaのアーキテクチャで「arm64」を選択している場合は、--platform manylinux2014_aarch64を指定してください。

[まとめ]

AWS LambdaでGemini API(grpcio)を動かすポイントは、「デプロイパッケージ作成時に、実行環境と同じバイナリを取得すること」です。特にMac環境からデプロイする場合は、今回紹介した--platformオプションを活用したインストールが必須となります。

これで、Lambda上でも正常にGeminiの強力なAI機能を利用できるようになります!

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