ブログリレー

【RDS】AWSサービスしりとりリレー 第11日目

皆さんこんにちは、最近VR空間構築にハマってる西浦です。
APNアドバンストコンサルティングパートナーへ昇格したばかりですが、AWSソリューションプロバイダーやAPNプレミアティアを目指して邁進していきます!

APNアドバンストコンサルティングパートナー昇格記念「AWSサービスしりとりリレー」の11日目は、頭文字が"R"から始まるサービスということで、【RDS】に関連することについて記事にしたいと思います。

厳密にはRDSのプロキシサービスである、RDS Proxyについてご紹介します。

概要

RDS Proxyとは

RDS向けの高可用性フルマネージド型データベースプロキシです。
名前の通りRDSの前に置いて使い、アプリケーションのスケーラビリティやデータベース障害に対する回復力と安全性の向上を実現します。

RDS Proxyをどう使うのか

通常、LambdaからRDSへのアクセスはアンチパターンと言われており、その理由は同時接続数の上限にあります。RDSはインスタンスタイプによって同時接続数が決まっていますが、Lambdaはリクエストごとに起動するため、RDS側の同時接続数の上限を気にせずコネクションを張ろうとして上限を超えたアクセスはエラーとなります。

ここでRDS Proxyを使うことにより、プーリングレイヤでDBへの流量を制御(既存コネクション再利用)することができ、コネクション数を抑えることができます。

上記の通り、一般的にはLambdaとの組み合わせてサーバーレス構成で取り上げられることが多いですが、EC2やECS上で動作するDBを使うようなアプリから利用することも可能です。

以下のようなユースケースに対応しています。

  • 予測できないワークロードを持つアプリケーション
  • データベース接続を頻繁に開いたり閉じたりするアプリケーション
  • 接続を開いたままアイドル状態に保つアプリケーション
  • 一時的な障害による可用性を必要とするアプリケーション
  • 改善されたセキュリティと一元化された資格情報管理

RDS Proxyの料金体系

基となっているデータベースインスタンスのvCPUの数に応じて課金で、2021年7月時点での東京リージョンでは $0.018/時間 かかります。

※最低料金で2つのvCPU分からの料金となるので、1vCPUのデータベースインスタンスタイプの場合は$0.018 × 2(vCPU) = $0.036/時間かかります。

db.m6g.8xlargeの場合はvCPUが32個。$0.018 × 32(vCPU) = $0.576/時間
これを30日間利用した場合 $0.576 × 24(時間) × 30(days) = $414.72

注意点!

AWS公式のFAQにも記述がありますが、RDS Proxyはクエリまたはトランザクションの応答時間に平均5msのレイテンシが増加する点に注意。

また、特定の条件下において【ピン留め】と呼ばれる現象が発生してしまい、コネクションプール内のDB接続を特定のDBクライアントに対して固定されるので、RDS Proxyの恩恵を受けることができなくなります。

そのため場合によっては、アプリケーションの可用性は改善されず、レイテンシと費用も増加するなんてことになってしまうため、RDS Proxy導入前に以下をよく読んでおくことをオススメします。

参考(ピン留めを回避する)
https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/rds-proxy.html#rds-proxy-pinning

RDS Proxy作成

RDS Proxy作成開始

※予めRDSを作成しておく必要がありますがここでは割愛。

RDSサービス画面を開き、「Proxies」から「プロキシを作成」へ進む

一意の「プロキシ識別子」を入力し、利用するRDSに合わせてエンジンの互換性を選択。

プロキシに関連づけるRDS DBインスタンスを選択。

「Secrets Manager シークレット」から「新しいシークレットを作成する」を開く。

シークレット作成

AWS Secrets Managerの画面が開くので「新しいシークレットを保存する」をクリック。

「RDSデータベースの認証情報」にチェックが入っていることを確認し、シークレットに保存する「ユーザー名」と「パスワード」を入力。

シークレットを利用するRDSを選択。

「シークレットの名前」を入力。

今回は自動ローテーション無しで作成。

RDS Proxy作成画面へ戻って続き

先ほど作成したシークレットを選択し、サブネットを選択。

セキュリティグループを選択し、「プロキシを作成」をクリック。

以上でRDS Proxyの作成は完了です。
RDS Proxy自身がエンドポイントを持っているため、そこに対してリクエストすることでプロキシを介してRDSに接続できます。

まとめ

RDS Proxyを使う上で注意点として挙げられる、「5msレイテンシ増加」と「ピン留め」を考慮して使う必要がありますが、LambdaからRDSを心置きなく使えるので、これでまたアーキテクチャの選択肢が広がりました。

認証周りをRDS Proxy(Secrets Managerのシークレット)に任せられるのも嬉しいポイントです。

RDS Proxyメインで記載しましたが、ブログリレー的にはRDSに関連する内容の記述だったので、続いての頭文字は"S"から始まるサービスとなります。お楽しみに!

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA