RDS — マネージドリレーショナル DB
概要
Amazon RDS (Relational Database Service) は PostgreSQL / MySQL / MariaDB / Oracle / SQL Server / Db2 を AWS 上でマネージドに動かすサービス。 バックアップ、パッチ適用、Multi-AZ レプリケーション、Read Replica、暗号化、モニタリングをマネージドで提供してくれます。 アプリ側は普通に DB クライアントから繋ぐだけ、運用は AWS コンソール / IaC で完結。
RDB が必要な業務系 / トランザクション系のシステムでまず選ばれるサービス。 似たサービスに Aurora があり、互換 API でより高性能・高可用な選択肢として併記されることが多いです。
主な機能
- エンジン選択 — PostgreSQL / MySQL / MariaDB / Oracle / SQL Server / Db2。
- Multi-AZ — 同期レプリカを別 AZ に配置。プライマリ障害時に自動フェイルオーバー(30 秒〜数分)。
- Read Replica — 非同期レプリカで読み取りスケール。最大 15 個(エンジンによる)。
- 自動バックアップ — 毎日 1 回のスナップショット + トランザクションログによる任意時点リストア。
- Performance Insights — クエリ単位の負荷分析。
- パラメータグループ / オプショングループ — DB エンジン設定 / 拡張機能を Terraform 管理可能。
- Storage Auto-Scaling — ディスクが埋まりそうになると自動拡張。
- 暗号化 — KMS で保存時暗号化、TLS で通信暗号化。
Aurora との比較
| 観点 | RDS | Aurora |
|---|---|---|
| 互換性 | 純正エンジンそのまま | MySQL / PostgreSQL 互換 (微妙な差あり) |
| 性能 | 標準 | MySQL の最大 5 倍 / PostgreSQL の最大 3 倍 |
| 可用性 | Multi-AZ で 1 レプリカ | 3 AZ × 6 コピーをストレージ層で自動分散 |
| Read Replica | 最大 15 個 | 最大 15 個 + 全レプリカ ms 級フェイルオーバー |
| 料金 | 安い | RDS の 1.2〜1.5 倍 |
| Serverless | 無し | v2 で本格利用可(自動スケール) |
使うべきパターン
- 業務系の OLTP — 受注 / 在庫 / 顧客管理など、トランザクションと整合性が重要。
- 既存 SQL アプリの移行 — オンプレ / EC2 上の MySQL / PostgreSQL を RDS に持ってきて運用負荷を減らす。
- JOIN や集計が多い — DynamoDB ではなく RDB が合う典型。
- 本番運用で 99.95% 以上の可用性が要件 — Multi-AZ で冗長化。
使わない方が良いパターン
- サーバレス前提のアプリで瞬間スケールが必要 — RDS の接続数管理が苦手。Aurora Serverless v2 や DynamoDB を検討。
- 1 桁ミリ秒の低レイテンシが必須 — DynamoDB / ElastiCache の方が速い。
- 突発的なスパイクが多い ワークロード — インスタンスサイズの上下に時間がかかる。
- 無人運用したい個人プロジェクト — On-Demand 料金がそれなりなので、件数が少ない用途では DynamoDB / SQLite + S3 の方が圧倒的に安い。
Terraform 最小サンプル(PostgreSQL Multi-AZ)
resource "aws_db_subnet_group" "main" {
name = "main"
subnet_ids = var.private_subnet_ids
}
resource "aws_security_group" "rds" {
name = "rds-sg"
vpc_id = var.vpc_id
ingress {
from_port = 5432
to_port = 5432
protocol = "tcp"
security_groups = [var.app_sg_id] # アプリ SG だけ許可
}
}
resource "aws_db_instance" "main" {
identifier = "myapp-prod"
engine = "postgres"
engine_version = "16.3"
instance_class = "db.t4g.small" # ARM 系は安い
allocated_storage = 20
max_allocated_storage = 100 # Storage Auto-Scaling 上限
storage_encrypted = true
username = "appuser"
manage_master_user_password = true # KMS + Secrets Manager で自動管理
multi_az = true
db_subnet_group_name = aws_db_subnet_group.main.name
vpc_security_group_ids = [aws_security_group.rds.id]
backup_retention_period = 7
deletion_protection = true
skip_final_snapshot = false
}
用語集
- Multi-AZ
- 同期レプリカを別 AZ に配置する高可用性構成。プライマリ障害時に自動フェイルオーバー。
- Read Replica
- 非同期レプリカで読み取り処理をスケールする仕組み。エンジンにより最大 15 個。
- Aurora
- RDS と同じ API で互換、ストレージ層を独自実装した高性能 / 高可用版。料金は 1.2〜1.5 倍。
- パラメータグループ
- DB エンジン設定(max_connections 等)の集合。Terraform で管理可能。
- オプショングループ
- DB エンジン拡張機能(Oracle の OEM など)の有効化設定。
- Performance Insights
- クエリ単位で待機イベントや CPU 使用率を可視化する分析機能。
- Storage Auto-Scaling
- 使用量がしきい値を超えると自動でディスクを拡張する仕組み。
- Aurora Serverless v2
- Aurora の自動スケール版。0.5〜128 ACU の範囲で秒単位にスケール。