Aurora ServerlessからAmazon RDS for PostgreSQLに引っ越し 1 LambdaとRDS接続編

2020年07月23日 00時07分

ae5be1f3332e8dce6bca20eb69659b28

Amplify と Aurora Serverless はとっても開発体験として楽しいんだけど、維持費が…

開発中は無料枠でやっていきたいので、Aurora Serverless から Amazon RDS for PostgreSQL に引っ越しました。

AppSync は直接 Aurora Serverless 以外の RDS に接続できるようにはなっていないので、間に Lambda を挟みます。

挟むと即終了する Lambda に対して、RDS へのコネクション数が足りなくなってしまうため、アンチパターンとされていました。

参考:Lambda+RDS はアンチパターン

ただ、コネクションプールの役割を果たす RDS Proxy が GA されたので、思い切って切り替えてもいいんじゃないかと思った次第です。

また、Aurora Serverless から Amazon RDS for PostgreSQL への切り替え自体はとってもスムーズですが、Lambda 関数を挟むのでテンプレートを微妙に変えないといけなさそうでそこが手間に…。

ここの Lambda 関数のところはまた次回にまとめます。

メリット

・開発中は無料枠が存分に活かせる

aurora serverless(PostgreSQL)の場合最小構成での利用料金

db.t3.medium 0.125USD/時間 1 ヵ月 93.75USD

あと読み書きストレージで別途課金。

対して Amazon RDS は 750 時間/月は無料対象。Lambda は 100 万回リクエストまで無料対象。

リリース後は RDS へのコネクション数の問題が発生するので、RDS proxy を利用する。

その際の利用料金は 2vCPU ~

0.018USD /vCPU 時間 1 ヵ月 25.92USD

とりあえず無料枠で開発は進めて、リリース時に考える…

デメリット

・Lambda 関数が間に入るのでちょっと手間になった。

・間に Lambda が入る → コネクション数が枯渇する問題が発生するが、RDS Proxy で解決される予定

最終的な絵

newDiagram 下記の記事を参考に進めたので元を読んでね!
チュートリアル: Amazon VPC で Amazon RDS にアクセスできるように Lambda 関数を設定する

Connecting AWS Lambda Node.JS to Redshift or PostgreSQL? Try AWS Lambda Layers!

流れ

1.lambda layer を用意する。

前回準備済み。

2.RDS のセキュリティグループを設定する

AuroraServerless のものを踏襲する。

3.VPC にアクセスする用にロールを定義する。

AWSLambdaVPCAccessExecutionRole があれば可

4.Lambda 関数作成

pg の取得クエリサンプルを lambda 用に変更する。

 This is the simplest possible way to connect, query, and disconnect with async/await:
 jsconst { Client } = require('pg')

 const client = new Client();

 (async () => {

 await client.connect()

 const res = await client.query('SELECT $1::text as message', ['Hello world!'])
 console.log(res.rows[0].message) // Hello world!
 await client.end()
 })()
 And here's the same thing with callbacks:

node-postgres

pg のパラメータは下記から

https://node-postgres.com/features/connecting

5.VPC 設定

RDS と同一 VPC にする。

6.Layer 設定

デザイナーページから layer を選択して追加する。

ここまで来たら Lambda で RDS への接続ができるようになるから、Amplify と Lambda 関数を連携するようにしていく。これは次回。