PostgreSQL: マネージドサービス vs セルフホスト比較ガイド
概要
本ドキュメントでは、AWS RDS for PostgreSQLなどのマネージドサービスを利用する場合と、 EC2やオンプレミスでセルフホストする場合の設定・運用の違いを明確にします。
┌─────────────────────────────────────────────────────────────────┐
│ PostgreSQL 運用形態比較 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────────────┐ ┌──────────────────────┐ │
│ │ セルフホスト │ │ マネージドサービス │ │
│ │ (EC2/オンプレミス) │ │ (RDS/Aurora) │ │
│ ├──────────────────────┤ ├──────────────────────┤ │
│ │ ✓ 完全な制御権 │ │ ✓ 運用負荷軽減 │ │
│ │ ✓ カスタマイズ自由 │ │ ✓ 自動バックアップ │ │
│ │ ✓ コスト最適化可能 │ │ ✓ 自動フェイルオーバ │ │
│ │ ✗ 運用負荷大 │ │ ✗ 制約あり │ │
│ │ ✗ 専門知識必要 │ │ ✗ コスト高め │ │
│ └──────────────────────┘ └──────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
1. 設定・運用タスク比較一覧
凡例
- ✅ 必要: ユーザーが設定・実施する必要あり
- 🔧 一部必要: 部分的に設定が必要
- ❌ 不要/不可: AWS側で管理、またはアクセス不可
- 📋 推奨: 必須ではないが設定を推奨
1.1 インストール・初期設定 (dba-01)
| タスク | セルフホスト | RDS | Aurora | 備考 |
|---|---|---|---|---|
| OSインストール | ✅ | ❌ | ❌ | RDS: AWSが管理 |
| PostgreSQLインストール | ✅ | ❌ | ❌ | RDS: インスタンス作成時に自動 |
| initdb実行 | ✅ | ❌ | ❌ | RDS: 自動実行 |
| postgresql.conf設定 | ✅ | 🔧 | 🔧 | RDS: Parameter Groupで設定 |
| pg_hba.conf設定 | ✅ | ❌ | ❌ | RDS: Security Groupで制御 |
| データディレクトリ設計 | ✅ | ❌ | ❌ | RDS: EBSストレージ自動管理 |
| WALディレクトリ分離 | ✅ | ❌ | ❌ | RDS: 自動最適化 |
| サービス登録 | ✅ | ❌ | ❌ | RDS: 自動起動管理 |
1.2 バックアップ・リカバリ (dba-02)
| タスク | セルフホスト | RDS | Aurora | 備考 |
|---|---|---|---|---|
| pg_dump実行 | ✅ | ✅ | ✅ | 論理バックアップは両方で利用可能 |
| pg_basebackup | ✅ | ❌ | ❌ | RDS: スナップショットを使用 |
| WALアーカイブ設定 | ✅ | ❌ | ❌ | RDS: 自動でS3にアーカイブ |
| 自動バックアップ設定 | ✅ | 🔧 | 🔧 | RDS: 保持期間のみ設定 |
| PITR設定 | ✅ | 🔧 | 🔧 | RDS: 有効化と保持期間のみ |
| リストア手順 | ✅ | 🔧 | 🔧 | RDS: コンソール/CLIで実行 |
| バックアップ検証 | ✅ | 📋 | 📋 | RDS: スナップショットから復元テスト推奨 |
1.3 レプリケーション・HA (dba-03)
| タスク | セルフホスト | RDS | Aurora | 備考 |
|---|---|---|---|---|
| ストリーミングレプリケーション | ✅ | ❌ | ❌ | RDS: リードレプリカで代替 |
| レプリケーションスロット | ✅ | ❌ | ❌ | RDS: 自動管理 |
| 同期レプリケーション設定 | ✅ | ❌ | ❌ | Aurora: 自動同期 |
| リードレプリカ作成 | ✅ | 🔧 | 🔧 | RDS: コンソールから作成 |
| フェイルオーバー設定 | ✅ | ❌ | ❌ | RDS: Multi-AZで自動 |
| Patroni/Pacemaker | ✅ | ❌ | ❌ | RDS: 不要 |
| HAProxy/PgBouncer | ✅ | 🔧 | 🔧 | RDS: RDS Proxyを使用可能 |
| VIP管理 | ✅ | ❌ | ❌ | RDS: エンドポイントで自動切替 |
1.4 セキュリティ (dba-04)
| タスク | セルフホスト | RDS | Aurora | 備考 |
|---|---|---|---|---|
| pg_hba.conf設定 | ✅ | ❌ | ❌ | RDS: Security Groupで制御 |
| SSL/TLS証明書設定 | ✅ | 🔧 | 🔧 | RDS: AWS提供証明書を使用 |
| ロール・権限設定 | ✅ | ✅ | ✅ | 両方で必要(masterユーザー経由) |
| Row Level Security | ✅ | ✅ | ✅ | 両方で設定可能 |
| pgAudit設定 | ✅ | 🔧 | 🔧 | RDS: Parameter Groupで有効化 |
| ファイアウォール設定 | ✅ | 🔧 | 🔧 | RDS: Security Group/NACL |
| 暗号化設定 | ✅ | 🔧 | 🔧 | RDS: KMSで暗号化(作成時のみ) |
| IAM認証 | ❌ | 🔧 | 🔧 | RDS固有機能 |
1.5 監視 (dba-05)
| タスク | セルフホスト | RDS | Aurora | 備考 |
|---|---|---|---|---|
| pg_stat_*ビュー参照 | ✅ | ✅ | ✅ | 両方で利用可能 |
| pg_stat_statements設定 | ✅ | 🔧 | 🔧 | RDS: Parameter Groupで有効化 |
| Prometheus/Grafana構築 | ✅ | 📋 | 📋 | RDS: CloudWatchが標準 |
| CloudWatch連携 | ❌ | ✅ | ✅ | RDS: 自動でメトリクス送信 |
| Performance Insights | ❌ | 🔧 | 🔧 | RDS固有機能(有効化推奨) |
| Enhanced Monitoring | ❌ | 🔧 | 🔧 | RDS固有(OS メトリクス) |
| ログ設定 | ✅ | 🔧 | 🔧 | RDS: Parameter Groupで設定 |
| アラート設定 | ✅ | 🔧 | 🔧 | RDS: CloudWatch Alarms使用 |
1.6 メンテナンス (dba-06)
| タスク | セルフホスト | RDS | Aurora | 備考 |
|---|---|---|---|---|
| VACUUM実行 | ✅ | ✅ | ✅ | autovacuumは両方で動作 |
| VACUUM FULL | ✅ | ✅ | ✅ | 必要に応じて手動実行 |
| ANALYZE | ✅ | ✅ | ✅ | 両方で実行可能 |
| REINDEX | ✅ | ✅ | ✅ | 両方で実行可能 |
| autovacuum調整 | ✅ | 🔧 | 🔧 | RDS: Parameter Groupで設定 |
| pg_repack | ✅ | 🔧 | 🔧 | RDS: 拡張機能として利用可能 |
| PostgreSQLアップグレード | ✅ | 🔧 | 🔧 | RDS: マネージドアップグレード |
| OSパッチ適用 | ✅ | ❌ | ❌ | RDS: メンテナンスウィンドウで自動 |
| ストレージ拡張 | ✅ | 🔧 | ❌ | Aurora: 自動拡張 |
1.7 パーティショニング (dba-07)
| タスク | セルフホスト | RDS | Aurora | 備考 |
|---|---|---|---|---|
| パーティションテーブル作成 | ✅ | ✅ | ✅ | 両方で同じSQL |
| パーティション追加・削除 | ✅ | ✅ | ✅ | 両方で同じ操作 |
| pg_partman利用 | ✅ | 🔧 | 🔧 | RDS: 拡張機能として利用可能 |
| パーティション監視 | ✅ | ✅ | ✅ | 同じクエリで監視可能 |
2. AWS RDS 固有の設定ガイド
2.1 Parameter Group設定
セルフホストでの postgresql.conf に相当する設定は、Parameter Groupで行います。
┌─────────────────────────────────────────────────────────────────┐
│ Parameter Group 構成 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Default Parameter Group │ │
│ │ (変更不可・参照用) │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ コピーして作成 │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Custom Parameter Group │ │
│ │ ┌─────────────────────────────────────────────────┐ │ │
│ │ │ 本番環境用: prod-postgres15-params │ │ │
│ │ │ ・shared_buffers = {DBInstanceClassMemory/4} │ │ │
│ │ │ ・max_connections = 200 │ │ │
│ │ │ ・log_statement = 'ddl' │ │ │
│ │ │ ・shared_preload_libraries = 'pg_stat_statements'│ │ │
│ │ └─────────────────────────────────────────────────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
推奨Parameter Group設定
# AWS CLIでParameter Group作成
aws rds create-db-parameter-group \
--db-parameter-group-name prod-postgres15-params \
--db-parameter-group-family postgres15 \
--description "Production PostgreSQL 15 parameters"
# パラメータ設定
aws rds modify-db-parameter-group \
--db-parameter-group-name prod-postgres15-params \
--parameters \
"ParameterName=shared_preload_libraries,ParameterValue=pg_stat_statements,ApplyMethod=pending-reboot" \
"ParameterName=pg_stat_statements.track,ParameterValue=all,ApplyMethod=pending-reboot" \
"ParameterName=log_statement,ParameterValue=ddl,ApplyMethod=immediate" \
"ParameterName=log_min_duration_statement,ParameterValue=1000,ApplyMethod=immediate" \
"ParameterName=log_connections,ParameterValue=1,ApplyMethod=immediate" \
"ParameterName=log_disconnections,ParameterValue=1,ApplyMethod=immediate"