はいさい!ちゅらデータぬオースティンやいびーん。
概要
RDSデータベースへの接続を管理してくれるRDSプロキシを介して、AWSのLambda関数でPostgreSQLのデータベースに接続する方法を紹介します。
今回は、Node.js用のLambda関数を使います。
背景
Lambda関数でコネクションを張ると、パフォーマンスの問題が大きく関わってくるので、直接に接続するのは避けた方がいいです。
そこで、RDSプロキシを使用すると、Lambda関数の中で効率よくデータベースにアクセスできます。
前回の記事で、PostgreSQLのRDSプロキシの作り方を紹介しましたが、それを元に今回の記事を書いていきます。
目次
- Node.jsのLambda関数のソースコードを書く
- Lambda関数を作成する
- RDSプロキシを設定する
- 実行してみる
Node.jsのLambda関数のソースコードを書く
ローカルで作成したLambda関数のソースコードを後でアップロードしますが、まずは必要なファイルを用意しておきます。
pgをインストールする
今回のプロジェクトでは、pgというnpmパッケージが必要なので、まずは、任意のダイレクトリに入って、yarn initでpackage.jsonを作ります。
cd my-project
yarn init
そして、pgをインストールする
yarn add pg
index.jsを追加し、ロジックを書く
Lambda関数のnode.jsのテンプレートを元にpgを使ったソースコードを書きます。
const pg = require("pg");
const AWS = require("aws-sdk");
exports.handler = async (event) => {
const signer = new AWS.RDS.Signer({
region: "ap-northeast-1", // RDSプロキシを作ったRegionに合わせる
hostname: process.env.HOST, // 後々環境変数で設定する
port: 5432,
username: "master", // 前回の記事で作成したSecretのusername
});
const token = signer.getAuthToken({
username: "master",
});
const dbConfig = {
user: "master",
password: token,
port: 5432,
database: "dev", // データベース作成時に指定したもの
host: process.env.HOST,
ssl: true,
};
const client = new pg.Client(dbConfig);
client.connect();
const res = await client.query("SELECT NOW();");
await client.end();
const response = {
statusCode: 200,
body: JSON.stringify(res.rows[0]),
};
return response;
};
aws-sdkはAWSのLambda環境で用意してもらっているので、npmからインストールする必要はないです。
このaws-sdkのAWS.RDS.SignerでIAM認証に必要なパスワードを取得します。
ソースコードを圧縮します。
Lamdbaにアップロードするためには上記のソースコードを.zipファイルに圧縮する必要があります。
圧縮しておいてください。後で使います。
Lambda関数を作成する
AWSコンソールからLambdaにアクセスします。

関数の作成のボタンをクリックします。

以下のように関数名を入力します。
ランタイムはNode.js 16.xでOKです。

詳細設定では、RDSプロキシをおいているVPNを指定するようにします。
サブネットは、np-1だと、全て入れるようにします。
また、Security Groupは、前回作ったmy-application-sgを指定します。

最後に、関数を作成のボタンをクリックします。
ソースコードをアップロードする
作成が終わったら、上記で作ったソースコードをアップロードします。

うまくいけば、このようにnode_modulesとindex.jsが表示されます。
RDSプロキシを設定する
次は、RDSプロキシをこのLambda関数に追加します。
データベースプロキシを設定する
設定タブからデータベースプロキシのメニューを開き、そこでデータベースプロキシの追加のボタンをクリックする

そして、既存のデータベースプロキシを選択し、前回作ったRDSプロキシを選ぶ

環境変数を設定する
環境変数タブをクリックし、編集します。
HOSTのキーにはRDSプロキシの読み込み・書き込み用エンドポイントを代入しましょう。

実行してみる
コードタブに戻り、テストボタンをクリックします。

デフォルトの設定で、名前を入れるだけで大丈夫です。

そして、もう一度上記のテストボタンをクリックします。
すると以下のようなテスト結果が出ます!出るはず!

これでは、好きなSQLが書けますね。
まとめ
ここまで、RDSプロキシの作り方及びLambda関数での使用方法を解説してまいりましたが、いかがでしょうか?
筆者はまだまだAWSのサーバーレス経験が浅く、びっくりするばかりですが、さまざまなツールを用意してくれていてすごい力だなと日々感じています。