あまぶろぐ

インフラと趣味のゆるいブログ

Lambda + RDS Proxy を利用して Aurora PostgreSQL にアクセスする

検証のためにLambda + RDS Proxy + Aurora PostgreSQL を構築したが、時間がかかったり、はまったりしたのでメモとして残す。

 

(やりたかったこと)

  • Lambda 〜 RDS Proxy 間は、IAM認証を利用
  • RDS Proxy から Secrets Manager へアクセス(Lambda にクレデンシャルを埋め込まない)
  • Lambda から クエリを投げる

 

(作業概要)

  1. EC2 からAurora へアクセス、テーブルを作成
  2. Lambda 作成 、 Aurora へアクセス(Lambda レイヤーの準備)
  3. Lambda から Aurora へテストでアクセス(クエリをなげる)
  4. RDS Proxy 、Secrets Manager 、Lambda の設定

 

(作業1 .EC2 からAurora へアクセス、テーブルを作成)

EC2 へpsql をインストール

sudo yum -y install postgresql.x86_64

EC2 からAurora へアクセス

psql -h <エンドポイント> -U <ユーザ名>

Aurora にユーザ/データベース/テーブルの作成

create user post_user01 with password '*******';

create database post_user_database owner=post_user01;

create table A(id serial primary key, name text);

insert into A(name) values('rili'),('so!'),('oh!');

GRANT all ON A TO post_user01;

 

ここでの作業が原因でLambdaでの作業時にはまった。新しくテーブルを作成したが、間違えて「デフォルトのデータベース」上に作成していた。Lambda からは「新しいデータベース」のテーブルにアクセスしてたので、クエリが通らなかった。

 

(作業2.Lambda 作成 、 Aurora へアクセス(Lambda レイヤーの準備))

Lambda から PostgreSQL にアクセするために、外部ライブラリが必要とのこと。今回は、先人のものを利用することに。下記を参考に作業。本当に感謝です。

(参考にしたサイト)

AWS LambdaでPython外部ライブラリのLayerを作る前に - Qiita

Klayers/deployments/python3.8 at master · keithrozario/Klayers · GitHub

 

Lambda の作成は下記を参考。こちらも本当に感謝です。

【AWS】LambdaからRDS Proxy経由でPostgreSQLへ接続する | SEのプログラミングと英語の勉強ブログ

 

(作業3.Lambda から Aurora へテストでアクセス(クエリをなげる))

最初は RDS Proxy を挟まずに、Lambda からアクセス。上述の通り、テーブルの作成場所を誤ったためはまっていました。切り分けとして、実行する SQL を変えてみました。PostgreSQL 上の時刻を確認するクエリを投げたら、応答があったのでデータベース周りを調査して無事解決。

 

(作業4.RDS Proxy 、Secrets Manager 、Lambda の設定)

RDS Proxy 、Secrets Manager 、Lambda の設定も上記サイトを参考。以下ではまった。

  • RDS Proxy のロールに適用するポリシーに誤りがあった。Resource に Secrets Manager に作成した「シークレットのARN」を入れること。
  • Lambda のコード内で IAM 認証の記述。「generate_db_auth_token」で token を作成する。その token を利用して DB へアクセするコードを記述。
  • Lambda への証明書インポート、コードの記述

 ※Lambda から Secrets Manager へのアクセスするコードは Secrets Manager コンソールにサンプルコードがあり便利だった。