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

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

2025.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 を使用する必要があります。

この記事をシェアする

facebookのロゴhatenaのロゴtwitterのロゴ

© Classmethod, Inc. All rights reserved.