

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

# DR オーケストレーターフレームワークの概要
<a name="dr-orchestrator-framework-overview"></a>

DR オーケストレーターフレームワークは、 AWS データベースのクロスリージョン DR をオーケストレーションおよび自動化するワンクリックソリューションを提供します。フェイルオーバー[AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html)とフェイルバック中に必要なステップを実行する[AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)には、 と を使用します。Step Functions ステートマシンは、オーケストレーター設計内での意思決定の基礎を提供します。フェイルオーバーまたはフェイルバックアクションを実行するための API オペレーションは、ステートマシン内から呼び出される Lambda 関数にコードされます。Lambda 関数は [AWS SDK for Python (Boto3)](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html) API を実行して AWS データベースとやり取りします。 APIs 

DR Orchestrator Framework には、フェイルオーバーフェーズとフェイルバックフェーズに対応する 2 つのメインステートマシンが含まれています。

Amazon RDS の場合、フェイルオーバーフェーズはクロスリージョン RDS リードレプリカをスタンドアロン DB インスタンスに昇格させます。Amazon Aurora の場合、まれに予期しない停止時にプライマリリージョンが停止すると、そのライターノードは使用できません。ライターノードとセカンダリクラスター間のレプリケーションが停止します。グローバルデータベースからセカンダリクラスターをデタッチし、スタンドアロンクラスターとして昇格させる必要があります。アプリケーションは、スタンドアロンクラスターに接続して書き込みトラフィックを送信できます。これと同じプロセスを使用して、グローバルデータベースのプライマリ DB クラスターをセカンダリリージョン[に切り替える](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-global-database-disaster-recovery.html)ことができます。 このアプローチは、次のような制御されたシナリオで使用します。
+ 運用メンテナンス
+ 計画された運用手順
+ 新しいプライマリクラスターとしての Amazon ElastiCache (Redis OSS) セカンダリクラスターの昇格

フェイルバックフェーズでは、ライブプライマリリージョンと新しいセカンダリリージョンの間でデータのライブレプリケーションを確立します。

DR Orchestrator はデータベースにのみ適用されることを理解することが重要です。これらのデータベースを参照し、同じリージョンにあるすべてのアプリケーションには、個別のタンデムフェイルオーバーソリューションが必要になる場合があります。データベースがセカンダリリージョンにフェイルオーバーされたら、アプリケーションを更新して、データソースとして機能する新しいデータベースインスタンスに接続する必要があります。

## フェイルオーバープロセス
<a name="failover-process"></a>

フェイルオーバーを実行するには、`DR Orchestrator FAILOVER`ステートマシンを実行します。この段階では、セカンダリデータベースは、リードレプリカ (Amazon RDS) またはセカンダリクラスター (Amazon Aurora) として、セカンダリリージョンに既に存在します。`DR Orchestrator FAILOVER` ステートマシンを実行すると、セカンダリデータベースがプライマリに 昇格します。

### `DR Orchestrator FAILOVER` アーキテクチャ
<a name="failover-architecture"></a>

次の図は、DR Orchestrator を使用する場合の Amazon Aurora のフェイルオーバープロセスの概念を示しています。Amazon Aurora と Amazon ElastiCache は同じワークフローを使用しますが、ステートマシンと Lambda 関数は異なります。



![クロスリージョンフェイルオーバープロセスのアーキテクチャ図。](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/automate-dr-solution-relational-database/images/dr-orchestrator-failover.png)


1. `DR Orchestrator FAILOVER` ステートマシンは入力 JSON パラメータを読み取ります。

1. `resourceType`** **パラメータに基づいて、ステートマシンは `Promote RDS Read Replica`、、`Failover Aurora Cluster`または の他の ステートマシンを呼び出します`Failover ElastiCache`。入力で複数のリソースが渡された場合、これらのステートマシンは並行して実行されます。

1. `Failover Aurora Cluster`** **ステートマシンは、次の 3 つのステップのそれぞれで Lambda 関数を呼び出します。 

1. `Resolve imports`** **Lambda 関数は、`App-Stack` AWS CloudFormation テンプレートの実際の値`"! import <export-variable-name>"`で解決されます。

1. Lambda** **`Failover Aurora Cluster`** **関数は、リードレプリカをスタンドアロン DB インスタンスとして** **昇格させます。

