「AWS無料相談会」をオンラインで開催中

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だとどうなるでしょう?
多くのデータベースはコネクション数が枯渇してしまいます。

Amazon RDS Proxyを利用しない場合

この問題を解消するためにAWSが提供を始めたマネージドサービスが
Amazon RDS Proxyです。

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のリソース作成方法はコンソール画面ですと
ふたつの方法があります。

  1. Lambdaのコンソール画面から作成
  • IAMロールを自動作成してくれない
  1. RDSのコンソール画面から作成
  • IAMロールを自動作成してくれる

Lambdaのコンソール画面から作成する時は、
IAMロールの作成でつまづいてしまうことも多いかと思います。
最初はRDSのコンソール画面から作成し、どのようなIAMロールが必要なのかを
自動生成されたロールから確認することをオススメします。

RDSのコンソール画面からAmazon RDS Proxyを作成すると、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を利用するケースがこれに該当します。

これからもサーバーレスの動向には関心を持たずにはいられません。
サーバーレスアーキテクチャの未来に期待したいですね。

以上です。