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

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で解決される予定

最終的な絵

下記の記事を参考に進めたので元を読んでね!
チュートリアル: 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:

const { 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にする。

7.Layer設定

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

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

シェアする

  • このエントリーをはてなブックマークに追加

フォローする