1. Lambda** **`Check Failover Status`関数は、昇格された DB インスタンスのステータスをチェックします。ステータスが **AVAILABLE** になると、Lambda 関数は成功トークンを呼び出し元のステートマシンに送り返し、完了します。

1. プライマリデータベースになった DR リージョン (`us-west-2`) のスタンドアロンデータベースにアプリケーションをリダイレクトできます。

## フェイルバックプロセス
<a name="failback-process"></a>

以前のプライマリリージョン (`us-east-1`) が再び起動したら、そのリージョンにフェイルバックして、 のデータベースが再びプライマリ`us-east-1`になります。フェイルバックを開始するには、`DR Orchestrator FAILBACK`ステートマシンを実行します。名前が示すように、このステートマシンは新しいプライマリリージョン (`us-west-2`) の変更を、現在のセカンダリとして機能する以前のプライマリリージョン (`us-east-1`) にレプリケートし始めます。

2 つのリージョン間でレプリケーションが確立されたら、フェイルバックを開始できます。フェイルバックして元のプライマリリージョン (`us-east-1`) に戻るには、現在のセカンダリリージョン (`us-east-1`) で`DR Orchestrator FAILOVER`ステートマシンを実行して、プライマリリージョンに昇格させます。

### `DR Orchestrator FAILBACK` アーキテクチャ
<a name="failback-architecture"></a>

次の図は、DR Orchestrator を使用する場合の Amazon Aurora のフェイルバックプロセスの概念を示しています。



![クロスリージョンフェイルバックプロセスのアーキテクチャ図。](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/automate-dr-solution-relational-database/images/dr-orchestrator-failback.png)


1. フェイルバックを開始する前に、根本原因分析 (RCA) を実行するときに使用する手動 DB スナップショットを作成します。

   また、前のプライマリリージョン () で Aurora クラスター`DeletionProtection`の を無効にします`us-east-1`。

1. `DR Orchestrator FAILBACK` ステートマシンは入力 JSON パラメータを読み取ります。

1. に基づいて`resourceType`、`DR Orchestrator FAILBACK`ステートマシンは`Create Aurora Secondary DB Cluster`** **ステートマシンを呼び出します。

1. `Create Aurora Secondary DB Cluster`** **ステートマシンは、次の 5 つのステップのそれぞれで Lambda 関数を呼び出します。

1. `Resolve import`** **Lambda 関数は、`App-Stack`CloudFormation テンプレートの実際の値`"! import <export-variable-name>"`で解決されます。

1. `Delete DB Instance`** **Lambda 関数は、以前のプライマリインスタンスを削除します。

1. `Check DB instance status`** **Lambda 関数は、DB が削除され`Delete DB Instance status`るまで をチェックします。

1. `Create Read Replica` Lambda** **関数は、新しいプライマリリージョンにある DB インスタンスからセカンダリリージョンにリードレプリカを作成します。

1. `Check DB instance status`** **Lambda 関数は、リードレプリカ DB インスタンスのステータスをチェックします。ステータスが **AVAILABLE** の場合、Lambda 関数は成功トークンを呼び出し元のステートマシンに送り返し、完了します。

## DR オーケストレーターの失敗
<a name="dr-orchestrator-failover"></a>

プライマリリージョン (`us-east-1`) がダウンしている場合、または運用メンテナンスなどの計画されたイベント中に、DR イベントで`DR Orchestrator FAILOVER`ステートマシンを使用します。

関数を呼び出して、単一または複数のデータベースを並行してフェイルオーバーできます。



![さまざまなリソースタイプのフェイルオーバーを示すステートマシン図。](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/automate-dr-solution-relational-database/images/dr-orchestrator-failover-state-machine.jpg)


ステートマシンは、次のコードに示すように、JSON 形式のパラメータを受け入れます。

