AWSの構成を調べていて、正直「RDSって何じゃい」となりました。
調べた結論を先に書くと、RDSはAWSがPostgreSQLやMySQLを「運用込みで」貸してくれるサービスです。DBという製品を買うのではなく、電気や水道みたいに契約して使うもの、と捉えたら一気に腹落ちしました。
この記事は、AWSをこれから触る人・触り始めたばかりの人向けに、RDSとは何か/よく混同されるAuroraとの関係を、自分がつまずいた順に整理したメモです。
自前でDBを動かすと、こういう仕事が全部ついてくる
そもそもなぜ「貸してくれる」がありがたいのか。自分のサーバーにPostgreSQLを1台立てようとすると、本来はこれが全部セットでついてきます。
- サーバーを用意してPostgreSQLをインストールする
- 毎日バックアップを取る
- セキュリティパッチを当てる、バージョンアップする
- 壊れたときに復旧する
- 負荷が増えたらサーバーを増強する
どれも「アプリを作る仕事」ではないのに、やらないとサービスが止まる仕事です。RDSはこれをAWSが肩代わりしてくれます。使う側は「接続先のアドレスにパスワードで繋いでSQLを書くだけ」になります。
こういう「運用をお任せできるサービス」のことを、AWSではマネージドサービスと呼びます。RDSの説明でこの言葉が必ず出てくるので、先に頭に入れておくと読みやすくなります。
家のたとえに1行足すと「電気・水道の契約」
以前AWSデプロイ後に見る3画面メモで、AWSの登場人物を家にたとえた表を書きました。そこにRDSを足すと、こうなります。
| サービス | 役割 | 家でいうと |
|---|---|---|
| CloudFormation | 設計図どおりに部品を作る | 工務店 |
| Lambda | プログラムを実行する | キッチン |
| API Gateway | アクセスを受けてLambdaに渡す | 玄関 |
| CloudWatch Logs | 実行ログの置き場 | 監視カメラの録画 |
| RDS | データを保存し続ける | 電気・水道の契約 |
発電所(DBサーバーの面倒)は電力会社(AWS)が見てくれて、こちらはコンセントに挿すだけ。家の中に自前で設置する設備ではなく、外部と契約して引き込んでいるインフラというイメージが一番近いと思いました。
Neon や Supabase を使ったことがあるなら、そのAWS純正版
個人開発でVercelにアプリを載せて、DBはNeonやSupabaseのPostgresを繋ぐ、というのをやったことがある人は多いと思います(自分もそうでした)。
あの「マネージドなPostgresを借りる」という発想は、RDSとまったく同じです。管理画面でDBを作ると接続文字列がもらえて、あとはアプリから繋ぐだけ。バックアップもパッチも向こう任せ。それのAWS純正版がRDSだと思えば、だいたい合っています。
違うのは、RDSはAWSの他のサービスと同じネットワーク・同じ権限管理の世界で動くという点です。そのぶん後述のようにネットワークの設定がついて回ります。
Auroraは別サービスではなく「RDSの中のエンジンの一つ」
ここが個人的に一番こんがらがったところです。RDSとAuroraは並列の別サービスだと思っていたのですが、そうではありませんでした。
RDSでは、借りるDBの種類(DBエンジン)を選びます。選べるのは PostgreSQL・MySQL・MariaDB・Oracle・SQL Server、そして Aurora。AuroraはAWSが独自に作り直した高性能エンジンで、PostgreSQL互換版とMySQL互換版があります。
RDS(運用込みでDBを借りる仕組み)
├── PostgreSQL
├── MySQL
├── MariaDB / Oracle / SQL Server
└── Aurora ← AWS独自。PostgreSQL互換 / MySQL互換
つまり「Auroraを使っている」=「RDSを使っている」で矛盾しません。RDSが契約の枠組み、Auroraがその中で選んだ機種、という関係です。「RDSとAuroraの違い」で検索すると比較記事が出てきますが、正しくは対立する2つではなく、含まれる側と含む側です。
最初に引っかかった用語をまとめておく
ドキュメントを読むときに、意味がわからなくて止まった言葉です。ここだけ押さえれば当面は読めました。
| 用語 | ざっくりの意味 |
|---|---|
| マネージド | 運用作業をAWSが代わりにやってくれる、ということ |
| インスタンス | 動いているサーバー1台のこと。RDSでは「DBが動いている1台」 |
| クラスター | Auroraで使う単位。複数のインスタンスをまとめた1つのDBの塊 |
| エンドポイント | 接続先のアドレス。xxxx.ap-northeast-1.rds.amazonaws.com のような文字列 |
| VPC | AWSの中に作るプライベートなネットワーク。ここに置くと外から直接アクセスできない |
このプロジェクトで動いている実物
言葉だけだとぼんやりするので、実際に自分たちのシステムで動いているものを見てみます。以下はCLIですが、同じ内容はAWSコンソールのRDS画面でも見られます(名前はダミーに置き換えています)。
aws rds describe-db-clusters \
--profile dev \
--query 'DBClusters[].{id:DBClusterIdentifier,engine:Engine,ver:EngineVersion,
scaling:ServerlessV2ScalingConfiguration,db:DatabaseName,multiaz:MultiAZ}'
[
{
"id": "myapp-db-dev",
"engine": "aurora-postgresql",
"ver": "16.14",
"scaling": {
"MinCapacity": 0.5,
"MaxCapacity": 2.0
},
"db": "myapp_id",
"multiaz": false
}
]
短いですが、読むとシステムの前提がだいたいわかります。
-
aurora-postgresql/16.14— RDSの中でもAuroraを選んでいて、PostgreSQL 16互換。つまり調べものはPostgreSQLの情報がそのまま使える -
MinCapacity: 0.5/MaxCapacity: 2.0— Serverless v2という使い方。ACU(Aurora Capacity Unit)という単位で、暇なときは0.5まで自動で縮み、混んできたら2.0まで自動で伸びる -
multiaz: false— 検証環境なので冗長化なし。本番ならここがtrueになる - 1つのクラスターの中に、アプリごとに複数のデータベースを同居させられる(今回は認証用とチャット用の2つが入っています)
「使った分だけ課金」と聞くと0円まで落ちそうな気がしますが、最小が0.5 ACUなので、放っておいても0.5ぶんは課金され続けます。0まで縮める設定(Scaling to Zero)も用意されているようですが、こちらは未検証です。学習用に自分で作る場合は、使い終わったら消すのが安全だと思います。
そしてこのクラスターはVPCの内側に置かれていて、APIのLambdaだけが接続できるようになっています。この「隠してある」が初見だとなかなか厄介で、手元のPCからは中身が覗けません。そのハマりについては別記事にまとめる予定です。
まとめ
- RDSは「DBを買う」のではなく「運用込みでDBを借りる」サービス。バックアップもパッチもAWS任せ
- Auroraは別サービスではなく、RDSの中で選べるエンジンの一つ。「Auroraを使っている」=「RDSを使っている」
- Serverless v2なら使った分だけ課金だが、最小容量ぶんは常に発生する
これから触ってみる人は、AWSコンソールでRDSを開いて「データベースの作成」の画面まで進み、エンジンの選択肢を眺めてみるのがおすすめです。AuroraがPostgreSQLやMySQLと同じ場所に並んでいるのを見た瞬間に、この記事の関係が一発で腑に落ちます(そのまま作ると課金が始まるので、見るだけで戻って大丈夫です)。
参考
関連記事
- AWSデプロイ後に見る3画面メモ(CloudFormation / Lambda / CloudWatch) … 家のたとえの元ネタ。デプロイ後にどの画面を見るかの話
- AWS Lambdaとは? イベントが来たときだけコードを動かすサービス … RDSへデータを読み書きするLambdaの役割を、同じ家のたとえで整理した記事
- AWSのDB、コンソールで中身が見えるやつと見えないやつがありました … 借りたRDS(Aurora)の中身を実際に覗こうとして詰まった話
- FastAPI で「Summary 型」を作る — 一覧APIでユーザー情報を返すときの共通モデル … DBから取ったデータを、APIのレスポンスとしてどんな形で返すかの設計話