マルチリージョンのアクティブ-アクティブとアクティブ-パッシブ
Route 53のレイテンシーベースルーティングで複数のリージョンに同時にトラフィックを振り分けるか、ヘルスチェックによるフェイルオーバーでウォームスタンバイへ切り替えます。
「マルチリージョンのアクティブ-アクティブとアクティブ-パッシブ」はCoddyKit上の無料Cloud & IT Cert Prepレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCloud & IT Cert Prep学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Cloud & IT Cert Prepコースには全4レッスンが含まれています。
マルチリージョンアーキテクチャが必要な理由
Multi-AZ は単一 AZ の障害から保護しますが、大規模災害や重大な障害、規制要件によって、AWS リージョン全体が利用できなくなる可能性があります。マルチリージョンアーキテクチャは、地理的に離れた 2 つ以上のリージョンでワークロードを実行することで、この問題に対処します。主なパターンは 2 つあります。1 つのリージョンがトラフィックを処理し、もう 1 つがスタンバイで待機するアクティブ/パッシブと、両方のリージョンが同時にトラフィックを処理するアクティブ/アクティブです。
アクティブ/パッシブ:ウォームスタンバイパターン
アクティブ/パッシブのマルチリージョン構成では、プライマリリージョンがすべての本番トラフィックを処理します。セカンダリリージョンでは、縮小されているものの機能するコピーを稼働させ、ウォーム状態でいつでも使用できるようにします。データはプライマリからセカンダリへ継続的にレプリケーションされます。プライマリに障害が発生した場合は、Route 53 のフェイルオーバールーティングを使用してセカンダリをアクティブに昇格させます。このパターンはアクティブ/アクティブより低コストですが、スタンバイの昇格とスケールに時間がかかるため、RTO は長くなります。
# Route 53 failover routing configuration
# Primary record: us-east-1 ALB (primary)
# Secondary record: us-west-2 ALB (failover)
aws route53 change-resource-record-sets \
--hosted-zone-id Z123 \
--change-batch '{
"Changes": [{
"Action": "CREATE",
"ResourceRecordSet": {
"Name": "app.example.com",
"Type": "A",
"Failover": "PRIMARY",
"HealthCheckId": "hc-primary"
}
}]
}'アクティブ/アクティブ:両方のリージョンでトラフィックを処理
アクティブ/アクティブ構成では、両方のリージョンが同時に本番トラフィックを処理します。Route 53 のレイテンシーベースルーティングまたは加重ルーティングによって、ユーザーを最も近い、または最適なリージョンへ振り分けます。一方のリージョンに障害が発生すると、Route 53 のヘルスチェックが障害を検知し、すべてのトラフィックを正常なリージョンへルーティングします。アクティブ/アクティブは、ほぼゼロの RTO を実現し、世界中に分散したユーザーのレイテンシーを低減するとともに、リージョン間で負荷を分散してスループットを向上させます。
# Route 53 latency-based routing for active-active
aws route53 change-resource-record-sets \
--hosted-zone-id Z123 \
--change-batch '{
"Changes": [
{
"Action": "CREATE",
"ResourceRecordSet": {
"Name": "app.example.com",
"Type": "A",
"Region": "us-east-1",
"SetIdentifier": "us-east-1",
"HealthCheckId": "hc-use1",
"AliasTarget": {"DNSName": "alb-use1.amazonaws.com"}
}
}
]
}'リージョン間のデータレプリケーション
マルチリージョンアーキテクチャで最も難しいのは、リージョン間でデータの整合性を維持することです。主なツールは次のとおりです。S3 Cross-Region Replication (CRR) は、S3 オブジェクトを別リージョンのバケットへ非同期にレプリケーションします。DynamoDB Global Tables は、結果整合性を伴うマルチマスター・マルチリージョンレプリケーションを提供します。Aurora Global Database は、1 つのプライマリリージョンから最大 5 つのセカンダリリージョンへ、1 秒未満のラグでレプリケーションします。レプリケーションの仕組みごとに、整合性の保証とラグの特性が異なります。
# Enable S3 Cross-Region Replication
aws s3api put-bucket-replication \
--bucket source-bucket-us-east-1 \
--replication-configuration '{
"Role": "arn:aws:iam::123:role/replication-role",
"Rules": [{
"Status": "Enabled",
"Destination": {
"Bucket": "arn:aws:s3:::dest-bucket-us-west-2"
}
}]
}'アクティブ/アクティブのための DynamoDB Global Tables
DynamoDB Global Tables により、真のアクティブ/アクティブ、マルチリージョン、マルチマスターのレプリケーションを実現できます。アプリケーションはどのリージョンの DynamoDB にも書き込むことができ、変更は通常 1 秒以内に他のすべてのリージョンへレプリケーションされます。競合解決には、タイムスタンプに基づく最終書き込み優先が使用されます。そのため Global Tables は、低レイテンシーのローカルな読み取りと書き込みが重要な、ゲームのランキング、ユーザープロファイル、セッションストアなどのグローバル分散アプリケーションに適しています。
# Create DynamoDB Global Table
aws dynamodb create-global-table \
--global-table-name UserProfiles \
--replication-group \
RegionName=us-east-1 \
RegionName=eu-west-1 \
RegionName=ap-southeast-1
# Applications in each region write to local DynamoDB
# Replication is automatic and bi-directionalAurora Global Database
Aurora Global Database は複数の AWS リージョンにまたがり、1 つのプライマリリージョンで書き込みを処理し、最大 5 つのセカンダリリージョンで 1 秒未満のレプリケーションラグで読み取りを処理します。DR のために、セカンダリリージョンをプライマリに昇格させることが 1 分未満で可能なため、積極的な RTO が求められるアクティブ/パッシブ構成に適しています。セカンダリリージョンは低レイテンシーの読み取りトラフィックも処理できるため、読み取りはアクティブ/アクティブ、書き込みはアクティブ/パッシブというハイブリッドパターンにもできます。
# Create Aurora Global Database
aws rds create-global-cluster \
--global-cluster-identifier my-global-db \
--engine aurora-postgresql \
--engine-version 14.5
# Add secondary region
aws rds create-db-cluster \
--db-cluster-identifier secondary-cluster \
--global-cluster-identifier my-global-db \
--engine aurora-postgresql \
--region eu-west-1フェイルオーバーのための Route 53 ヘルスチェック
マルチリージョンのフェイルオーバーでは、リージョンの障害を検知するために Route 53 ヘルスチェックを使用します。ヘルスチェックでは、エンドポイント(HTTP/HTTPS/TCP)、CloudWatch アラーム、または他のヘルスチェックから計算された結果を監視できます。Route 53 は、世界中の複数の場所からエンドポイントを継続的にポーリングします。チェックに失敗すると、Route 53 はそのリージョンのレコードを返すのを自動的に停止し、DNS TTL の期間内に正常なリージョンへトラフィックをリダイレクトします。
# Create Route 53 health check
aws route53 create-health-check \
--caller-reference unique-ref-001 \
--health-check-config '{
"Type": "HTTPS",
"FullyQualifiedDomainName": "app.us-east-1.example.com",
"Port": 443,
"ResourcePath": "/health",
"RequestInterval": 30,
"FailureThreshold": 3
}'アクティブ/アクティブのための Global Accelerator
AWS Global Accelerator は、AWS のグローバルネットワークを経由して最適なエンドポイントへトラフィックをルーティングする、2 つの静的 Anycast IP アドレスを提供します。TTL に依存する Route 53 の DNS フェイルオーバーとは異なり、Global Accelerator は1~3 秒以内にエンドポイント障害を検知し、トラフィックを即座に再ルーティングします。DNS の伝播よりもはるかに高速です。サブ秒のフェイルオーバー、ホワイトリスト登録用の固定 IP、または DNS TTL ベースのルーティングでは RTO を満たせない場合に Global Accelerator を使用します。
# Create Global Accelerator
aws globalaccelerator create-accelerator \
--name my-accelerator \
--ip-address-type IPV4
# Add endpoints in multiple regions
aws globalaccelerator create-endpoint-group \
--listener-arn arn:aws:globalaccelerator::123:accelerator/xxx/listener/yyy \
--endpoint-group-region us-east-1 \
--endpoint-configurations EndpointId=alb-us-east-1-arn,Weight=100アクティブ/アクティブにおける競合解決
アクティブ/アクティブのマルチリージョンアーキテクチャには、根本的な課題として書き込み競合があります。2 つのリージョンが同じレコードを同時に更新した場合、どちらの更新を採用するのでしょうか。DynamoDB Global Tables は最終書き込み優先を使用します。アプリケーションレベルの競合解決戦略には、イベントソーシング(追記専用ログと CRDT マージ)、バージョニング(古いバージョン番号による書き込みを拒否)、分割書き込み(各リージョンがデータのシャードを所有し、自分のシャードにのみ書き込む)があります。リージョン間の書き込み競合を最小限に抑えられるよう、データモデルを設計してください。
# DynamoDB conditional write to prevent conflicts
aws dynamodb update-item \
--table-name Orders \
--key '{"orderId":{"S":"ord-123"}}' \
--update-expression 'SET #s = :newStatus' \
--condition-expression '#v = :expectedVersion' \
--expression-attribute-names '{"#s":"status","#v":"version"}' \
--expression-attribute-values '{":newStatus":{"S":"shipped"},":expectedVersion":{"N":"1"}}'コストと運用の複雑さ
マルチリージョンアーキテクチャでは、コストと複雑さが大幅に増加します。複数リージョンのリソース、データレプリケーションのコスト(リージョン間データ転送)、ヘルスチェックのコストが発生し、多くの場合、各リージョンに重複した運用ツールも必要になります。アクティブ/パッシブは、スタンバイを縮小した容量で実行できるため、より費用対効果が高くなります。アクティブ/アクティブは最もコストがかかりますが、最高のユーザーエクスペリエンスと RTO を提供します。追加のリージョン耐障害性によるビジネス価値とコストを必ず比較検討してください。
# Key costs in multi-region architecture:
# - EC2/RDS in each region: full compute costs
# - Cross-region data transfer: ~$0.02/GB
# - Route 53 health checks: ~$0.50/check/month
# - Global Accelerator: $0.025/hour + data transfer
# - DynamoDB Global Table replication: per-write charges per region
# - Aurora Global Database: storage replicated to all regions適切なマルチリージョンパターンの選択
ビジネス要件に基づいてマルチリージョンパターンを選択します。RTO が 1 時間を超え、コストを優先する場合は、別リージョンへのバックアップと復元を使用します。RTO が数分の場合は、ウォームスタンバイを伴うアクティブ/パッシブを使用します。RTO が 1 分未満で、ユーザーが世界中に分散している場合は、アクティブ/アクティブを使用します。規制要件も考慮してください。一部の業界では特定のリージョン内にデータを保持することが求められ、レプリケーションの選択肢が制限される場合があります。トレードオフを明示して、アーキテクチャの決定を文書化してください。
# Decision matrix:
# RTO > 1 hour, RPO > 1 hour: Backup & Restore
# RTO ~minutes, RPO ~minutes: Active-Passive (Warm Standby)
# RTO < 1 minute, RPO ~0: Active-Active
# Key services for each:
# Backup & Restore: AWS Backup + S3 CRR
# Active-Passive: Aurora Global DB + Route 53 failover
# Active-Active: DynamoDB Global Tables + Global Acceleratorクイックチェック
このレッスンで扱った AWS Solutions Architect (SAA-C03) の概念について、理解度を確認します。
レッスンのまとめ
このレッスンでは、アクティブ/パッシブでは障害発生時にスタンバイリージョンをアクティブ化すること、アクティブ/アクティブでは複数のリージョンから同時にトラフィックを処理すること、そしてDynamoDB Global Tables と Aurora Global Database がマルチリージョンのデータレプリケーションにおける主要なサービスであることを学びました。Route 53 ヘルスチェックと Global Accelerator がトラフィックのルーティング判断を担います。次は、ヘルスチェック、サーキットブレーカー、リトライロジックについて学びます。
よくある質問
「マルチリージョンのアクティブ-アクティブとアクティブ-パッシブ」レッスンは無料ですか?
はい。「マルチリージョンのアクティブ-アクティブとアクティブ-パッシブ」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Cloud & IT Cert Prepコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Cloud & IT Cert Prepコースには全4レッスンが含まれています。
「マルチリージョンのアクティブ-アクティブとアクティブ-パッシブ」で何を学びますか?
Route 53のレイテンシーベースルーティングで複数のリージョンに同時にトラフィックを振り分けるか、ヘルスチェックによるフェイルオーバーでウォームスタンバイへ切り替えます。 ブラウザで直接実行するハンズオンコードでCloud & IT Cert Prepを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Cloud & IT Cert Prepを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのCloud & IT Cert Prepは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「マルチリージョンのアクティブ-アクティブとアクティブ-パッシブ」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このCloud & IT Cert Prepレッスンでコードを書いて実行できますか?
はい。すべてのCloud & IT Cert Prepレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 高可用性とフォールトトレランス:定義とトレードオフ
- ステートフルサービスのマルチAZパターン
- マルチリージョンのアクティブ-アクティブとアクティブ-パッシブ
- ヘルスチェック、サーキットブレーカー、リトライロジック