DR オーケストレーターフレームワークの概要 - AWS 規範ガイダンス

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

DR オーケストレーターフレームワークの概要

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

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

Amazon RDS の場合、フェイルオーバーフェーズはクロスリージョン RDS リードレプリカをスタンドアロン DB インスタンスに昇格させます。Amazon Aurora の場合、まれに予期しない停止時にプライマリリージョンが停止すると、そのライターノードは使用できません。ライターノードとセカンダリクラスター間のレプリケーションが停止します。グローバルデータベースからセカンダリクラスターをデタッチし、スタンドアロンクラスターとして昇格させる必要があります。アプリケーションは、スタンドアロンクラスターに接続して書き込みトラフィックを送信できます。これと同じプロセスを使用して、グローバルデータベースのプライマリ DB クラスターをセカンダリリージョンに切り替えることができます。 このアプローチは、次のような制御されたシナリオで使用します。

  • 運用メンテナンス

  • 計画された運用手順

  • 新しいプライマリクラスターとしての Amazon ElastiCache (Redis OSS) セカンダリクラスターの昇格

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

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

フェイルオーバープロセス

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

DR Orchestrator FAILOVER アーキテクチャ

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

クロスリージョンフェイルオーバープロセスのアーキテクチャ図。
  1. DR Orchestrator FAILOVER ステートマシンは入力 JSON パラメータを読み取ります。

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

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

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

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

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

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

フェイルバックプロセス

以前のプライマリリージョン (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 アーキテクチャ

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

クロスリージョンフェイルバックプロセスのアーキテクチャ図。
  1. フェイルバックを開始する前に、根本原因分析 (RCA) を実行するときに使用する手動 DB スナップショットを作成します。

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

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

  3. に基づいてresourceTypeDR Orchestrator FAILBACKステートマシンはCreate Aurora Secondary DB Cluster ステートマシンを呼び出します。

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

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

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

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

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

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

DR オーケストレーターの失敗

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

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

さまざまなリソースタイプのフェイルオーバーを示すステートマシン図。

ステートマシンは、次のコードに示すように、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" } } ] } ] }

パラメーターの詳細

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

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

DR オーケストレーターの失敗

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

フェイルバックのリソースタイプを示すステートマシン図。

ステートマシンは、次のコードに示すように、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" } } ] } ] }