AWS での DR 構成
ここまで学んだ DR の概念(RPO/RTO、マルチリージョン、バックアップ、フェイルオーバー)を、AWS のサービスを使って具体的にどう構築するかを学びます。
大量データアーキテクチャの統合アーキテクチャを前提に、DR リージョンの構成を設計します。
Primary と DR の構成図
┌─ Primary Region (ap-northeast-1) ────────────────────────────────┐
│ │
│ Route 53 (api.example.com) │
│ ├── Primary: ap-northeast-1 (重み 100) │
│ └── DR: us-west-2 (重み 0) │
│ │
│ ┌─ CloudFront ─────────────────────────────────────────────────┐│
│ │ Origin: ALB (Primary) ││
│ └───────────────────────────────────────────────────────────────┘│
│ │
│ ┌─ ALB ─────────────────────────────────────────────────────────┐│
│ │ Target Group → ECS Fargate (4 tasks) ││
│ └───────────────────────────────────────────────────────────────┘│
│ │
│ ┌─ ECS Fargate ─────────────────────────────────────────────────┐│
│ │ idp-server × 4 ││
│ └───────────────────────────────────────────────────────────────┘│
│ │
│ ┌─ Aurora Global Database ──────────────────────────────────────┐│
│ │ Primary Cluster ││
│ │ ├── Writer (db.r6g.xlarge) ││
│ │ └── Reader (db.r6g.xlarge) ││
│ └───────────────────────┬───────────────────────────────────────┘│
│ │ ストレージレベルレプリケーション │
│ ┌─ ElastiCache ─────────┼───────────────────────────────────────┐│
│ │ Redis (session/cache) │ ││
│ └────────────────────────│──────────────────────────────────────┘│
│ │ │
└───────────────────────────│────────────────────────────────────────┘
│
│ < 1秒のラグ(通常)
│
┌─ DR Region (us-west-2) ──│────────────────────────────────────────┐
│ │ │
│ ┌─ ALB ─────────────────│───────────────────────────────────────┐│
│ │ Target Group → ECS Fargate (0〜1 tasks) ││
│ └───────────────────────│───────────────────────────────────────┘│
│ │ │
│ ┌─ ECS Fargate ─────────│───────────────────────────────────────┐│
│ │ idp-server × 0 (Pilot Light) or × 1 (Warm Standby) ││
│ └───────────────────────│───────────────────────────────────────┘│
│ │ │
│ ┌─ Aurora Global Database│──────────────────────────────────────┐│
│ │ Secondary Cluster ▼ ││
│ │ ├── Reader (db.r6g.xlarge) ← 昇格可能 ││
│ │ └── (Writer なし。昇格するまで読み取り専用) ││
│ └───────────────────────────────────────────────────────────────┘│
│ │
│ ┌─ ElastiCache ─────────────────────────────────────────────────┐│
│ │ Redis (空 or Global Datastore) ││
│ └───────────────────────────────────────────────────────────────┘│
│ │
│ ┌─ S3 (クロスリージョンレプリケーション) ────────────────────────┐│
│ │ バックアップ、監査ログのコピー ││
│ └───────────────────────────────────────────────────────────────┘│
│ │
└────────────────────────────────────────────────────────────────────┘
AWS サービス別の DR 設計
Route 53(DNS)
フェイルオーバールーティング:
api.example.com
├── Primary: ALB (ap-northeast-1)
│ ヘルスチェック: /actuator/health → 3回連続失敗で Unhealthy
└── Secondary: ALB (us-west-2)
ヘルスチェック: /actuator/health
Primary が Unhealthy → 自動で Secondary に切り替わる
設定のポイント:
・TTL: 60秒(短く。DR 切り替え後の伝搬を速く)
・ヘルスチェック間隔: 10秒
・失敗閾値: 3回
→ 最短30秒で切り替え検知
Aurora Global Database
構成:
Primary Cluster (ap-northeast-1)
├── Writer
└── Reader
│
│ ストレージレベルレプリケーション
│ ラグ: 通常 < 1秒
▼
Secondary Cluster (us-west-2)
└── Reader(昇格可能)
特徴:
・ストレージレベルでレプリケーション(論理レプリケーションより高速)
・通常のラグ: 1秒未満
・RPO: 通常 < 1秒(リージョン障害時はラグ分のデータ損失)
・昇格時間: 1〜2分
フェイルオーバー手順:
① Managed Planned Failover(計画的)
・Primary と Secondary を入れ替え
・ダウンタイム: 数秒〜1分
・データ損失: なし(同期を待ってから切り替え)
② Unplanned Failover(障害時)
・Secondary を独立した Primary に昇格
・旧 Primary との接続を切断
・ダウンタイム: 1〜5分
・データ損失: レプリカラグ分(通常 < 1秒)
ECS Fargate
Pilot Light:
DR リージョンにタスク定義とサービスを作成済み
desired-count = 0(タスクは起動していない)
→ フェイルオーバー時に desired-count を増やすだけ
Warm Standby:
DR リージョンに最小構成で稼働(desired-count = 1)
→ フェイルオーバー時にスケールアウト(1 → 4)
共通の注意点:
・コンテナイメージは両リージョンの ECR に Push しておく
・環境変数(DB エンドポイント等)は DR リージョン用に設定
・シークレット(Secrets Manager)も DR リージョンにレプリケーション
ElastiCache
選択肢:
① フェイルオーバー時にコールドスタート(推奨)
DR リージョンの Redis は空の状態で起動
→ セッションは消える → ユーザーは再ログイン
→ キャッシュは自然にウォームアップ
→ 最もシンプル、コスト低
② Global Datastore(リアルタイム同期)
Primary → Secondary にリアルタイムレプリケーション
→ セッションも DR リージョンに同期
→ コスト増、ラグあり(数百ミリ秒)
認証サービスの場合:
→ ① が推奨。DR はめったに起きない。再ログインで復旧可能。
S3(バックアップ / 監査ログ)
クロスリージョンレプリケーション (CRR):
Primary S3 (ap-northeast-1) ──自動コピー──→ DR S3 (us-west-2)
対象:
・DB スナップショット(Aurora のクロスリージョンコピーで自動)
・監査ログ(S3 CRR で自動)
・Terraform state(S3 + DynamoDB lock)
設定:
・レプリケーションルール: 全オブジェクトを DR リージョンにコピー
・ストレージクラス: DR 側は S3 Standard-IA(コスト最適化)