はいさい!ちゅらデータぬオースティンやいびーん。
概要
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のサーバーレス経験が浅く、びっくりするばかりですが、さまざまなツールを用意してくれていてすごい力だなと日々感じています。