```
{
  "StatePayload": [
    {
      "layer": 1,
      "resources": [
        {
          "resourceType": "PromoteRDSReadReplica",
          "resourceName": "Promote RDS MySQL Read Replica",
          "parameters": {
            "RDSInstanceIdentifier": "!Import rds-mysql-instance-identifier",
            "TargetClusterIdentifier": "!Import rds-mysql-instance-global-arn"
          }
        },
        {
          "resourceType": "FailoverElastiCacheCluster",
          "resourceName": "Failover ElastiCache Cluster",
          "parameters": {
            "GlobalReplicationGroupId": "!Import demo-redis-cluster-global-replication-group-id",
            "TargetRegion": "!Import demo-redis-cluster-target-region",
            "TargetReplicationGroupId": "!Import demo-redis-cluster-target-replication-group-id"
          }
        }
      ]
    }
  ]
}
```

### パラメーターの詳細
<a name="parameters"></a>

次の表は、`DR Orchestrator FAILOVER`ステートマシンで使用されるパラメータを示しています。


| パラメータ名 | 説明 | 予想される値 | 
| --- | --- | --- | 
| layer (必須: 数値) | 処理シーケンス。レイヤー 1 で定義されたすべてのリソースは、レイヤー 2 リソースを実行する前に実行する必要があります。 | 1 または 2 など | 
| リソース (必須: ディクショナリの配列) | 1 つのレイヤー内のすべてのリソースが並行して実行されます。 | <pre>{<br />"resourceType":"String",<br />"resourceName":"String",<br />"parameters":{<br />"<param1>":"<!Import cft-output-1">,<br />....<br />}</pre> | 
| resourceType (必須: 文字列) | リソースを識別するリソースのタイプ | PromoteRDSReadReplica、または FailoverElastiCacheCluster | 
| resourceName (オプション: 文字列) | これらのリソースが属するアプリケーションポートフォリオを特定するには | Promote RDS for MySQL Read Replica | 
| パラメータ (必須: ディクショナリの配列) | データベースの AWS フェイルオーバーまたはフェイルバックに必要なパラメータのリスト | <pre>{<br />          "<param1>":"<!Import<br />                cft-output-1>",<br />                "<param2>":"<!Import<br />                cft-output-2>",<br />                }</pre> | 

## DR オーケストレーターの失敗
<a name="dr-orchestrator-failback"></a>

以前のプライマリリージョン (`us-east-1`) が稼働している場合、DR イベントの後に`DR Orchestrator FAILBACK`ステートマシンを使用します。以前のプライマリリージョンの Amazon RDS [のリードレプリカ](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ReadRepl.html#USER_ReadRepl.Create)を新しいプライマリリージョン (`us-west-2`) から作成して、DR 戦略に準拠できます。これは計画されたイベントであるため、このアクティビティを週末またはオフピークの営業時間に、推定ダウンタイムでスケジュールできます。



![フェイルバックのリソースタイプを示すステートマシン図。](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/automate-dr-solution-relational-database/images/dr-orchestrator-failback-state-machine.jpg)


ステートマシンは、次のコードに示すように、JSON 形式のパラメータを受け入れます。

```
{
  "StatePayload": [
    {
      "layer": 1,
      "resources": [
        {
          "resourceType": "CreateRDSReadReplica",
          "resourceName": "Create RDS for MySQL Read Replica",
          "parameters": {
            "RDSInstanceIdentifier": "!Import rds-mysql-instance-identifier",
            "TargetClusterIdentifier": "!Import rds-mysql-instance-global-arn",
            "SourceRDSInstanceIdentifier": "!Import rds-mysql-instance-source-identifier",
            "SourceRegion": "!Import rds-mysql-instance-SourceRegion",
            "MultiAZ": "!Import rds-mysql-instance-MultiAZ",
            "DBInstanceClass": "!Import rds-mysql-instance-DBInstanceClass",
            "DBSubnetGroup": "!Import rds-mysql-instance-DBSubnetGroup",
            "DBSecurityGroup": "!Import rds-mysql-instance-DBSecurityGroup",
            "KmsKeyId": "!Import rds-mysql-instance-KmsKeyId",
            "BackupRetentionPeriod": "7",
            "MonitoringInterval": "60",
            "StorageEncrypted": "True",
            "EnableIAMDatabaseAuthentication": "True",
            "DeletionProtection": "True",
            "CopyTagsToSnapshot": "True",
            "AutoMinorVersionUpgrade": "True",
            "Port": "!Import rds-mysql-instance-DBPortNumber",
            "MonitoringRoleArn": "!Import rds-mysql-instance-RDSMonitoringRole"
          }
        }
      ]
    }
  ]
}
```