クラウド内での災害対策オプション
AWS 内で利用できる災害対策戦略は、コストが低くて複雑さが少ないバックアップ作成から、複数のアクティブなリージョンを使用したより複雑な戦略まで、4 つのアプローチに大別できます。災害対策戦略を定期的にテストして、必要なときに自信を持って実行できるようにすることが重要です。
![複数の災害対策戦略と各戦略の主要ポイントを示すグラフ。](images/disaster-recovery-strategies.png)
図 6 - 災害対策戦略
高可用性の Well-Architected
バックアップと復元
バックアップと復元は、データの損失や破損を軽減するために適したアプローチです。このアプローチは、他の AWS リージョンにデータをレプリケートしてリージョンの災害を軽減したり、1 つのアベイラビリティーゾーンにデプロイしたワークロードの冗長性の欠如を軽減したりするためにも使用できます。データに加えて、インフラストラクチャ、設定、アプリケーションコードを復旧先のリージョンに再デプロイする必要があります。インフラストラクチャをエラーなく迅速に再デプロイするには、AWS CloudFormation
![バックアップと復元のアーキテクチャを示すアーキテクチャ図](images/backup-restore-architecture.png)
図 7 - バックアップと復元のアーキテクチャ
AWS のサービス
ワークロードのデータに対しては、バックアップ戦略を定期的または継続的に実行する必要があります。バックアップを実行する頻度によって、達成できる復旧時点が決まります (RPO を満たすように調整する必要があります)。バックアップは、バックアップを作成した時点に復元する方法も提供する必要があります。ポイントインタイムリカバリによるバックアップは、以下のサービスとリソースを通じて利用できます。
Amazon Simple Storage Service (Amazon S3) では、Amazon S3 クロスリージョンレプリケーション (CRR)
AWS Backup
-
Amazon EC2
インスタンス -
Amazon Relational Database Service (Amazon RDS)
データベース (Amazon Aurora データベースを含む) -
Amazon DynamoDB
テーブル -
AWS Storage Gateway
ボリューム
AWS Backup は、リージョン間でのバックアップのコピー (災害対策リージョンへのコピーなど) をサポートしています。
Amazon S3 データの追加の災害対策戦略として、S3 オブジェクトのバージョニングを有効にします。オブジェクトのバージョニングは、削除や変更のアクションの前に元のバージョンを保持することで、アクションの結果から S3 内のデータを保護します。オブジェクトのバージョニングは、人為的なミスに伴う災害への有効な軽減策となります。S3 レプリケーションを使用してデータを DR 用リージョンにバックアップしている場合、デフォルトでは、レプリケート元バケットでオブジェクトが削除されると、Amazon S3 はレプリケート元バケットにのみ削除マーカーを追加します。このアプローチは、DR 用リージョンのデータをレプリケート元リージョンでの悪意のある削除から保護します。
データに加えて、ワークロードの再デプロイと目標復旧時間 (RTO) の達成に必要な設定とインフラストラクチャもバックアップする必要があります。AWS CloudFormation
災害対策用リージョンにバックアップとして保存したデータは、フェイルオーバー時に復元する必要があります。AWS Backup には復元機能がありますが、現在、スケジュールされた復元や自動復元は利用できません。AWS SDK を使用して AWS Backup の API を呼び出すと、DR 用リージョンへの自動復元を実装できます。これを定期的に繰り返すジョブとして設定したり、バックアップが完了するたびに復元をトリガーしたりできます。次の図は、Amazon Simple Notification Service (Amazon SNS)
![バックアップの復元とテストのワークフローを示す図。](images/restore-test-backups.png)
図 8 - バックアップの復元とテスト
注記
バックアップ戦略には、バックアップのテストを含める必要があります。詳細については、「災害対策のテスト」セクションを参照してください。実装の実践デモについては、「AWS Well-Architected ラボ: データのバックアップと復元のテスト
パイロットライト
パイロットライトアプローチでは、あるリージョンから別のリージョンにデータをレプリケートし、コアワークロードインフラストラクチャのコピーをプロビジョニングします。データベースやオブジェクトストレージなど、データのレプリケーションとバックアップをサポートするために必要なリソースは常に稼働しています。アプリケーションサーバーなどの他の要素は、アプリケーションコードや設定とともにロードされますが、オフに切り替えられ、テスト時または災害対策フェイルオーバーの起動時にのみ使用されます。バックアップと復元のアプローチとは異なり、コアインフラストラクチャは常に利用可能であり、アプリケーションサーバーをオンに切り替えてスケールアウトすることで、フルスケールの本番環境を迅速にプロビジョニングできます。
![パイロットライトアーキテクチャのリファレンスアーキテクチャ図](images/pilot-light-architecture.png)
図 9 - パイロットライトのアーキテクチャ
パイロットライトアプローチでは、アクティブなリソースを最小限に抑えて災害対策の継続的なコストを最小化します。コアインフラストラクチャの要件がすべて揃っているため、災害発生時の復旧は簡素化されます。この復旧オプションでは、デプロイ方法を変更する必要があります。各リージョンに対してコアインフラストラクチャの変更を行い、ワークロード (設定、コード) の変更を各リージョンに同時にデプロイする必要があります。このステップを簡素化するには、デプロイを自動化し、Infrastructure as Code (IaC) を使用して複数のアカウントやリージョンにインフラストラクチャをデプロイします (インフラストラクチャ全体をプライマリリージョンにデプロイし、スケールダウン/オフに切り替えたインフラストラクチャを DR 用リージョンにデプロイします)。最高レベルのリソースとセキュリティの分離を実現するために、リージョンごとに異なるアカウントを使用することをお勧めします (認証情報の侵害が災害対策計画の一部である場合も)。
このアプローチでは、データ災害も軽減する必要があります。継続的なデータレプリケーションは、いくつかの種類の災害からユーザーを保護しますが、保存データのバージョニングやポイントインタイムリカバリのオプションも戦略に含めていない限り、データの破損や破壊からユーザーを保護することはできません。レプリケートしたデータを災害リージョンでバックアップして、同じリージョンにポイントインタイムバックアップを作成できます。
AWS のサービス
「バックアップと復元」セクションで説明した AWS のサービスを使用してポイントインタイムバックアップを作成することに加えて、パイロットライト戦略では次のサービスも検討してください。
パイロットライトでは、DR 用リージョン内のライブデータベースやデータストアへの継続的なデータレプリケーションが、RPO を低く抑えるための最善のアプローチです (前述のポイントインタイムバックアップに加えて使用する場合)。AWS では、以下のサービスとリソースを使用して、データをクロスリージョンで継続して非同期的にレプリケートできます。
継続的レプリケーションでは、データのバージョンを DR 用リージョンでほぼ即座に利用できます。実際のレプリケーション時間は、S3 オブジェクト用の S3 レプリケーション時間制御 (S3 RTC) や、Amazon Aurora Global Database の管理機能などのサービス機能を使用してモニタリングできます。
フェイルオーバーして災害対策用リージョンから読み取り/書き込みワークロードを実行する場合は、RDS リードレプリカをプライマリインスタンスに昇格させる必要があります。Aurora 以外の DB インスタンスの昇格は、完了するまでに数分かかり、昇格プロセスの一部として再起動が必要です。クロスリージョンレプリケーション (CRR) と RDS によるフェイルオーバーでは、Amazon Aurora Global Database を使用するといくつかの利点があります。グローバルデータベースは、専用のインフラストラクチャを使用し、アプリケーションでデータベースを全面的に利用できるようにします。また、セカンダリリージョンへのレプリケーションに伴うレイテンシーは、一般的に 1 秒未満 (AWS リージョン内では 100 ミリ秒未満) です。Amazon Aurora Global Database を使用すると、プライマリリージョンでパフォーマンスの低下や停止が発生し、リージョン全体が停止した場合でも、1 分以内にセカンダリリージョンの 1 つを昇格させて読み取り/書き込みの責任を引き継ぐことができます。昇格は自動化することが可能であり、再起動は不要です。
DR 用リージョンには、コアワークロードインフラストラクチャのスケールダウンしたバージョン (リソースの数が少ないか、サイズが小さい) をデプロイする必要があります。AWS CloudFormation を使用すると、インフラストラクチャを定義し、これを AWS アカウントや AWS リージョン全体に一貫してデプロイできます。AWS CloudFormation では、事前定義された擬似パラメータを使用して、デプロイ先の AWS アカウントや AWS リージョンを特定します。したがって、CloudFormation テンプレートに条件ロジックを実装して、スケールダウンしたバージョンのインフラストラクチャのみを RD 用リージョンにデプロイできます。EC2 インスタンスのデプロイでは、Amazon マシンイメージ (AMI) がハードウェア設定やインストール済みソフトウェアなどの情報を提供します。必要な AMI を作成する Image Builder パイプラインを実装し、これらをプライマリリージョンとバックアップリージョンの両方にコピーできます。これにより、これらのゴールデン AMI は、災害発生時にワークロードを新しいリージョンに再デプロイまたはスケールアウトするための万全の備えを提供します。Amazon EC2 インスタンスは、スケールダウンした設定 (プライマリリージョンよりも少ないインスタンス数) でデプロイされます。休止状態を使用すると、EC2 インスタンスを停止状態にできます。この場合、EC2 の費用は発生せず、使用したストレージに対してのみ支払います。EC2 インスタンスを起動するには、AWS コマンドラインインターフェイス (CLI)
パイロットライトなどのアクティブ/スタンバイ設定では、すべてのトラフィックの送信先は最初にプライマリリージョンであり、プライマリリージョンが使用できなくなると、送信先が災害対策用リージョンに切り替わります。AWS のサービスの使用を検討する場合、2 つのトラフィック管理オプションがあります。最初のオプションは、Amazon Route 53
2番目のオプションは、AWS Global Accelerator
CloudEndure Disaster Recovery
CloudEndure Disaster Recovery
![CloudEndure Disaster Recovery アーキテクチャを示すアーキテクチャ図](images/cloudendure-architecture.jpeg)
図 10 - CloudEndure Disaster Recovery アーキテクチャ
ウォームスタンバイ
ウォームスタンバイアプローチでは、本番環境のスケールダウンしたバージョンではあるが、完全な機能を備えたコピーを別のリージョンに確保します。このアプローチは、パイロットライトの拡張であり、別のリージョンでワークロードが常に稼動しているため、復旧までの時間が短縮されます。また、このアプローチでは、より簡単にテストを実行したり、継続的なテストを実装したりできるため、災害から復旧する能力に自信を深めることができます。
![ウォームスタンバイアーキテクチャを示すアーキテクチャ図](images/warm-standby-architecture.png)
図 11 - ウォームスタンバイアーキテクチャ
注意: パイロットライトとウォームスタンバイの違いは理解しにくいかもしれません。どちらの場合も、プライマリリージョンのアセットが DR 用リージョンの環境にコピーされます。両者の違いは、パイロットライトは最初に追加のアクションを実行しないと要求を処理できないのに対し、ウォームスタンバイは (縮小した容量レベルで) トラフィックを即座に処理できる点です。パイロットライトアプローチでは、サーバーの「起動」、場合によっては追加 (コア以外) のインフラストラクチャのデプロイ、スケールアップが必要ですが、ウォームスタンバイでは、スケールアップのみが必要です (すべてはデプロイ済みで、既に実行されています)。RTO と RPO のニーズに応じて、これらのアプローチのいずれかを選択してください。
AWS のサービス
ウォームスタンバイでも、「バックアップと復元」と「パイロットライト」で取り上げたすべての AWS のサービスを、データのバックアップ、データのレプリケーション、アクティブ/スタンバイのトラフィックルーティング、EC2 インスタンスを含むインフラストラクチャのデプロイに使用します。
AWS Auto Scaling
マルチサイト アクティブ/アクティブ
マルチサイト アクティブ/アクティブまたはホットスタンバイ アクティブ/パッシブ戦略の一環として、ワークロードを複数のリージョンで同時に実行できます。マルチサイト アクティブ/アクティブでは、デプロイ先のすべてのリージョンからのトラフィックを処理します。一方、ホットスタンバイでは、1 つのリージョンからのトラフィックのみを処理し、他のリージョンは災害対策専用として使用します。マルチサイト アクティブ/アクティブアプローチの場合、ユーザーはデプロイ先のすべてのリージョンでワークロードにアクセスできます。これは、災害対策として最も複雑でコストのかかるアプローチですが、適切なテクノロジーを選択して実装することで、ほとんどの災害で復旧時間をほぼゼロにまで短縮できます (ただし、データが破損した場合は、バックアップに依存する必要があり、通常は復旧時点がゼロ以外になります)。ホットスタンバイでは、アクティブ/パッシブ設定を使用し、ユーザーは単一のリージョンにのみ誘導され、DR 用リージョンにはトラフィックが送信されません。ほとんどのお客様にとって、第 2 リージョンで完全な環境を立ち上げる場合は、アクティブ/アクティブ設定を使用する方が合理的です。一方、ユーザートラフィックの処理に両方のリージョンを使用したくない場合は、ウォームスタンバイを使用する方がより経済的で、運用上の複雑さも軽減されます。
![マルチサイト アクティブ/アクティブアーキテクチャを示すアーキテクチャ図 (ホットスタンバイの場合は 1 つのアクティブパスを非アクティブに変更)](images/multi-site-active-active-architecture.png)
図 12 - マルチサイト アクティブ/アクティブアーキテクチャ (ホットスタンバイの場合は 1 つのアクティブパスを非アクティブに変更)
マルチサイト アクティブ/アクティブの場合、ワークロードは複数のリージョンで実行されるため、このシナリオではフェイルオーバーなどはありません。この場合の災害対策テストでは、リージョンの喪失に対するワークロードの反応に注目します。トラフィックのルーティング先が障害の発生したリージョンから移り、 他方のリージョンですべてのトラフィックを処理できるかを確認します。 データ災害に対するテストも必要です。バックアップと復旧は、依然として必要であり、定期的にテストする必要があります。また、データの破損、削除、または難読化を伴うデータ災害の復旧時間は常にゼロより長くなり、復旧点は常に災害の検出前の特定の時点になることにも注意してください。ほぼゼロの復旧時間を維持するために、マルチサイト アクティブ/アクティブ (またはホットスタンバイ) アプローチに伴う追加の複雑さやコストが必要である場合は、セキュリティを維持し、人為的エラーを防止して人為的災害を軽減する追加の工夫が必要になります。
AWS のサービス
ここでも、「バックアップと復元」、「パイロットライト」、「ウォームスタンバイ」で取り上げたすべての AWS のサービスを、データのバックアップ、データのレプリケーション、アクティブ/アクティブのトラフィックルーティング、EC2 インスタンスを含むインフラストラクチャのデプロイとスケーリングに使用します。
前述のアクティブ/パッシブのシナリオ (パイロットライトとウォームスタンバイ) では、Amazon Route 53 と AWS Global Accelerator の両方を使用して、ネットワークトラフィックをアクティブなリージョンにルーティングできます。アクティブ/アクティブ戦略の場合は、これらの両方のサービスを使用して、どのユーザーをどのアクティブなリージョンエンドポイントに誘導するかを決定するポリシーの定義も有効にします。AWS Global Accelerator では、各アプリケーションエンドポイントに送信するトラフィックの割合を制御するトラフィックダイヤルを設定します。Amazon Route 53 は、このパーセンテージアプローチに加えて、地理的近接性やレイテンシーベースのポリシーなど、他の利用可能な複数のポリシーをサポートしています。Global Accelerator は、AWS エッジサーバーの広範なネットワークを自動的に活用し、トラフィックを AWS ネットワークバックボーンにできるだけ早くオンボーディングしてリクエストのレイテンシーを短縮します。
この戦略のデータレプリケーションにより、RPO はほぼゼロになります。Amazon Aurora Global Database などの AWS のサービスでは、専用のインフラストラクチャを使用し、アプリケーションでデータベースを全面的に利用できるようにします。また、1 つのセカンダリリージョンへのレプリケーションに伴うレイテンシーは、一般的に 1 秒未満になります。アクティブ/パッシブ戦略では、書き込みはプライマリリージョンに対してのみ行われます。アクティブ/アクティブとの違いは、アクティブな各リージョンへの書き込みを処理する方法の設計にあります。ユーザーの読み取りは、最寄りのリージョンで処理するように設計するのが一般的です。これはローカルな読み取りと呼ばれます。書き込みには、いくつかのオプションがあります。
-
グローバルな書き込み戦略では、すべての書き込みを 1 つのリージョンにルーティングします。そのリージョンに障害が発生した場合は、別のリージョンが昇格されて書き込みを受け入れます。Aurora グローバルデータベースは、グローバルな書き込みに最適です。このデータベースは、リージョン間でのリードレプリカとの同期をサポートし、セカンダリリージョンの 1 つを昇格させて 1 分未満で読み取り/書き込みの責任を引き継げるようにします。
-
ローカルな書き込み戦略では、書き込みを最寄りのリージョンにルーティングします (読み取りと同様です)。Amazon DynamoDB グローバルテーブルを使用すると、このような戦略が可能になり、グローバルテーブルのデプロイ先であるすべてのリージョンから読み取りと書き込みができます。Amazon DynamoDB グローバルテーブルは、同時更新間での最終書き込み者優先の調整を行います。
-
書き込みのパーティション化戦略では、書き込みの競合を避けるために、パーティションキー (ユーザー ID など) に基づいて特定のリージョンに書き込みを割り当てます。この場合、双方向に設定された
Amazon S3 レプリケーションを使用できます。現在 2 つのリージョン間でのレプリケーションがサポートされています。このアプローチを実装する場合は、バケット A とバケット B の両方でレプリカ変更の同期を必ず有効にし、レプリケートしたオブジェクトに対するオブジェクトアクセスコントロールリスト (ACL)、オブジェクトタグ、オブジェクトロックなどのレプリカメタデータの変更をレプリケートしてください。また、アクティブなリージョンのバケット間で削除マーカーをレプリケートするかどうかも設定できます。レプリケーションに加えて、ポイントインタイムバックアップも戦略に含め、データの破損や破壊イベントから保護する必要があります。
AWS CloudFormation は、複数の AWS リージョンの AWS アカウント間でインフラストラクチャを一貫してデプロイするための強力なツールです。AWS CloudFormation StackSets は、この機能を拡張し、1 回の操作で複数のアカウントやリージョンにわたって CloudFormation スタックを作成、更新、または削除できるようにします。AWS CloudFormation では YAML または JSON を使用して Infrastructure as Code を定義しますが、AWS Cloud Development Kit (AWS CDK)