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 Runtime | Python 3.12 |
| Base OS | Amazon Linux 2023 (AL2023) |
| Library | google-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のようなネイティブ拡張を含むライブラリを扱う際は、必ず「実行環境と同じコンテナイメージでビルドする」ことを徹底しましょう。

