Python 3.12版LambdaでGemini APIが動かない? libcrypt.so.1エラーの根本原因と解決策

AWS LambdaのランタイムをPython 3.12(Amazon Linux 2023)にアップグレードし、Gemini API(google-generativeai)を導入しようとしたところ、共有ライブラリエラーでハマったので備忘録として残します。

この記事でわかること

  • Amazon Linux 2023 (AL2023) での libcrypt.so.1 欠落問題の原因
  • Gemini API (google-generativeai) の依存関係によるエラーの仕組み
  • Dockerを利用した正しいビルド・デプロイパッケージの作成手順

[現象] Lambda実行時にImportErrorが発生

Python 3.12用にローカルでパッケージングしたZIPをアップロードして実行したところ、以下のエラーが発生しました。

Runtime.ImportModuleError: Unable to import module 'lambda_function': libcrypt.so.1: cannot open shared object file: No such file or directory

[環境]

AWS Lambda RuntimePython 3.12
Base OSAmazon Linux 2023 (AL2023)
Librarygoogle-generativeai (Gemini API)

[原因] AL2023からlibcrypt.so.1が削除された

根本的な原因は、Python 3.12ランタイムのベースであるAmazon Linux 2023の仕様変更にあります。

  • libcrypt.so.1の削除: AL2023では従来の libcrypt.so.1 が非推奨となり、標準構成から削除されました。
  • 依存関係の不整合: Gemini APIが使用する grpcio などのライブラリにネイティブ拡張が含まれており、ビルド環境(Amazon Linux 2やMacなど)が古いGLIBC互換を参照していると、実行時にこの共有ライブラリが見つからずロードに失敗します。

[解決策] AL2023環境のDockerコンテナでビルドする

もっとも確実な解決策は、Lambdaの実行環境と全く同じイメージである public.ecr.aws/lambda/python:3.12 を使用して pip install を行うことです。

修正前:ローカル環境でのビルド(失敗の原因)

# ローカルのOS(Mac/Ubuntu等)でビルドするとエラーが発生しやすい
$ pip install google-generativeai -t .
$ zip -r deploy_package.zip .

修正後:Dockerを利用したビルド(確実な方法)

以下のコマンドを実行して、AL2023環境内でライブラリをビルドし直します。

# AL2023ベースのLambda公式イメージを使用してインストール
$ docker run --rm -v $(pwd):/var/task public.ecr.aws/lambda/python:3.12 /bin/sh -c "pip install google-generativeai -t /var/task && chown -R $(id -u):$(id -g) /var/task"

# 生成されたファイルをZIPに固める
$ zip -r deploy_package.zip .

chown を加えることで、Docker内で作成されたファイルの権限をホストユーザーに戻しています。

まとめ

AWS LambdaのPython 3.12移行で発生する libcrypt.so.1 エラーは、OSがAmazon Linux 2023に変わったことが背景にあります。Gemini APIのようなネイティブ拡張を含むライブラリを扱う際は、必ず「実行環境と同じコンテナイメージでビルドする」ことを徹底しましょう。

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