

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# AWS DMS と Amazon Aurora によるクロスリージョンディザスタリカバリの実装
<a name="implement-cross-region-disaster-recovery-with-aws-dms-and-amazon-aurora"></a>

*Mark Hudson、Amazon Web Services*

## 概要
<a name="implement-cross-region-disaster-recovery-with-aws-dms-and-amazon-aurora-summary"></a>

自然災害または人為的災害はいつでも発生する可能性があり、特定の AWS リージョンで実行されているサービスとワークロードの可用性に影響を与える可能性があります。リスクを軽減するには、AWS サービスに組み込まれているクロスリージョン機能を組み込んだディザスタリカバリ (DR) 計画を立てる必要があります。本質的にクロスリージョン機能を備えていない AWS サービスの場合、DR プランは AWS リージョン間のフェイルオーバーを処理するソリューションも提供する必要があります。

このパターンでは、1 つのリージョンにある 2 つの Amazon Aurora MySQL対応版データベースクラスターを含むディザスタリカバリ設定について説明します。DR 要件を満たすため、データベースクラスターは Amazon Aurora Global Database機能を使用するように設定されており、1 つのデータベースが複数の AWS リージョンにまたがっています。AWS Database Migration Service (AWS DMS) タスクはローカルリージョン内のクラスター間でデータをレプリケートします。ただし、AWS DMS は現在、リージョン間のタスクフェイルオーバーをサポートしていません。このパターンには、この制限を回避し、両方のリージョンで AWS DMS を個別に設定するために必要なステップが含まれています。

## 前提条件と制限事項
<a name="implement-cross-region-disaster-recovery-with-aws-dms-and-amazon-aurora-prereqs"></a>

