コンテナイメージ形式の AWS Lambda 関数で PostgreSQL に接続する際のハマりどころと解決策

コンテナイメージ形式の AWS Lambda 関数で PostgreSQL に接続する際のハマりどころと解決策

Clock Icon2025.04.21

はじめに

AWS Lambda から Aurora PostgreSQL などの PostgreSQL データベースに接続する際、psycopg2 ライブラリを使うのが一般的です。しかし、コンテナイメージ形式を使った Lambda 関数のデプロイでは、いくつかの落とし穴があります。この記事では、その問題点と解決策を解説します。

問題の概要

Lambda 関数用の Docker イメージをビルドする際、psycopg2 や psycopg2-binary のインストールで以下のようなエラーが発生することがあります

Error: pg_config executable not found.

pg_config is required to build psycopg2 from source.

これは、Docker ビルド中に Python パッケージのインストールが失敗し、結果的にイメージのビルド全体が失敗している状態です。

なぜ問題が発生するのか

AWS Lambda の Python イメージは最小限の構成になっており、C 拡張モジュールをビルドするために必要なコンパイラやヘッダーファイルが含まれていません。そのため、以下の要素が不足しています。

  1. PostgreSQL の開発ファイル (pg_config など)
  2. C コンパイラ (gcc)
  3. Python の開発ヘッダーファイル

特に psycopg2 は PostgreSQL のネイティブライブラリにリンクする C 拡張モジュールであるため、これらの開発ツールが必要になります。

解決策

AWS Lambda の Python 3.12 イメージは Amazon Linux 2023 ベースになっており、パッケージマネージャーとして dnf を使用します。以下のように Dockerfile を記述することで問題を解決できます。

FROM public.ecr.aws/lambda/python:3.12

WORKDIR ${LAMBDA_TASK_ROOT}

COPY requirements.txt .

# PostgreSQLの開発パッケージをインストール
RUN dnf update -y && dnf install -y \
    postgresql-devel \
    gcc \
    python3-devel \
    && dnf clean all

# 依存関係をインストール
RUN pip install -r requirements.txt

# Lambda 関数コードをコピー
COPY *.py .

CMD ["app.lambda_handler"]

注意点と学び

AWS Lambda イメージは定期的に更新され、基盤となる OS やパッケージマネージャーが変更される場合があります。古いドキュメントでは yum を使用する例が多いですが、最新のイメージでは dnf を使用する必要があります。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.