Amazon RDS ProxyがGA(一般提供)されました!
毎日リングフィットアドベンチャー生活を始めました、やっさんです。
2020年7月1日にAmazon RDS Proxy
が一般提供されました!
Amazon RDS Proxyとは
Amazon RDS Proxyは、Amazon Relational Database Service(RDS)向けの
高可用性フルマネージ型データベースプロキシ
です。
現在、RDS ProxyはMySQLおよびPostgreSQLエンジンファミリーで利用可能です。
なぜ、Amazon RDS Proxyが注目されているのか
Lambdaによるサーバーレスアーキテクチャは関数が最小の実行単位になります。
一度起動した関数はウォームアップにより再利用されることもありますが、
基本的にはそれぞれの関数の実行は独立しており、
データベースのコネクションも関数単位で独立します。
これが、どういうことになるかと言いますと、
Lambdaが100
の同時実行を行うとして
それぞれがデータベースへコネクションを貼り、
100
のデータベースコネクションが生成されることになります。
100
なら問題ないかもしれません。1000
だとどうなるでしょう?
多くのデータベースはコネクション数が枯渇してしまいます。
この問題を解消するためにAWSが提供を始めたマネージドサービスが
Amazon RDS Proxy
です。
従来型のコネクションプーリングとは
従来型のコネクションプーリングは、
アプリケーションサーバー単位でコネクション数を管理します。
これはサーバーで動作するアプリケーション単位もしくは、
コンテナーオーケストレーションで動作するコンテナー単位が該当します。
よって、最大コネクション数がボトルネックになる可能性はあっても、
RDSが使えなくなることはありませんでした。
Lambdaの場合、関数の実行が独立しているため、
従来型のコネクションプーリングは難しいです。
そこで、 Amazon RDS Proxy
が必要になります。
DynamoDBはRDBの代わりにはなりません。
サーバーレスアーキテクチャのデータソースとしてはDynamoDBがあります。
しかし、DynamoDBはキーバリューストアであり、
RDBのリレーショナル構造のテーブルとは異なる設計方法が必要です。
多くの開発者がリレーショナルデータベースを
サーバーレスアーキテクチャで利用したいと切望していました。
GAされたAmazon RDS Proxyの検証
弊社では以前、Amazon RDS Proxyを検証しました。
その時はGAではなくプレビュー版であったため、
負荷ツールHeyによる実行で5XXエラーが頻発していました。
GAになったAmazon RDS Proxyで同様の検証を再現してみます。
以下がその結果です。すべてのHTTPリクエストが
HTTPステータスコード200を返却しており、
Amazon RDS Proxyを問題なく利用することができる結果になりました。
Summary:
Total: 0.5001 secs
Slowest: 0.2104 secs
Fastest: 0.0396 secs
Average: 0.0864 secs
Requests/sec: 399.9392
Total data: 9400 bytes
Size/request: 47 bytes
Response time histogram:
0.040 [1] |■
0.057 [42] |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
0.074 [51] |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
0.091 [38] |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
0.108 [16] |■■■■■■■■■■■■■
0.125 [20] |■■■■■■■■■■■■■■■■
0.142 [17] |■■■■■■■■■■■■■
0.159 [3] |■■
0.176 [9] |■■■■■■■
0.193 [2] |■■
0.210 [1] |■
Latency distribution:
10% in 0.0515 secs
25% in 0.0587 secs
50% in 0.0748 secs
75% in 0.1118 secs
90% in 0.1351 secs
95% in 0.1684 secs
99% in 0.1848 secs
Details (average, fastest, slowest):
DNS+dialup: 0.0128 secs, 0.0396 secs, 0.2104 secs
DNS-lookup: 0.0008 secs, 0.0000 secs, 0.0038 secs
req write: 0.0000 secs, 0.0000 secs, 0.0003 secs
resp wait: 0.0735 secs, 0.0361 secs, 0.2103 secs
resp read: 0.0001 secs, 0.0000 secs, 0.0001 secs
Status code distribution:
[200] 200 responses
何回か試行したところ、以下のように処理時間が2秒以上かかることがありました。
2.698 [1]
これは、ENIの新規作成が発生していると見受けられました。
ENIの新規作成が発生している時にレスポンスが遅くなることについては、
前回検証した時と同じでした。
Amazon RDS Proxyの料金
Amazon RDS Proxyの料金にも触れておきましょう。
2020年7月時点では、Amazon RDS Proxyの料金体系は以下の通りです。
有効化されている各データベースインスタンスの
vCPU
ごとの
1時間あたりの料金が設定されています。東京リージョン:
vCPUあたりの料金:0.018USD/時間
上記の料金を、具体的なvCPU数で計算してみます。
1か月の料金は以下の通りです。
vCPUの数 | 料金 |
---|---|
1 | 12.96USD (1 vCPU x 24時間 x 30日 x 0.018USD) |
2 | 25.92USD (2 vCPU x 24時間 x 30日 x 0.018USD) |
4 | 51.84USD (4 vCPU x 24時間 x 30日 x 0.018USD) |
8 | 103.68USD (8 vCPU x 24時間 x 30日 x 0.018USD) |
16 | 207.36USD (16 vCPU x 24時間 x 30日 x 0.018USD) |
48 | 622.08USD (48 vCPU x 24時間 x 30日 x 0.018USD) |
96 | 1244.16USD (96 vCPU x 24時間 x 30日 x 0.018USD) |
8コア程度であれば、充分に実用範囲の料金設定と言えるのではないでしょうか。
Amazon RDS Proxyリソース作成のコツ
Amazon RDS Proxyリソース作成のコツにも触れます。
リソース作成はRDSのマネージメントコンソールから
Amazon RDS Proxyのリソース作成方法はコンソール画面ですと
ふたつの方法があります。
- Lambdaのコンソール画面から作成
IAMロールを自動作成してくれない
- RDSのコンソール画面から作成
IAMロールを自動作成してくれる
Lambdaのコンソール画面から作成する時は、
IAMロールの作成でつまづいてしまうことも多いかと思います。
最初はRDSのコンソール画面から作成し、どのようなIAMロールが必要なのかを
自動生成されたロールから確認することをオススメします。
デプロイフレームワークの動向に注視したい
Lambdaを手動で構築することは最近では少ないのかなと思います。
CI・CDも考慮し、何かしらデプロイフレームワークを利用することが多いでしょう。
有名所では、
- Serverless Framework
- AWS SAM
- AWS CDK
などが挙げられますが、Amazon RDS Proxyにネイティブ対応していない
ように
見受けられます。デプロイフレームワークが対応することで
より簡単にAmazon RDS Proxyのアタッチができるようになると思いますので、
今後のデプロイフレームワークの動向に注視したいところです。
Amazon RDS Proxyはサーバーレスの未来
Amazon RDS Proxyが存在しなかった時も、私達はLambdaでRDSにアクセスしていました。
1日に1回しか起動しないLambdaのみに限定したり、同時実行数を制限したりし、
最新の注意をはらい限定的に利用していました。
Amazon RDS Proxyの登場によりスケールする同期的なAPI実行の
データソースにRDSを利用することができるようになります。
Lambda統合されたAPI Gatewayを利用するケースがこれに該当します。
これからもサーバーレスの動向には関心を持たずにはいられません。
サーバーレスアーキテクチャの未来に期待したいですね。
以上です。