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-generativeai | pip 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機能を利用できるようになります!


