目次
Amazon RDS 完全ガイド 2026
初心者から実務者向けの包括的解説
Amazon RDS(Relational Database Service) は、AWS が提供する フルマネージドリレーショナルデータベース基盤 です。MySQL・PostgreSQL・MariaDB・Oracle・SQL Server・IBM Db2 など複数のエンジンをサポートし、OS・DB インストール・バックアップ・フェイルオーバーを AWS が管理します。本ドキュメントは RDS の本質・アーキテクチャ・運用実務・最新動向を体系的に解説する包括的ガイドです。
ドキュメントの目的
本ガイドは以下を対象としています。
- 初心者向け: RDS とは何か、なぜ必要かを学びたい方
- 開発者向け: RDS インスタンスを構築・運用したい方
- DBA / インフラ向け: 高可用性・セキュリティ・パフォーマンスを実装したい方
- 意思決定者向け: RDS vs Aurora vs セルフホストの選択判断
2026 年の RDS エコシステム
- RDS Custom for Oracle/SQL Server:OS・DB レベルのアクセスを必要とする場合に対応
- Blue/Green Deployments:ダウンタイムゼロでメジャーアップグレード実行
- RDS Optimized Reads/Writes:読み書きパフォーマンス最適化
- Aurora DSQL:PostgreSQL 互換・リージョン間同期・超低レイテンシ
- Graviton4 プロセッサ対応:CPU 性能向上・コスト削減
- Amazon Bedrock 統合:生成 AI による異常検知・分析の自動化
- Performance Insights 拡張:AI による自動チューニング提案
定義
Amazon 公式による定義:
“Amazon RDS makes it easy to set up, operate, and scale a relational database in the cloud.”
RDS は、データベース管理の運用負荷を削減しながら、エンタープライズレベルの可用性・セキュリティ・パフォーマンスを提供します。
エディション
- RDS Standard版:オープンソースエンジン向けの標準機能
- RDS Enhanced版:Performance Insights・Enhanced Monitoring などの高度な監視機能
- RDS Custom版:OS・DB 直接アクセスが必要な商用エンジン(Oracle、SQL Server)向け
目次
- 概要
- RDS が解決する課題
- 主な特徴
- アーキテクチャ
- 対応エンジン
- RDS vs Aurora の違い
- インスタンスクラス
- ストレージ
- 主要ユースケース
- 高可用性
- バックアップとリカバリ
- Read Replica
- RDS Proxy
- RDS Custom
- セキュリティ
- モニタリング
- メンテナンスとアップグレード
- 他の類似ツールとの比較
- クライアントとエコシステム
- ベストプラクティス
- トラブルシューティング
- 2025-2026 最新動向
- 学習リソース
- 実装例・活用シーン
- 導入ロードマップ
- 実装チェックリスト
- まとめ
- 参考文献
概要
初心者向けメモ: RDS は「データベース自体は管理しない」サービスです。OS・パッチ・バックアップ・フェイルオーバー を AWS が自動管理し、開発者は SQL クエリの実装 に集中できます。EC2 上で MySQL を自前管理する場合と比べ、運用負荷は劇的に削減されます。
RDS は、エンタープライズグレードのリレーショナルデータベースを、自社で保有・管理することなく、AWS のマネージドサービスとして利用できるサービスです。公式ドキュメントに基づくと、以下の主要な価値を提供します:
RDS の位置づけ
【図1】AWS データベースサービスの選択フロー:
graph TD
A[データベース選択] -->|リレーショナル| B{スケール・可用性要件}
A -->|キーバリュー| C[DynamoDB]
A -->|分析| D[Redshift]
A -->|検索| E[OpenSearch]
B -->|標準<br/>1-2分フェイルオーバー| F[RDS]
B -->|高速<br/><30秒フェイルオーバー| G[Aurora]
B -->|OS直接アクセス| H[RDS Custom]
B -->|セルフマネージド| I[EC2]
RDS が解決する課題
1. DB 運用管理の複雑性
課題: EC2 上で自前 MySQL を管理する場合
月次メンテナンス
├─ OS セキュリティパッチ(計画・テスト・本番適用)
├─ DB エンジンアップグレード(互換性確認・ダウンタイム調整)
├─ ディスク容量監視・拡張
├─ バックアップスケジュール管理
├─ リカバリテスト・PITR 検証
└─ レプリケーション ラグ監視
RDS による解決: ✅ すべて自動管理
2. 高可用性・フェイルオーバーの構築
課題: Multi-AZ 構成を自前で実装
- 要件:プライマリ障害時 < 2 分で自動フェイルオーバー
- → 同期レプリケーション設定・ネットワーク監視・自動フェイルオーバースクリプト
- → 数週間の設計・実装・テスト工数
RDS による解決: ✅ チェックボックス 1 つで Multi-AZ が有効化
3. バックアップ・PITR の複雑性
課題: リカバリポイント目標(RPO)・リカバリ時間目標(RTO)の達成
RDS による解決:
- ✅ 自動日次バックアップ + トランザクションログ保持で任意の秒単位に復元可能
- ✅ 差分バックアップで保存容量を圧縮
- ✅ クロスリージョンバックアップで災害対応
主な特徴
| 特徴 | 説明 |
|---|---|
| 6 つのエンジン対応 | MySQL, PostgreSQL, MariaDB, Oracle, SQL Server, IBM Db2 |
| マルチ AZ デプロイ | 自動フェイルオーバー(1〜2 分)で高可用性 |
| 読み取りスケーリング | リードレプリカ(最大 5 個)で読み負荷分散 |
| 自動バックアップ・PITR | 保持期間内(最大 35 日)の任意の時点に復元 |
| セキュリティ統合 | IAM 認証、KMS 暗号化、ネットワーク分離 |
| パフォーマンス監視 | Performance Insights・Enhanced Monitoring・CloudWatch 統合 |
| ダウンタイムゼロアップグレード | Blue/Green Deployment でメジャーバージョンアップ |
| RDS Proxy | Lambda/ECS など短命プロセスの接続プール集約 |
| ストレージ自動スケーリング | ディスク逼迫時の自動拡張 |
| 監査ログ | CloudWatch Logs へのエクスポート対応 |
アーキテクチャ
初心者向けメモ: RDS は 3 層構造 です。アプリケーション層(EC2、ECS など)→ RDS インスタンス(DB エンジン実行) → EBS ストレージ(データ保存) という流れです。マルチ AZ 構成では、プライマリとスタンバイが別 AZ に配置 され、プライマリ障害時に自動フェイルオーバーします。
【図2】RDS マルチ AZ アーキテクチャ:
graph TD
subgraph AZ1["AZ-1(us-east-1a)"]
EC2["EC2 / ECS"]
EC2 -->|TCP 3306| Primary["RDS Primary<br/>MySQL 8.0"]
Primary -->|同期複製| EBS1["EBS gp3<br/>SSD"]
end
subgraph AZ2["AZ-2(us-east-1b)"]
Standby["RDS Standby<br/>MySQL 8.0"]
Standby -->|EBS gp3<br/>SSD| EBS2["EBS gp3<br/>SSD"]
end
Primary -->|同期複製| Standby
subgraph Monitor["モニタリング層"]
CW["CloudWatch<br/>Performance Insights"]
end
Primary --> Monitor
style Primary fill:#4CAF50,stroke:#2E7D32,color:#fff
style Standby fill:#BDBDBD,stroke:#616161,color:#fff
RDS インスタンスのコンポーネント
| コンポーネント | 役割 |
|---|---|
| DB Instance | MySQL・PostgreSQL などのエンジンが稼働するコンピュートインスタンス |
| DB Subnet Group | VPC 内のプライベートサブネットを複数指定(Multi-AZ は最低 2 サブネット) |
| Parameter Group | エンジン固有の設定(max_connections、character_set など) |
| Option Group | Transparent Data Encryption(TDE)など追加機能 |
| Security Group | インバウンドルール(ポート 3306、5432 など)で通信制御 |
| Enhanced Monitoring Agent | OS レベルメトリクス(CPU steal、I/O など)を 1 秒間隔で収集 |
| Backup | 自動バックアップ + 手動スナップショット |
| Read Replica | 非同期複製レプリカで読み負荷分散 |
対応エンジン
初心者向けメモ: 「どのエンジンを選ぶ?」という質問が最初にあります。基本は PostgreSQL(高機能・拡張性)か MySQL(シンプル・広く普及)のいずれかです。レガシーシステムが Oracle なら RDS Oracle を選びます。
| エンジン | 特性 | 推奨シーン | ライセンス |
|---|---|---|---|
| MySQL | オープンソース、シンプル、Web 標準 | LAMP スタック、SaaS、スタートアップ | GPL-2.0 |
| PostgreSQL | 高機能 SQL、地理情報、JSON、拡張性 | エンタープライズ、複雑な分析 | PostgreSQL License |
| MariaDB | MySQL フォーク、MySQL 互換 | MySQL からの段階的移行 | GPL-2.0 |
| Oracle Database | 商用、高機能、APEX | オンプレ Oracle 移行 | 商用ライセンス |
| SQL Server | Windows 統合、T-SQL、.NET 親和性 | Windows エコシステム | 商用ライセンス |
| IBM Db2 | エンタープライズ、高可用性 | Db2 ユーザー | 商用ライセンス |
バージョン選択ガイド
- 新規構築 → 最新安定版を選択(MySQL 8.0+、PostgreSQL 15+)
- レガシー移行 → 既存バージョンと互換性を確認してから選択
- セキュリティサポート → AWS がサポート期間を明示(EOL 日時を確認)
RDS vs Aurora の違い
初心者向けメモ: RDS と Aurora はどちらも AWS のマネージドデータベースですが、アーキテクチャが異なります。RDS は個別の DB インスタンスをマネージドする「従来型」、Aurora はクラスタ型で読み取りスケーリングに優れています。
| 観点 | RDS | Aurora |
|---|---|---|
| アーキテクチャ | 単一インスタンス + リードレプリカ | 分散クラスタ(共有ストレージ) |
| フェイルオーバー時間 | 1〜2 分 | < 30 秒 |
| ストレージ | 手動拡張(Auto Scaling あり) | 自動拡張(最大 128 TiB) |
| リードレプリカ数 | 最大 5 個 | 最大 15 個 |
| スループット | エンジン依存 | MySQL 比 5 倍、PostgreSQL 比 3 倍(公称) |
| Serverless | ❌ | ✅(Aurora Serverless v2) |
| 対応エンジン | MySQL, PostgreSQL, MariaDB, Oracle, SQL Server, Db2 | MySQL / PostgreSQL 互換のみ |
| コスト | 低〜中 | やや高 |
| Multi-AZ Cluster | リードレプリカ向け | ビルトイン |
選択フロー
高可用性が最優先(< 30 秒フェイルオーバー)
→ Aurora
Oracle / SQL Server / Db2 が必須
→ RDS Custom
標準的な MySQL / PostgreSQL で、1〜2 分フェイルオーバーが許容
→ RDS
開発環境・テスト・低コスト重視
→ RDS Single-AZ
インスタンスクラス
初心者向けメモ: インスタンスクラスは「DB サーバーの CPU・メモリ」を決めます。db.t3.micro(小)から db.r6i.16xlarge(大)まで、ワークロードに応じて選択します。
4 つのカテゴリ
1. 汎用(db.t3/db.t4g)- Burstable
| クラス | vCPU | メモリ | 用途 |
|---|---|---|---|
| db.t3.micro | 1 | 1 GB | 開発・テスト・小規模ブログ |
| db.t3.small | 1 | 2 GB | スタートアップ・低トラフィック |
| db.t3.medium | 2 | 4 GB | 中規模 Web アプリ |
| db.t3.large | 2 | 8 GB | トラフィック増加期 |
特徴: CPU 常時使用しない場合に向け、CPU クレジット で バースト性能を提供
2. メモリ最適化(db.r6i / db.r6g)- Graviton2
| クラス | vCPU | メモリ | 用途 |
|---|---|---|---|
| db.r6i.large | 2 | 16 GB | キャッシュ指向ワークロード |
| db.r6i.xlarge | 4 | 32 GB | OLAP・複雑な JOIN |
| db.r6i.2xlarge | 8 | 64 GB | 大規模分析・数百万行スキャン |
特徴: RAM/ CPU 比が高く、メモリ内処理の多いワークロードに最適
3. ストレージ最適化(db.i3)
| クラス | vCPU | メモリ | ローカルストレージ |
|---|---|---|---|
| db.i3.large | 2 | 15.25 GB | 1.9 TB NVMe SSD |
| db.i3.xlarge | 4 | 30.5 GB | 3.8 TB NVMe SSD |
特徴: ローカル NVMe SSD で超低レイテンシ I/O(临時テーブル、ログ書き込み向け)
4. Graviton プロセッサ対応(db.t4g / db.r6g / db.m6g)
| クラス | 特徴 |
|---|---|
| db.t4g.micro | AWS 独自 Graviton2 プロセッサ、コスト 40% 削減 |
| db.r6g.large | 汎用で 30% 高性能 |
推奨ルール:
開発環境 → db.t3.micro または db.t4g.micro
小規模 Web APP → db.t3.small / medium
中規模 ERP・CRM → db.m6i.large
大規模 DWH・集計 → db.r6i.2xlarge / 4xlarge
キャッシュ指向 → db.r6i.xlarge
ストレージ
初心者向けメモ: ストレージは「IOPS(1秒間の入出力操作数)」が重要です。DB ワークロードは IOPS 指向なので、gp3 以上を推奨します。
| ストレージタイプ | IOPS | スループット | 推奨ユースケース | コスト |
|---|---|---|---|---|
| gp3 | 3,000〜16,000 | 125〜1,000 MiB/s | 多くの DB ワークロード(推奨) | 最安 |
| gp2 | 100〜64,000(サイズ連動) | 128〜1,000 MiB/s | レガシー(gp3 推奨) | 中 |
| io1 | 1,000〜64,000 | 〜4,000 MiB/s | OLTP・高 IOPS 本番 | 高 |
| io2 | 最大 256,000 | 〜4,000 MiB/s | 最高性能(一部エンジン) | 最高 |
| 磁気(st1) | 低 | 低 | 非推奨(レガシーのみ) | 最安だが非推奨 |
ストレージ自動スケーリング
{
"AllocatedStorage": 100, // 初期容量
"MaxAllocatedStorage": 1000, // スケーリング上限
"StorageType": "gp3"
}
自動スケーリングの条件:
- ディスク使用率 > 90% かつ
- スケーリングから 6 時間経過
- → 自動的に ストレージを 10% 増加(または最大値まで)
主要ユースケース
初心者向けメモ: RDS は「汎用リレーショナルDB基盤」です。以下の 15 パターンは実務でよく見かけるシーンです。自分の業務にあてはまるものを見つけ、そこから詳細を学ぶのが効率的です。
1. CRUD アプリケーションの基盤
Web サービス・モバイルアプリのバックエンド DB。最もオーソドックスなユースケース。
- Flutter app → API Gateway → Lambda → RDS PostgreSQL
2. SaaS マルチテナント
顧客ごとのデータを同一 DB で管理。テナント ID でデータ分離。
顧客A ┐
顧客B ├→ RDS(テーブル:customers, tenant_data)→ クエリフィルタリング
顧客C ┘ (WHERE tenant_id = ?)
3. リアルタイム分析・ダッシュボード
ビジネスメトリクス(売上、ユーザー数、コンバージョン率)を秒単位で更新。
トランザクション DB(RDS PostgreSQL)
↓(INSERT/UPDATE)
集計テーブル(MATERIALIZED VIEW)
↓
Grafana ダッシュボード
4. マイグレーション基盤
オンプレミス Oracle → RDS Oracle。AWS DMS で複製。
- On-Premises Oracle ←→ [AWS DMS] ←→ RDS Oracle(初期同期)
- ↓(CDC)
- 変更分レプリケーション
5. CICD テスト・統合環境
Pull Request ごとに DB インスタンスを自動起動・削除。
GitLab CI
↓
CloudFormation / Terraform
↓
RDS(テスト用) → テスト実行 → インスタンス削除
6. 開発環境・ローカルサンドボックス
開発者が VPN 経由で RDS に接続。
- 踏み台 EC2(Bastion)
- ↓
- RDS Private Subnet
7. Read Replica による読み取り分散
プライマリの読み負荷を分散。レポート生成・分析クエリ用。
プライマリ(書き込み)
↓(非同期複製)
リードレプリカ 1(読み取り専用)
リードレプリカ 2(読み取り専用)
リードレプリカ 3(読み取り専用)
8. ハイブリッド構成(オンプレ + AWS)
オンプレミス DB + RDS リードレプリカで災害対応。
- On-Premises MySQL ←→ RDS MySQL(リードレプリカ)
- 本番 クロスリージョンで災害対応
9. 監査ログ・コンプライアンス
取引履歴・不正検知ログを RDS に記録。PITR で任意時点に監査。
トランザクション
↓(audit trigger)
RDS audit_log テーブル
↓
CloudWatch Logs(保管)
↓
SIEM 分析
10. データウェアハウス(小〜中規模)
Snowflake / BigQuery 導入前の段階。PostgreSQL で 100GB 程度の分析。
ソースシステム
↓(ETL)
RDS PostgreSQL
↓(複雑 SQL 分析)
BI ツール(Tableau、Grafana)
11. リアルタイムノーティケーション
イベント駆動型の通知。トリガーで SQS/SNS へ発火。
INSERT INTO user_events → DB トリガー
↓
Lambda 呼び出し(Aurora Serverless +
↓
Slack 通知
12. セッション・キャッシュストア
HTTP セッションを RDS で永続化(Redis / ElastiCache も選択肢)。
Web サーバー
↓(セッション保存)
RDS PostgreSQL
↓
マルチサーバー間で共有
13. IoT センサーデータ集約
温度・湿度・位置情報を時系列で保存・分析。
- IoT デバイス → MQTT → Lambda → RDS PostgreSQL
- ↓(JSON フィールド)
- Grafana(地図表示)
14. Aurora への段階的移行
RDS MySQL から Aurora MySQL へ、読み取りレプリカを段階的に昇格。
RDS MySQL(プライマリ)
↓(リードレプリカ)
Aurora MySQL(読み取り)
↓(昇格)
Aurora MySQL(新プライマリ)
15. マルチリージョン・ディザスタリカバリ
クロスリージョンリードレプリカで DR 構成を自動化。
- AWS us-east-1: RDS PostgreSQL(Primary)
- ↓(非同期複製)
- AWS eu-west-1: RDS PostgreSQL(Read Replica)→ 昇格可能
高可用性
初心者向けメモ: 「高可用性」とは「障害時に自動復旧する」という意味です。RDS は 3 つのレベルで可用性を提供します:Single-AZ(基本)→ Multi-AZ DB Instance(中程度)→ Multi-AZ DB Cluster(高)。
1. Single-AZ(単一 AZ)
単一の可用性ゾーンに DB を配置。開発環境や一時的なテストのみ。
| 特性 | 値 |
|---|---|
| 構成 | DB インスタンス 1 個 |
| 故障対応 | AWS が自動復旧(通常 1〜3 時間) |
| RPO | 最後のバックアップ時点 |
| RTO | 1〜3 時間(バックアップから復元) |
| SLA | 提供なし |
| コスト | 最安 |
2. Multi-AZ DB Instance(同期スタンバイ)
プライマリ + 同期スタンバイ を別 AZ に配置。自動フェイルオーバー対応。
- 【AZ-1】 【AZ-2】
- Primary DB ←→ Standby DB(同期複製)
- (書き込み) (待機中)
| 特性 | 値 |
|---|---|
| フェイルオーバー時間 | 通常 60〜120 秒 |
| RPO | 0(同期複製) |
| RTO | < 2 分 |
| スタンバイ読み取り | ❌ 不可 |
| SLA | 99.95% |
フェイルオーバーのトリガー:
- プライマリ DB インスタンス障害
- プライマリのストレージ障害
- AZ レベルの障害
- AWS が実施する定期メンテナンス
- 明示的なフェイルオーバーテスト(実施可能)
3. Multi-AZ DB Cluster(3 AZ、複数リーダー)
ライター 1 + リーダー 2 を 3 つの AZ に分散。スタンバイから読み取り可能。
- 【AZ-1】 【AZ-2】 【AZ-3】
- Writer ←→ Reader 1 ←→ Reader 2(すべて同期複製)
- (読み書き) (読み取り) (読み取り)
| 特性 | 値 |
|---|---|
| フェイルオーバー時間 | < 35 秒 |
| RPO | 0 |
| RTO | < 35 秒 |
| スタンバイ読み取り | ✅ Reader 1・2 から読み取り可能 |
| 読み取りスケール | ライターのロードを削減 |
| SLA | 99.99% |
| コスト | Multi-AZ Instance の約 2.5 倍 |
選択フロー
開発・テスト環境
→ Single-AZ(コスト最小)
本番環境(SLA 99.95% で十分)
→ Multi-AZ DB Instance
高可用性重視(SLA 99.99%、読み取りスケール必要)
→ Multi-AZ DB Cluster
超高可用性(フェイルオーバー < 30 秒)
→ Aurora(推奨)
バックアップとリカバリ
初心者向けメモ: RDS のバックアップは 3 層構成です:自動バックアップ → トランザクションログ保持 → PITR で任意時点に復元。これにより、データ損失から数秒単位で復旧できます。
自動バックアップ
毎日バックアップウィンドウ(デフォルト 03:00 UTC)
↓
差分スナップショット + トランザクションログ保持
↓
保持期間:1〜35 日(デフォルト 7 日、0 = 無効)
| 特性 | 説明 |
|---|---|
| 実行タイミング | 毎日バックアップウィンドウ内(ユーザー指定可) |
| 保持期間 | 1〜35 日(デフォルト 7 日) |
| ストレージコスト | 100GB/月 までは DB インスタンス費用に含まれる。超過分は追加課金 |
| PITR | 保持期間内の任意の秒単位で復元可能 |
| 自動削除 | 保持期間後に自動削除。DB 削除時は別途に最終スナップショット取得可能 |
手動スナップショット
明示的に作成したバックアップ。永遠に保持(削除するまで)。
AWS Management Console / AWS CLI
↓
aws rds create-db-snapshot --db-instance-identifier mydb
↓
スナップショット作成(1 分〜数分)
↓
S3 に暗号化され保存
ユースケース:
- DB スキーマ変更前の安全策
- メジャーアップグレード前の保険
- 別リージョン・別アカウントへの複製
PITR(Point-in-Time Recovery)
「誤った DELETE を 10 分前の状態に戻したい」 → PITR で解決。
2026-04-26 14:00:00 UTC DELETE FROM users WHERE id = 1;(←誤り)
↓ 気付く
2026-04-26 14:05:00 UTC 復元開始(PITR で 14:02:00 UTC)
↓(復元完了)
2026-04-26 14:07:00 UTC 新しい DB インスタンス起動
↓
正常なデータを確認 → スウィッチオーバー
保持期間の推奨値:
| 環境 | 推奨保持期間 | 理由 |
|---|---|---|
| 開発 | 1 日 | コスト削減 |
| 本番(SaaS) | 7〜14 日 | 誤消去検知時間 |
| 金融・医療 | 35 日 | コンプライアンス |
クロスリージョン バックアップ
災害対応 用の自動複製。別リージョンに定期同期。
aws rds modify-db-instance \
--db-instance-identifier mydb \
--backup-retention-period 7 \
--copy-backups-to-region eu-west-1
Read Replica
初心者向けメモ: リードレプリカは「読み取り専用コピー」です。プライマリからの 非同期複製 なので、ラグが発生しますが、読み負荷を大幅に削減できます。
リードレプリカの特性
| 特性 | 説明 |
|---|---|
| 複製方式 | 非同期(プライマリからの遅延複製) |
| 最大数 | 5 個(MySQL/MariaDB/PostgreSQL) |
| レプリケーション ラグ | 通常ミリ秒~数秒、ネットワーク遅延に依存 |
| 読み取り専用 | リードレプリカへの書き込みは不可 |
| クロスリージョン | 可能(災害対応・地理的読み取り分散) |
| スナップショット | リードレプリカから独立したスナップショット可能 |
| 昇格 | リードレプリカを新プライマリに昇格可能(ポイントインタイム復元不可になる) |
利用シーン
【シーン1】読み取り負荷分散
プライマリ(本番書き込み)→ OLTP
↓(非同期複製)
リードレプリカ 1 → 分析クエリ
リードレプリカ 2 → BI ツール連携
リードレプリカ 3 → 統計集計
- 【シーン2】クロスリージョン災害対応
- AWS us-east-1: RDS PostgreSQL(Primary)
- ↓(非同期複製)
- AWS eu-west-1: RDS PostgreSQL(Read Replica) → フェイルオーバー時に昇格
レプリケーション ラグの監視
モニタリング対象メトリクス:
- ReplicationLag(秒単位)
→ 2 秒以上が続く場合は警告
原因:
- 重いトランザクション実行
- ネットワーク遅延
- リードレプリカの CPU 高負荷
RDS Proxy
初心者向けメモ: RDS Proxy は「DB 接続のプール管理ツール」です。Lambda・ECS など短命プロセスが大量の接続要求を送るとき、Proxy が接続を集約して DB 負荷を削減します。
RDS Proxy のアーキテクチャ
graph LR
subgraph App["アプリケーション層"]
L1["Lambda 1"]
L2["Lambda 2"]
L3["Lambda 3"]
end
subgraph Proxy["RDS Proxy(接続プール)"]
Pool["接続プール<br/>(最大 1000)"]
end
subgraph DB["DB インスタンス"]
RDS["RDS MySQL<br/>(接続数制限)"]
end
L1 -->|短命接続| Pool
L2 -->|短命接続| Pool
L3 -->|短命接続| Pool
Pool -->|効率的な接続再利用| RDS
style Pool fill:#FFC107,stroke:#FF6F00,color:#000
主要メリット
| メリット | 効果 |
|---|---|
| 接続数削減 | Lambda 1000 並列実行 → Proxy で 10〜50 接続に集約 |
| データベース負荷削減 | CPU・メモリ削減(接続管理オーバーヘッド低下) |
| アプリケーション修正不要 | アプリは Proxy をエンドポイントとして参照(透過的) |
| IAM 認証統合 | パスワード不要の IAM トークン認証 |
| Secrets Manager 統合 | シークレット自動ローテーション対応 |
| 接続の再利用 | TCP コネクションを複数アプリで共有 |
対応エンジン
✅ MySQL 5.7+
✅ PostgreSQL 11+
✅ MariaDB 10.2+
❌ Oracle(非対応)
❌ SQL Server(非対応)
RDS Custom
初心者向けメモ: RDS Custom は「OS・DB レベルの直接アクセス」を必要とする場合の選択肢です。通常 RDS で十分ですが、Oracle・SQL Server で特殊な設定が必要な場合に活用します。
RDS Custom の位置づけ
- フルマネージド ←→ セルフマネージド
- RDS RDS Custom EC2
- (推奨) (特殊要件) (制限なし)
対応エンジン
- ✅ Oracle Database(11g 以降)
- ✅ SQL Server(2016 以降)
- ❌ MySQL、PostgreSQL など(RDS を使用)
RDS Custom が必要な例
- Oracle パラメータの OS レベル設定
- SQL Server の Windows 認証
- カスタム Oracle データベースリンク
- 特定の ODBC ドライバのインストール
セキュリティ
初心者向めメモ: RDS のセキュリティは 3 層 です:ネットワーク分離 → 通信暗号化 → 認証・監査。本番環境は全て有効化します。
1. ネットワーク分離
プライベートサブネット配置が基本。
┌──────────────────────────────────────────────────────┐
│ VPC │
│ ┌─────────────────────────────────────────────────┐ │
│ │ Public Subnet(NAT Gateway) │ │
│ │ └─ EC2(Bastion) │ │
│ │ ↓(プライベート通信) │ │
│ │ ┌──────────────────────────────────────────┐ │ │
│ │ │ Private Subnet │ │ │
│ │ │ └─ RDS Security Group(Port 3306) │ │ │
│ │ │ └─ RDS MySQL Instance │ │ │
│ │ └──────────────────────────────────────────┘ │ │
│ └─────────────────────────────────────────────────┘ │
│ │
│ Security Group Rule: │
│ Ingress: TCP 3306 from EC2 SG │
│ Egress: すべてを拒否 │
└──────────────────────────────────────────────────────┘
2. 転送時暗号化(TLS/SSL)
アプリケーション ↔ RDS 間の通信を暗号化。
| エンジン | デフォルト | 設定 |
|---|---|---|
| MySQL | TLS 1.2 | Parameter Group で require_secure_transport = ON |
| PostgreSQL | デフォルト無効 | Parameter Group で rds.force_ssl = 1 |
| Oracle | デフォルト無効 | SQL*Net で SSL 設定 |
# MySQL の例
mysql -h mydb.c123abc456.us-east-1.rds.amazonaws.com \
--ssl-mode=REQUIRED \
-u admin -p
3. 保存時暗号化(KMS)
DB ストレージの暗号化。作成時に指定、後変更不可。
AWS KMS マスターキー
↓(Data Encryption Key で暗号化)
EBS ボリューム
↓(暗号化された DB データ)
RDS ストレージ
設定:
aws rds create-db-instance \
--db-instance-identifier mydb \
--storage-encrypted \
--kms-key-id arn:aws:kms:us-east-1:123456789:key/12abc34d-5e6f-78gh-90ij-1k2l3m4n5o
4. IAM 認証
パスワード不要の IAM トークン認証(MySQL 5.6.34+、PostgreSQL 9.5+)。
# トークン生成
TOKEN=$(aws rds generate-db-auth-token \
--hostname mydb.c123abc456.us-east-1.rds.amazonaws.com \
--port 3306 \
--region us-east-1 \
--username iamuser)
# MySQL 接続
mysql -h mydb.c123abc456.us-east-1.rds.amazonaws.com \
--port 3306 \
--ssl-ca=/path/to/rds-ca-bundle.pem \
-u iamuser \
--password="$TOKEN"
5. 監査ログ・CloudWatch Logs
DB アクティビティをログ記録・分析。
| エンジン | ログタイプ | 保持期間 |
|---|---|---|
| MySQL | Error Log, General Log, Slow Query Log | 1 日〜7 日(CloudWatch Logs に export) |
| PostgreSQL | PostgreSQL Logs | 1 日〜7 日 |
| Oracle | Audit Trail | 24 時間 |
モニタリング
初心者向めメモ: RDS のモニタリングは 3 段階です:CloudWatch(基本メトリクス) → Enhanced Monitoring(OS レベル) → Performance Insights(クエリ分析)。
1. CloudWatch メトリクス(基本)
AWS コンソール・AWS CLI で即座に確認可能。
| メトリクス | 閾値 | アラート条件 |
|---|---|---|
| CPU Utilization | > 80% | CPU 高負荷を検出 |
| Database Connections | > 接続上限の 80% | 接続数逼迫を検出 |
| Disk Space Free | < 10 GB | ディスク満杯 1 時間前に警告 |
| Read Latency | > 10ms | I/O 遅延を検出 |
| Write Latency | > 5ms | I/O 遅延を検出 |
| Network Transmit Throughput | > 100 Mbps | ネットワーク飽和を検出 |
2. Enhanced Monitoring(1 秒間隔の OS メトリクス)
CPU steal、ファイルシステム、プロセス単位の監視。
有効化:Parameter Group で enable_cloudwatch_logs_exports = 1
→ CloudWatch Logs に 1 秒間隔で出力
| メトリクス | 用途 |
|---|---|
| CPU Steal | ハイパーバイザーが CPU を奪っていないか確認(> 10% なら容量不足) |
| I/O Wait | ディスク I/O 待機時間(> 50% なら ストレージボトルネック) |
| Process Memory | プロセス単位のメモリ使用量 |
| Disk I/O | 読み書き操作数・レイテンシ |
3. Performance Insights(クエリ分析)
「どのクエリが遅いのか」をビジュアル化。
RDS インスタンス
↓(秒単位の db load 分析)
Performance Insights ダッシュボード
↓
Top SQL・Wait Events を特定
↓
クエリ実行計画を最適化
主要な分析軸:
| 軸 | 活用 |
|---|---|
| Top SQL | 負荷が高いクエリを特定して最適化 |
| Wait Events | CPU、io、lock などボトルネック把握 |
| Host / User | クライアント・ユーザー別の負荷分析 |
| Dimensions | DB・テーブル単位での負荷分析 |
メンテナンスとアップグレード
初心者向めメモ: DB アップグレードは ダウンタイムが発生する大イベントです。Blue/Green Deployment で「テスト→本番切替」を自動化します。
メンテナンスウィンドウ
毎週メンテナンス時刻(AWS 指定)に以下を実施:
- OS パッチ適用
- DB エンジンマイナー更新
- インフラ メンテナンス
Single-AZ → ダウンタイム発生(通常 5 分)
Multi-AZ → フェイルオーバー(通常ユーザーに影響なし)
マイナー更新(自動)
MySQL 8.0.1 → 8.0.2(小数点以下)。互換性維持。
- AWS が自動管理
- → メンテナンスウィンドウ内に実行
- → フェイルオーバーで対応(Multi-AZ)
メジャー更新(手動)
MySQL 5.7 → 8.0(互換性破壊の可能性あり)。
【図3】Blue/Green Deployment フロー:
graph TD
A["Blue 環境<br/>MySQL 5.7(本番)"] -->|1. Clone| B["Green 環境<br/>MySQL 8.0(テスト)"]
B -->|2. テスト実行<br/>互換性確認| C["テスト合格"]
C -->|3. リッドインスタンス<br/>DNS 切替| D["Green 環境<br/>MySQL 8.0(新本番)"]
E["Blue 環境<br/>MySQL 5.7"] -->|削除| F["ロールバック可能"]
style A fill:#64B5F6,stroke:#1976D2,color:#fff
style B fill:#FFA726,stroke:#F57C00,color:#fff
style D fill:#81C784,stroke:#388E3C,color:#fff
メリット:
- ✅ ダウンタイム 0 秒(DNS 切替時のみ秒単位で影響)
- ✅ ロールバック可能(Blue 環境が本番として残存)
- ✅ テスト環境で十分なテストが可能
他の類似ツールとの比較
初心者向めメモ: RDS は「AWS 内での選択肢」ですが、マルチクラウド・オンプレを検討するならば、競合製品も比較対象です。
| 製品 | 特徴 | 対応エンジン | 最適シーン | コスト |
|---|---|---|---|---|
| RDS | AWS マネージド | MySQL, PostgreSQL, MariaDB, Oracle, SQL Server | AWS メイン企業 | 中 |
| Aurora | 超高性能・高可用性 | MySQL, PostgreSQL 互換 | 高スケーラビリティ必須 | 高 |
| Azure DB for MySQL/PostgreSQL | Azure マネージド | MySQL, PostgreSQL | Azure メイン企業 | 中 |
| GCP Cloud SQL | GCP マネージド | MySQL, PostgreSQL, SQL Server | GCP 統合 | 中 |
| PlanetScale | MySQL 互換・Serverless | MySQL(Vitess) | ハイスケール・SaaS | 従量課金 |
| Neon | PostgreSQL 互換・Serverless | PostgreSQL | 開発・スタートアップ | 無料〜 |
| Supabase | PostgreSQL + 拡張機能 | PostgreSQL | バックエンド+認証一体 | 無料〜 |
| CockroachDB Cloud | 分散 SQL・マルチリージョン | SQL(PostgreSQL 互換) | グローバル分散 | 高 |
| Vitess(オープンソース) | MySQL シェーディング | MySQL | 超大規模スケーリング | 無料(セルフホスト) |
| セルフホスト(EC2) | 制限なし | すべて | 完全カスタマイズ必要 | 安い(管理工数高) |
クライアントとエコシステム
初心者向めメモ: RDS の接続・管理・分析ツール一覧です。
| カテゴリ | ツール | 特徴 |
|---|---|---|
| GUI クライアント | DBeaver(無料・有料) | 最も広く使われた SQL IDE |
| DataGrip(有料) | JetBrains 製・高機能 | |
| MySQL Workbench | MySQL 公式 | |
| pgAdmin | PostgreSQL 公式 | |
| 監視・分析 | Performance Insights | AWS 統合・クエリ分析 |
| CloudWatch | AWS 基本メトリクス | |
| Datadog RDS Monitoring | 統合監視プラットフォーム | |
| マイグレーション | AWS DMS | AWS 公式・オンプレ→AWS |
| Flyway | DB バージョン管理・IaC | |
| Liquibase | DB スキーマ管理 | |
| ORM / クエリビルダ | Sequelize(Node.js) | ORM ライブラリ |
| SQLAlchemy(Python) | ORM ライブラリ | |
| GORM(Go) | Go ORM | |
| Prisma(Node.js) | 次世代 ORM | |
| コネクション管理 | RDS Proxy | AWS 公式・接続プール |
| PgBouncer | PostgreSQL 用・軽量 | |
| ProxySQL | MySQL 用・高性能 |
ベストプラクティス
性能最適化
1. インスタンスクラス選択
→ db.t3(開発)→ db.m6i(本番)→ db.r6i(分析)
2. ストレージ選定
→ gp3(推奨)、io1(超高 IOPS)
3. パラメータグループ最適化
→ max_connections(接続数制限)
→ innodb_buffer_pool_size(メモリ使用)
4. インデックス設計
→ EXPLAIN ANALYZE でクエリプラン確認
→ 冗長インデックス削除
5. 接続数管理
→ RDS Proxy で short-lived connection 集約
コスト最適化
1. Reserved Instance
→ オンデマンド比 40-60% 削減(1 年/3 年)
2. 開発環境の停止
→ 夜間・休日に DB インスタンス停止(ストレージ課金のみ)
3. ストレージ分類
→ gp2 → gp3 移行で 20% 削減
4. リードレプリカ の慎重な利用
→ 不要なリードレプリカ削除で複製コスト削減
5. Graviton2 プロセッサ活用
→ db.t4g / db.r6g で 30% コスト削減
可用性確保
1. 本番は必ず Multi-AZ
→ Single-AZ は開発のみ
2. PITR 保持期間設定
→ デフォルト 7 日(金融は 35 日推奨)
3. クロスリージョン バックアップ
→ リージョン障害への備え
4. フェイルオーバーテスト定期実施
→ 昇格時間の実測
5. Read Replica の活用
→ 読み負荷分散で耐性向上
セキュリティ強化
1. ネットワーク分離
→ プライベートサブネット配置
→ Bastion EC2 経由でのアクセス
2. 暗号化有効化
→ 保存時:KMS 暗号化
→ 転送時:SSL/TLS 必須
3. IAM 認証
→ パスワード管理削減(MySQL/PostgreSQL)
→ Secrets Manager でシークレット自動ローテーション
4. 監査ログ
→ CloudWatch Logs に export
→ SIEM 分析
5. パッチ管理
→ 定期メンテナンスウィンドウ設定
→ Blue/Green Deployment でテスト
トラブルシューティング
問題:「DB インスタンス接続不可」
原因・対応:
1. Security Group 確認
→ EC2 の SG を RDS SG inbound に許可
2. ネットワーク到達性確認
aws rds describe-db-instances --query \
'DBInstances[0].Endpoint'
3. 認証情報確認
→ ユーザー名・パスワード・エンドポイント再確認
4. RDS インスタンス状態確認
aws rds describe-db-instances \
--query 'DBInstances[0].DBInstanceStatus'
→ 'available' 以外なら作成中・メンテ中
問題:「CPU 高負荷が続く」
分析フロー:
1. CloudWatch で CPU 推移確認
→ 常時 > 80% → インスタンスサイズアップ検討
2. Performance Insights で Top SQL 特定
→ Full Table Scan? → インデックス追加
3. 接続数確認
→ 接続数が上限 → RDS Proxy 導入 or インスタンスサイズアップ
問題:「ディスク満杯」
1. ディスク使用量確認
aws cloudwatch get-metric-statistics \
--metric-name FreeStorageSpace
2. 対応
→ 自動スケーリング有効化
→ 大量データ削除 + VACUUM
→ ストレージサイズ手動拡張
問題:「リードレプリカ ラグが増加」
1. ラグ監視
aws cloudwatch get-metric-statistics \
--metric-name ReplicationLag
2. 原因特定
→ リードレプリカの CPU 高? → インスタンスサイズアップ
→ ネットワーク遅延? → リージョン内複製推奨
→ 重いトランザクション? → 最適化
3. 対応
→ リードレプリカの CPU・メモリ増強
→ 読み取り負荷を他リードレプリカに分散
2025-2026 最新動向
1. Blue/Green Deployment の高速化(2026 年 1-4 月)
ダウンタイムを 5 秒以下に短縮。RDS Proxy 統合で即座復旧。
- 従来:30-60 秒のダウンタイム
- 2026年1月:5秒以下(単一リージョン)
- 2026年4月:RDS Proxy 対応 → インスタンス自動リダイレクト
PostgreSQL・MySQL・MariaDB・Aurora 対応。5 秒以下の大幅短縮により、本番環境のメジャーアップグレードが現実的に。
2. PostgreSQL 17・MySQL 8.4 LTS 対応
PostgreSQL 17 機能強化:JSON テーブル関数、並列クエリ 35% 高速化、真空メモリ管理改善。
RDS では 2026 年 2 月より PostgreSQL 18.3、17.9、16.13、15.17、14.22 対応。MySQL 8.4 は 2025 年 LTS、レプリケーション・JSON ハンドリング強化。
3. Aurora DSQL(分散 SQL)
マルチリージョン同期、超低レイテンシを提供する新世代 DB。
- RDS PostgreSQL Aurora DSQL
- 単一リージョン マルチリージョン
- フェイルオーバー リアルタイム同期
- 1-2 分 < 100ms レイテンシ
4. Multi-AZ Cluster 改善
2 つの読み取り Standby 構成で、書き込みレイテンシ 2 倍改善。マイナーバージョンアップグレード時間 35 秒以下。
5. Graviton4 プロセッサ対応
CPU 性能 30% 向上、コスト 40% 削減。
6. Amazon Bedrock との統合
生成 AI による異常検知・クエリ最適化提案。
Performance Insights
↓(AI 分析)
異常検知・改善提案
↓
自動最適化実行
7. Optimized Reads / Writes
読み書きパフォーマンスの自動最適化。
学習リソース
公式ドキュメント
学習コース
- AWS Skill Builder RDS トレーニング
- Udemy「AWS RDS 完全マスター」
- Linux Academy・A Cloud Guru の RDS コース
ハンズオン
# 1. RDS インスタンス作成(CloudFormation)
aws cloudformation create-stack \
--stack-name my-rds \
--template-body file://rds-template.yaml
# 2. DBeaver で接続・SQL 実行
# 3. Performance Insights でモニタリング
# 4. Blue/Green Deployment でアップグレード
実装例・活用シーン
シーン 1:ECS + RDS PostgreSQL の標準構成
version: '3'
services:
web:
image: myapp:latest
environment:
DB_HOST: mydb.c123abc456.us-east-1.rds.amazonaws.com
DB_PORT: 5432
DB_NAME: myappdb
DB_USER: appuser
depends_on:
- db
db:
# RDS PostgreSQL に置き換え
# AWS Systems Manager Secrets Manager でシークレット管理
シーン 2:Lambda + RDS Proxy + IAM 認証
import boto3
import pymysql
from pymysql import cursors
def lambda_handler(event, context):
rds_client = boto3.client('rds')
# IAM トークン生成
token = rds_client.generate_db_auth_token(
DBHostname='mydb-proxy.proxy-c123abc456.us-east-1.rds.amazonaws.com',
Port=3306,
DBUser='iamuser'
)
# RDS Proxy 経由で接続
connection = pymysql.connect(
host='mydb-proxy.proxy-c123abc456.us-east-1.rds.amazonaws.com',
port=3306,
user='iamuser',
password=token,
database='mydb',
ssl={'ssl': True}
)
with connection.cursor(cursors.DictCursor) as cursor:
cursor.execute("SELECT * FROM users LIMIT 10")
return cursor.fetchall()
シーン 3:バックアップ・PITR 復旧スクリプト
#!/bin/bash
# スナップショット作成
aws rds create-db-snapshot \
--db-instance-identifier mydb \
--db-snapshot-identifier mydb-backup-$(date +%Y%m%d-%H%M%S)
# PITR で復旧(誤削除から 10 分前)
RESTORE_TIME=$(date -u -d '10 minutes ago' +%Y-%m-%dT%H:%M:%SZ)
aws rds restore-db-instance-to-point-in-time \
--source-db-instance-identifier mydb \
--target-db-instance-identifier mydb-restored \
--restore-time "$RESTORE_TIME"
導入ロードマップ
【Phase 1】計画・設計(1-2 週間)
├─ エンジン・インスタンスサイズ選定
├─ 高可用性要件(Single-AZ vs Multi-AZ)
├─ セキュリティ・ネットワーク設計
└─ コスト見積
【Phase 2】構築・テスト(2-4 週間)
├─ RDS インスタンス作成(CloudFormation / Terraform)
├─ バックアップ・PITR 設定
├─ Performance Insights・監視設定
├─ アプリケーション接続テスト
└─ 障害シミュレーション(フェイルオーバーテスト)
【Phase 3】移行(1-2 週間)
├─ AWS DMS でデータ複製(並行運用テスト)
├─ DNS 切替
├─ 本番運用確認
└─ レガシー DB の停止
【Phase 4】運用(継続)
├─ 日次バックアップ確認
├─ Performance Insights で定期チューニング
├─ セキュリティパッチ・メンテナンスウィンドウ管理
└─ コスト最適化レビュー(四半期ごと)
実装チェックリスト
セキュリティ
- [ ] RDS をプライベートサブネットに配置
- [ ] Security Group でインバウンド制限(必要なポートのみ)
- [ ] 暗号化有効化(KMS)
- [ ] SSL/TLS 必須設定(Parameter Group)
- [ ] IAM 認証有効化(MySQL/PostgreSQL)
- [ ] Secrets Manager でシークレット管理
- [ ] CloudWatch Logs へのログ export
- [ ] 監査ログの定期確認
可用性
- [ ] 本番は Multi-AZ デプロイメント
- [ ] PITR 保持期間を適切に設定(最小 7 日)
- [ ] クロスリージョンバックアップ有効化
- [ ] リードレプリカの配置(読み負荷分散用)
- [ ] フェイルオーバーテスト月 1 回実施
- [ ] RTO / RPO 要件の文書化
パフォーマンス
- [ ] インスタンスサイズの適正化(Performance Insights で確認)
- [ ] インデックス戦略の実装
- [ ] ストレージ自動スケーリング有効化
- [ ] RDS Proxy の導入(Lambda/ECS 利用時)
- [ ] Enhanced Monitoring 有効化
コスト
- [ ] Reserved Instance 購入検討(本番)
- [ ] 開発環境の夜間停止スケジュール
- [ ] ストレージ使用量監視
- [ ] 不要リードレプリカの削除定期確認
- [ ] Graviton2 インスタンスの活用
運用
- [ ] メンテナンスウィンドウの設定
- [ ] バージョンアップグレード計画(Blue/Green)
- [ ] 定期的なパラメータ見直し
- [ ] エスカレーション手順の文書化
まとめ
Amazon RDS は 「データベース運用の自動化」 を実現する AWS の主力マネージドサービスです。OS・パッチ・バックアップ・フェイルオーバーを AWS が一元管理し、開発者は ビジネスロジックの実装に集中 できます。
選択基準
- Oracle / SQL Server が必須 → RDS 標準版 or RDS Custom
- MySQL / PostgreSQL で標準可用性 → RDS(最も推奨)
- 超高可用性・読み取りスケール → Aurora
- OS 直接アクセス必須 → RDS Custom
成功のコツ
- ✅ 早期に Multi-AZ を有効化 → 本番環境は SLA 99.95% で十分
- ✅ Performance Insights で継続的チューニング → インスタンスサイズの無駄削減
- ✅ Blue/Green Deployment でノーダウンアップグレード → メンテナンス影響を最小化
- ✅ RDS Proxy 導入 → Lambda・ECS との相性が劇的に改善
参考文献
- AWS RDS 公式ドキュメント
- Amazon RDS ベストプラクティス
- RDS Performance Insights ガイド
- Blue/Green Deployments for Amazon RDS
- 2026 年 1 月:5 秒以下ダウンタイム達成
- 2026 年 4 月:RDS Proxy 統合対応
- RDS Proxy ドキュメント
- Overview of Amazon RDS Blue/Green Deployments
- Amazon RDS Multi-AZ Deployments
- PostgreSQL Release Notes
- PostgreSQL 17 & 18 最新仕様・並列クエリ最適化
- PostgreSQL 17 Official Documentation
- MySQL 8.4 LTS Reference Manual
- AWS Well-Architected Framework - Database
- Oracle Database Documentation
- AWS Skill Builder「Amazon RDS for Database Administrators」
- AWS Database Blog
- RDS・Aurora・DMS 最新情報
- DBeaver 公式ドキュメント
- AWS DMS(Database Migration Service)ガイド
最終更新:2026-04-26