**前提条件**
+ 「[Amazon Aurora Global Database](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Concepts.AuroraFeaturesRegionsDBEngines.grids.html#Concepts.Aurora_Fea_Regions_DB-eng.Feature.GlobalDatabase)」をサポートするプライマリ AWS リージョンとセカンダリ AWS リージョンを選択しました。
+ プライマリリージョンの 1 つのアカウントにある 2 つの独立した Amazon Aurora MySQL 対応版データベースクラスター。
+ Database インスタンスクラスは db.r5 以上 (推奨)
+ 既存のデータベースクラスター間で継続的なレプリケーションを実行するプライマリリージョンの AWS DMS タスク。
+ データベースインスタンスを作成するための要件を満たすための DR リージョンのリソースが整っている。VPC での DB インスタンスの操作の詳細については、「[VPC でDB インスタンスを使用する](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_VPC.WorkingWithRDSInstanceinaVPC.html)」を参照してください。

**制限事項**
+ Amazon Aurora Global Databaseの制限の全リストについては、「[Amazon Aurora Global Databaseの制限事項](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-global-database.html#aurora-global-database.limitations)」を参照してください。

**製品バージョン**
+ Amazon Aurora MySQL 互換エディション 5.7 または 8.0 詳細については、「[Amazon Auroraバージョン](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.VersionPolicy.html)」を参照してください。

## アーキテクチャ
<a name="implement-cross-region-disaster-recovery-with-aws-dms-and-amazon-aurora-architecture"></a>

**ターゲットテクノロジースタック**
+ Amazon Aurora MySQL 互換エディションのグローバルデータベースクラスター
+ AWS DMS

**ターゲットアーキテクチャ**

次の図は、2 つの AWS リージョン用のグローバルデータベースを示しており、1 つにはプライマリのメインデータベースとレポーターデータベース、および AWS DMS レプリケーションがあり、もう 1 つにはセカンダリのメインデータベースとレポーターデータベースがあります。

![\[クロスリージョングローバルデータベースのアーキテクチャ図。\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/b01f5043-fcb5-4b1e-b79f-999792e89bed/images/3785384c-ed01-454f-b58c-fa09d223d57b.png)


**自動化とスケール**

AWS CloudFormation を使用して、仮想プライベートクラウド (VPC)、サブネット、パラメータグループなどの前提となるインフラストラクチャをセカンダリリージョンに作成できます。AWS CloudFormation を使用して DR リージョンにセカンダリクラスターを作成し、グローバルデータベースに追加することもできます。CloudFormation テンプレートを使用してプライマリリージョンでデータベースクラスターを作成した場合は、それらを更新するか、追加のテンプレートを追加してグローバルデータベースリソースを作成できます。詳細については、「[2 つの DB インスタンスを持つ Amazon Aurora DB クラスターの作成](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbcluster.html#aws-resource-rds-dbcluster--examples)」と「[Aurora MySQL 用のグローバルデータベースクラスターの作成](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-globalcluster.html#aws-resource-rds-globalcluster--examples)」を参照してください。

最後に、フェイルオーバーイベントとフェイルバックイベントが発生した後に、CloudFormation を使用してプライマリリージョンとセカンダリリージョンに AWS DMS タスクを作成できます。詳細については、「[AWS::DMS::ReplicationTask](https://docs.amazonaws.cn/en_us/AWSCloudFormation/latest/UserGuide/aws-resource-dms-replicationtask.html)」を参照してください。

## ツール
<a name="implement-cross-region-disaster-recovery-with-aws-dms-and-amazon-aurora-tools"></a>
+ [Amazon Aurora](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_AuroraOverview.html) はフルマネージド型のリレーショナルデータベースエンジンで、MySQL および PostgreSQL との互換性があります。このパターンでは Amazon Aurora MySQL–Compatible Edition を使用しています。
+ [Amazon Aurora Global Database](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-global-database.html) は、グローバルに分散されたアプリケーション向けに設計されています。1 つの Amazon Aurora Global Databaseが複数の AWS リージョンにまたがる場合があります。データベースのパフォーマンスに影響を与えずにデータを複製します。また、各リージョンで低レイテンシーで高速なローカル読み取りが可能になり、リージョン全体の障害からのディザスタリカバリが可能になります。
+ [AWS DMS](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html) では、1 回限りの移行または継続的なレプリケーションが可能です。継続的なレプリケーションタスクにより、ソースデータベースとターゲットデータベースの同期が保たれます。セットアップ後、進行中のレプリケーションタスクはソースの変更を最小限のレイテンシーでターゲットに継続的に適用します。データの検証や変換などの AWS DMS のすべての機能は、どのレプリケーションタスクでも利用できます。

## エピック
<a name="implement-cross-region-disaster-recovery-with-aws-dms-and-amazon-aurora-epics"></a>

### プライマリリージョンの既存のデータベースクラスターを準備します。
<a name="prepare-the-existing-database-clusters-in-the-primary-region"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| データベースクラスターパラメータグループを変更します。 | 既存のデータベースクラスターパラメータグループで、`binlog_format`パラメータを「**行**」の値に設定して行レベルのバイナリロギングを有効にします。AWS DMS では、継続的なレプリケーションまたは変更データキャプチャ (CDC) を実行する場合、MySQL 互換データベースの行レベルのバイナリロギングが必要です。詳細については、「[AWS が管理する MySQL 対応データベースを AWS DMS のソースとして使用する](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.MySQL.html#CHAP_Source.MySQL.AmazonManaged)」を参照してください。 | AWS 管理者 | 
| データベースのバイナリログの保持期間を更新します。 | エンドユーザーデバイスにインストールした MySQL クライアントまたは Amazon Elastic Compute Cloud (Amazon EC2) インスタンスを使用して、Amazon Relational Database Service (Amazon RDS) が提供する次のストアドプロシージャを実行します。ここで、`XX`はログを保持する時間数です。<pre>call mysql.rds_set_configuration('binlog retention hours', XX)</pre>次のコマンドを実行してこの設定を確認します。<pre>call mysql.rds_show_configuration;</pre>AWS が管理する MySQL 互換データベースは、バイナリログをできるだけ早く消去します。したがって、保持期間は、AWS DMS タスクが実行される前にログが消去されないように十分な長さにする必要があります。通常は 24 時間で十分ですが、この値は DR リージョンで AWS DMS タスクをセットアップするのに必要な時間に基づいている必要があります。 | DBA | 

### プライマリリージョンの既存の AWS DMS タスクを更新する
<a name="update-the-existing-aws-dms-task-in-the-primary-region"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| AWS DMS タスクの ARN を記録します。 | Amazon リソースネーム (ARN) を使用して、後で使用できるようにAWS DMS タスク名を取得します。AWS DMS タスク ARN を取得するには、コンソールでタスクを表示するか、次のコマンドを実行します。<pre>aws dms describe-replication-tasks</pre>ARN は次のようになります。<pre>arn:aws:dms:us-east-1:<accountid>:task:AN6HFFMPM246XOZVEUHCNSOVF7MQCLTOZUIRAMY</pre>最後のコロンの後の文字は、後のステップで使用されるタスク名に対応しています。 | AWS 管理者 | 
| 既存の AWS DMS タスクを変更してチェックポイントを記録します。 | AWS DMS は情報を含むチェックポイントを作成し、レプリケーションエンジンは変更ストリームの復旧ポイントを確認します。チェックポイント情報を記録するには、コンソールで次のステップを実施します。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/implement-cross-region-disaster-recovery-with-aws-dms-and-amazon-aurora.html) | AWS 管理者 | 
| チェックポイント情報を検証します。 | クラスターのライターエンドポイントに接続された MySQL クライアントを使用して、レポーターデータベースクラスターの新しいメタデータテーブルをクエリし、そのテーブルが存在し、レプリケーション状態情報が含まれていることを確認します。以下のコマンドを実行してください。<pre>select * from awsdms_control.awsdms_txn_state;</pre>ARN のタスク名は、この表の`Task_Name`列にあるはずです。 | DBA | 

### 両方の Amazon Aurora クラスターを DR リージョンに拡張する
<a name="expand-both-amazon-aurora-clusters-to-a-dr-region"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| DR リージョンに基本インフラを作成します。 | Amazon Aurora クラスターの作成とアクセスに必要な基本コンポーネントを作成します。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/implement-cross-region-disaster-recovery-with-aws-dms-and-amazon-aurora.html)両方のパラメータグループの設定がプライマリリージョンの設定と一致していることを確認します。 | AWS 管理者 | 
| 両方の Amazon Aurora クラスターに DR リージョンを追加します。 | メインクラスターとレポーターの Amazon Aurora クラスターにセカンダリージョン (DR リージョン) を追加します。詳細については、「[Amazon Aurora Global DatabaseにAWS リージョンを追加](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-global-database-getting-started.html#aurora-global-database-attaching)」を参照してください。 | AWS 管理者 | 

### フェイルオーバーを実行
<a name="perform-failover"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| AWS DMS タスクを停止します。 | プライマリリージョンの AWS DMS タスクはフェイルオーバーが発生すると正しく機能しなくなるため、エラーを回避するために停止する必要があります。 | AWS 管理者 | 
| マネージドフェイルオーバーを実行してください。 | メインデータベースクラスターの DR リージョンへのマネージドフェイルオーバーを実行します。詳細については、「[Amazon Aurora Global Databaseのマネージドプラン済みフェイルオーバーを実行](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-global-database-disaster-recovery.html#aurora-global-database-disaster-recovery.managed-failover)」を参照してください。メインデータベースクラスターのフェイルオーバーが完了したら、レポーターデータベースクラスターで同じアクティビティを実行します。 | AWS 管理者、データベース管理者 | 
| メインデータベースにデータをロードします。 | DR データベースクラスター内のメインデータベースのライターノードにテストデータを挿入します。このデータは、レプリケーションが正常に機能していることを確認するために使用されます。 | DBA | 
| AWS DMS レプリケーションインスタンスを作成します。 | DR リージョンに AWS DMS レプリケーションインスタンスを作成するには、「[レプリケーションインスタンスの作成](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_ReplicationInstance.Creating.html)」を参照してください。 | AWS 管理者、データベース管理者 | 
|  AWS DMS ソースおよびターゲットエンドポイントを作成します。 | DR リージョンに AWS DMS ソースエンドポイントとターゲットエンドポイントを作成するには、「[ソースエンドポイントとターゲットエンドポイントの作成](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Endpoints.Creating.html)」を参照してください。ソースは、メインデータベースクラスターのライターインスタンスを指している必要があります。ターゲットは、Reporter Database クラスターのライターインスタンスを指します。 | AWS 管理者、データベース管理者 | 
| レプリケーションチェックポイントを取得します。 | レプリケーションチェックポイントを取得するには、MySQL クライアントを使用して DR リージョンのレポーターデータベースクラスターのライターノードに対して以下を実行してメタデータテーブルをクエリします。<pre>select * from awsdms_control.awsdms_txn_state;</pre>表で、2 番目のエピックで取得したプライマリリージョンに存在する AWS DMS タスクの ARN に対応する task\$1name 値を見つけます。 | DBA | 
|  AWS DMS タスクを作成します。 | コンソールを使用して、DR リージョンに AWS DMS タスクを作成します。タスクでは、「**データ変更のみ複製**」の移行方法を指定します。詳細については、「[タスクの作成](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Tasks.Creating.html)」を参照してください。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/implement-cross-region-disaster-recovery-with-aws-dms-and-amazon-aurora.html)AWS DMS タスクの「**移行タスクを開始する**」設定を「**作成時に自動**」に設定します。 | AWS 管理者、データベース管理者 | 
| AWS DMS タスクの ARN を記録します。 | ARN を使用して、後で使用するための AWS DMS タスク名を取得します。AWS DMS タスク ARN を取得するには、次のコマンドを実行します。<pre>aws dms describe-replication-tasks</pre> | AWS 管理者、データベース管理者 | 
| 複製されたデータを検証します。 | DR リージョンのレポーターデータベースクラスターにクエリを実行して、メインデータベースクラスターに読み込んだテストデータが複製されていることを確認します。 | DBA | 

### フェイルバックを実行する
<a name="perform-failback"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| AWS DMS タスクを停止します。 | DR リージョンの AWS DMS タスクは、フェイルバックが発生すると正しく機能しなくなるため、エラーを回避するために停止する必要があります。 | AWS 管理者 | 
| マネージドフェイルバックを実行してください。 | メインデータベースクラスターをプライマリリージョンにフェイルバックします。詳細については、「[Amazon Aurora Global Databaseのマネージドプラン済みフェイルオーバーを実行](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-global-database-disaster-recovery.html#aurora-global-database-disaster-recovery.managed-failover)」を参照してください。メインデータベースクラスターのフェイルバックが完了したら、レポーターデータベースクラスターで同じアクティビティを実行します。 | AWS 管理者、データベース管理者 | 
| レプリケーションチェックポイントを取得します。 | レプリケーションチェックポイントを取得するには、MySQL クライアントを使用して DR リージョンのレポーターデータベースクラスターのライターノードに対して以下を実行してメタデータテーブルをクエリします。<pre>select * from awsdms_control.awsdms_txn_state;</pre>表で、4 番目のエピックで取得した DR リージョンに存在する AWS DMS タスクの ARN に対応する`task_name`値を見つけます。 | DBA | 
| AWS DMS ソースとターゲットのエンドポイントを更新します。 | データベースクラスターがフェイルバックしたら、プライマリリージョンのクラスターをチェックして、どのノードがライターインスタンスであるかを判断します。次に、プライマリリージョンの既存の AWS DMS ソースエンドポイントとターゲットエンドポイントがライターインスタンスを指していることを確認します。そうでない場合は、ライターインスタンスのドメインネームシステム (DNS) 名でエンドポイントを更新します。 | AWS 管理者 | 
|  AWS DMS タスクを作成します。 | コンソールを使用して、プライマリリージョンに AWS DMS タスクを作成します。タスクでは、「**データ変更のみ複製**」の移行方法を指定します。詳細については、「[タスクの作成](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Tasks.Creating.html)」を参照してください。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/implement-cross-region-disaster-recovery-with-aws-dms-and-amazon-aurora.html) | AWS 管理者、データベース管理者 | 
|  AWS DMS タスク Amazon リソースネーム (ARN) を記録します。 | ARN を使用して、後で使用するための AWS DMS タスク名を取得します。AWS DMS タスク ARN を取得するには、次のコマンドを実行します。<pre>aws dms describe-replication-tasks</pre>タスク名は、別のマネージドフェイルオーバーを実行するときや DR シナリオ中に必要になります。 | AWS 管理者、データベース管理者 | 
| AWS DMS タスクを削除します。 | プライマリリージョンの元の (現在停止している) AWS DMS タスクと、セカンダリリージョンの既存の AWS DMS タスク (現在停止中) を削除します。 | AWS 管理者 | 

## 関連リソース
<a name="implement-cross-region-disaster-recovery-with-aws-dms-and-amazon-aurora-resources"></a>
+ [Amazon Aurora DB クラスターの設定](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_AuroraSettingUp.html)
+ [Amazon Aurora Global Database の使用](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-global-database.html)
+ [Amazon Aurora MySQL の操作](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraMySQL.html)
+ [ AWS DMS レプリケーション インスタンスを使用する](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_ReplicationInstance.html)
+ [AWS DMS エンドポイントの使用](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Endpoints.html)
+ [AWS DMS タスクでの作業](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Tasks.html)
+ [AWS CloudFormation とは](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)

## 追加情報
<a name="implement-cross-region-disaster-recovery-with-aws-dms-and-amazon-aurora-additional"></a>

この例では Amazon Aurora Global Databaseを DR に使用しています。これは、目標復旧時間 (RTO) が 1 秒、目標復旧時点 (RPO) が 1 分未満であるためです。どちらも従来の複製ソリューションよりも低く、DR シナリオに最適です。

Amazon Aurora Global Databaseには、他にも次のような多くの利点があります。
+ ローカルレイテンシーによるグローバル読み取り — 世界中の消費者は、ローカルリージョンの情報にローカルレイテンシーでアクセスできます。
+ スケーラブルなセカンダリ Amazon Aurora DB クラスター — セカンダリクラスターは個別にスケーリングでき、最大 16 の読み取り専用レプリカを追加できます。
+ プライマリからセカンダリの Amazon Aurora DB クラスターへの迅速なレプリケーション-Aurora Global Database によるレプリケーションは、プライマリ DB クラスターのパフォーマンスにほとんど影響しません。これはストレージレイヤーで発生し、クロスリージョンレプリケーションのレイテンシーは通常 1 秒未満です。

このパターンでは、レプリケーションにも AWS DMS を使用します。Amazon Aurora データベースにはリードレプリカを作成できるため、レプリケーションプロセスと DR セットアップを簡素化できます。ただし、データ変換が必要な場合や、ターゲットデータベースがソースデータベースにない追加のインデックスを必要とする場合に、AWS DMS は複製によく使用されます。