Aurora ステートマシンと Step Functions ステートマシン - AWS 規範ガイダンス

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

Aurora ステートマシンと Step Functions ステートマシン

このセクションでは、Amazon Aurora クラスターのフェイルオーバーとフェイルバックに固有のプロセスマシンとステートマシンについて説明します。クラスターはグローバルデータベースとして設定されます。

注記

デモンストレーションの目的で、この例では Aurora MySQL 互換エディションを使用しています。Aurora PostgreSQL 互換エディションでも同様の手順を使用できます。

定常状態

定常状態では、Amazon Aurora MySQL 互換グローバルデータベース (dr-globaldb-cluster-mysql) が 2 つの DB クラスターで作成されています。最初の DB クラスター (db-cluster-01) は、読み取り/書き込みワークロードを処理するためにプライマリ AWS リージョン (us-east-1) に作成されています。2 番目の DB クラスター (db-cluster-02) は、読み取り専用ワークロードをサーバーするためにセカンダリリージョン (us-west-2) に作成されています。

DR ソリューションの提供に加えて、アプリケーションからセカンダリ DB クラスターに読み取りクエリをルーティングすることで、プライマリ DB クラスターの負荷を軽減できます。これらの各クラスターには、それぞれ dbcluster-01-use1-instance-1および という名前のデータベースインスタンスが 1 つ含まれdbcluster-02-usw2-instance-2ています。

イベント状態

Amazon Aurora グローバルデータベースを使用すると、災害の計画と復旧をかなり迅速に行うことができます。ディザスタからの復旧は通常、目標復旧時間 (RTO) と目標復旧時点 (RPO) の値を使用して測定されます。詳細については、「Amazon Aurora グローバルデータベースでのスイッチオーバーまたはフェイルオーバーの使用」を参照してください。

Aurora グローバルデータベースでは、フェイルオーバーには 2 つの異なるアプローチがあります。

  • スイッチオーバー (マネージド計画フェイルオーバー)

  • フェイルオーバー (手動の計画外のフェイルオーバー、または のデタッチと昇格

切り替え

スイッチオーバーは、運用メンテナンスやその他の計画された運用手順など、制御された環境を対象としています。マネージド計画フェイルオーバーを使用すると、Aurora グローバルデータベースのプライマリ DB クラスターをセカンダリリージョンの 1 つに再配置できます。スイッチオーバーはセカンダリ DB クラスターがプライマリデータベースと同期されるまで待機するため、RPO は 0 (データ損失なし) です。詳細については、「Amazon Aurora グローバルデータベースのスイッチオーバーの実行」を参照してください。

dr-orchestrator-stepfunction-FAILOVER ステートマシンはイベント状態中に呼び出され、プライマリクラスターを選択したセカンダリリージョン () に切り替えますus-west-2

スイッチオーバーを実行するには、次の手順を実行します。

  1. AWS Management Consoleにサインインします。

  2. リージョンを DR リージョン (us-west-2) に変更します。

  3. サービス に移動し、Step Functions を選択します。

  4. dr-orchestrator-stepfunction-FAILOVER ステートマシンに移動します。

  5. 実行の開始 を選択し、 Input - optionalセクションに次の JSON コードを入力します。

    { "StatePayload": [ { "layer": 1, "resources": [ { "resourceType": "PlannedFailoverAurora", "resourceName": "Switchover (planned failover) of Amazon Aurora global databases (MySQL)", "parameters": { "GlobalClusterIdentifier": "!Import dr-globaldb-cluster-mysql-global-identifier", "DBClusterIdentifier": "!Import dr-globaldb-cluster-mysql-cluster-identifier" } } ] } ] }
  6. dr-orchestrator-stepfunction-FAILOVER ステートマシンはリソースタイプを PlannedFailoverAuroraMySQL として読み取り、dr-orchestrator-stepfunction-planned-Aurora-failoverステートマシンを呼び出して Aurora グローバルデータベースをフェイルオーバーします。

    のステートマシン図 PlannedFailoverAurora。
  7. dr-orchestrator-stepfunction-planned-Aurora-failover ステートマシンは次の手順を実行して、Aurora MySQL 互換グローバルデータベースロールを切り替えます。

    フェイルオーバーステータスをチェックするステートマシンの図。
    [ステップ] 説明 想定値
    インポートの解決 Lambda 関数は、!Import <variable name>値を実際の名前に置き換えます。 "!Import dr-globaldb-cluster-mysql-global-identifier" は に置き換えられます"dr-globaldb-cluster-mysql"
    フェイルオーバー Aurora グローバルクラスター Lambda 関数は failover_global_cluster Boto3 APIs を呼び出して、Aurora グローバルデータベースをフェイルオーバーします。
    { 'GlobalCluster': { 'GlobalClusterIdentifier': 'dr-globaldb-cluster-mysql', 'GlobalClusterResourceId': 'cluster-cce7f9bec2846db4', 'GlobalClusterArn': 'arn:aws:rds::xxx', 'Status': 'failing-over', .... .... } }
    フェイルオーバーステータスを確認する Lambda 関数は describe_db_clusters Boto3 APIsを呼び出して、フェイルオーバーのステータスを確認します。 変更中、使用可能
    成功トークンの送信 Lambda 関数は send_task_success Boto3 APIsを呼び出し、成功トークンをDR Orchestrator Failoverステートマシンに送り返します。 h7XRiCdLtd/83p1E0dMccoxlzFhglsdkzpK9mBVKZsp7d9yrT1W
  8. Amazon RDS コンソールに移動します。ステータス では、Aurora グローバルデータベースの値が「利用可能」から「 の切り替え」または「 の変更」に変わります。

  9. dr-orchestrator-stepfunction-planned-Aurora-failover ステートマシンが完了すると、成功トークンをdr-orchestrator-stepfunction-FAILOVERステートマシンに送り返します。

    成功トークンが送信されたことを示すステートマシン図。
  10. dr-orchestrator-stepfunction-FAILOVER ステートマシンが完了しました。

    ステートマシンが完了したことを示すステートマシン図。

コンソールでは、セカンダリクラスター (dbcluster-02) のロールがプライマリクラスター になり、クラスターは読み取り/書き込みワークロードを処理する準備が整いました。元のプライマリクラスター (dbcluster-01) のロールがセカンダリクラスター としてリストされるようになりました。

手動の計画外のフェイルオーバー

まれに、Aurora グローバルデータベースのプライマリ で予期しない停止が発生することがあります AWS リージョン。この場合、プライマリ Aurora DB クラスターとその読み取りノードを使用できなくなり、プライマリクラスターとセカンダリクラスター間のレプリケーションが停止します。ダウンタイム (RTO) とデータ損失 (RPO) の両方を最小限に抑えるには、迅速にクロスリージョンフェイルオーバーを実行し、Aurora グローバルデータベースを再構築します。詳細については、「予期しない停止から Amazon Aurora グローバルデータベースを復旧する」を参照してください。

計画外のフェイルオーバーを実行するには、Aurora グローバルデータベースからセカンダリクラスターをデタッチする必要があります。計画外のフェイルオーバーを実行する前に、プライマリ Aurora DB クラスターでのアプリケーションの書き込みを停止します。フェイルオーバーが正常に完了したら、新しいプライマリ DB クラスターに書き込むようにアプリケーションを再設定します。このアプローチは、データ損失を防ぐのに役立ちます。また、フェイルオーバープロセス中にプライマリライターノードがオンラインに戻った場合に、データの不整合を回避するのにも役立ちます。

計画外のフェイルオーバーを実行するには、dr-orchestrator-stepfunction-FAILOVERステートマシンを呼び出します。この例では、セカンダリクラスター (db-cluster-02 は DR リージョン (us-west-2) の定常状態にあります。

フェイルオーバーを実行するには、次の手順を実行します。

  1. コンソール にサインインします。

  2. リージョンを DR リージョン (us-west-2) に変更します。

  3. サービス に移動し、Step Functions を選択します。

  4. dr-orchestrator-stepfunction-FAILOVER ステートマシンに移動します。

  5. 実行の開始 を選択し、 を UnPlannedFailoverAuroraとして使用して、 Input - optionalセクションに次の JSON コードを入力しますresourceType

    { "StatePayload": [ { "layer": 1, "resources": [ { "resourceType": "UnPlannedFailoverAurora", "resourceName": "Performing unplanned failover for Amazon Aurora global databases (MySQL)", "parameters": { "GlobalClusterIdentifier": "!Import dr-globaldb-cluster-mysql-global-identifier", "DBClusterIdentifier": "!Import dr-globaldb-cluster-mysql-cluster-identifier", "ClusterRegion": "!Import dr-globaldb-cluster-mysql-cluster-region" } } ] } ] }
  6. dr-orchestrator-stepfunction-FAILOVER ステートマシンはリソースタイプを として読み取りUnPlannedFailoverAuroraMySQLdr-orchestrator-stepfunction-unplanned-Aurora-failoverステートマシンDetach Cluster from Global Databaseからタスクを呼び出します。

    リソースタイプ のステートマシン図 UnPlannedFailoverAurora。
  7. Detach Cluster from Global Database タスクは、グローバルデータベースからセカンダリクラスターをデタッチ (削除) します。

    クラスターをデタッチし、成功トークンを送信するためのステートマシン図。
  8. セカンダリクラスター (dbcluster-02) はスタンドアロンクラスターに昇格され、読み取り/書き込みワークロードを処理できます。

  9. dr-orchestrator-stepfunction-FAILOVER ステートマシンが完了しました。

    タスクが完了したことを示すステートマシン図。
  10. セカンダリクラスター (dbcluster-02) は Aurora グローバルデータベースからデタッチされ、読み取り/ライターワークロードを処理するスタンドアロンクラスターになります。

  11. 新しいクラスターエンドポイントを使用して、この新しいスタンドアロン Aurora DB クラスターにすべての書き込みオペレーションを送信するようにアプリケーションを再設定します。

フェイルバック

障害 (またはスケジュールされたイベント) が解決されると、フェイルバックはデータベースを元の (または新しい) プライマリロケーションに返します。計画外の停止が解決されたら、以前のプライマリリージョンを Aurora グローバルデータベースに戻したい場合があります。まず、以前のプライマリリージョンから既存の DB クラスターを削除し、新しいプライマリリージョンから新しい DB クラスターを作成してから、管理された計画されたフェイルオーバープロセスを使用して新しいクラスターのロールを切り替える必要があります。

これは、オフピーク時または週末に実行できる計画されたアクティビティと見なすことができます。

ステートマシンは で作成されたため、以前のプライマリリージョン (us-east-1) からDR Orchestrator FAILBACKステートマシンを実行するDeletionProtection 前に、Amazon Aurora DB クラスターを手動で変更し、 を無効にする必要がありますDeletionProtection

DR Orchestrator Framework は、dr-orchestrator-stepfunction-FAILBACKステートマシンを使用して既存のクラスターを削除し、以前のプライマリリージョンに新しいクラスターを作成するステップを自動化します。

を無効にするにはDeletionProtection、次の手順を実行します。

  1. コンソール にサインインします。

  2. リージョンを以前のプライマリリージョン () に変更しますus-east-1

  3. Amazon RDS コンソールに移動し、クラスター名 (dbcluster-01) を選択し、 の変更を選択します

  4. 「削除保護」で、「削除保護を有効にする」チェックボックスをオフにし、「続行」を選択します。

  5. すぐに適用 を選択し、クラスターの変更 を選択します。

DR Orchestrator FAILBACK ステートマシンは、以前のプライマリリージョン () からのフェイルバックプロセス中に呼び出されますus-east-1

フェイルバックを実行するには、次の手順を実行します。

  1. コンソール にサインインします。

  2. リージョンを以前のプライマリリージョン () に変更しますus-east-1

  3. サービス に移動し、Step Functions を選択します。

  4. DR Orchestrator FAILBACK ステートマシンに移動します。

  5. 実行の開始 を選択し、 Input - optionalセクションに次の JSON コードを入力します。

    { "StatePayload": [ { "layer": 1, "resources": [ { "resourceType": "CreateAuroraSecondaryDBCluster", "resourceName": "To create secondary Aurora MySQL Global Database Cluster", "parameters": { "GlobalClusterIdentifier": "!Import dr-globaldb-cluster-mysql-global-identifier", "DBClusterIdentifier": "!Import dr-globaldb-cluster-mysql-cluster-identifier", "DBClusterName": "!Import dr-globaldb-cluster-mysql-cluster-name", "SourceDBClusterIdentifier": "!Import dr-globaldb-cluster-mysql-source-cluster-identifier", "DBInstanceIdentifier": "!Import dr-globaldb-cluster-mysql-instance-identifier", "Port": "!Import dr-globaldb-cluster-mysql-port", "DBInstanceClass": "!Import dr-globaldb-cluster-mysql-instance-class", "DBSubnetGroupName": "!Import dr-globaldb-cluster-mysql-subnet-group-name", "VpcSecurityGroupIds": "!Import dr-globaldb-cluster-mysql-vpc-security-group-ids", "Engine": "!Import dr-globaldb-cluster-mysql-engine", "EngineVersion": "!Import dr-globaldb-cluster-mysql-engine-version", "KmsKeyId": "!Import dr-globaldb-cluster-mysql-KmsKeyId", "SourceRegion": "!Import dr-globaldb-cluster-mysql-source-region", "ClusterRegion": "!Import dr-globaldb-cluster-mysql-cluster-region", "BackupRetentionPeriod": "7", "MonitoringInterval": "60", "StorageEncrypted": "True", "EnableIAMDatabaseAuthentication": "True", "DeletionProtection": "True", "CopyTagsToSnapshot": "True", "AutoMinorVersionUpgrade": "True", "MonitoringRoleArn": "!Import rds-mysql-instance-RDSMonitoringRole" } } ] } ] }
  6. DR Orchestrator FAILBACK ステートマシンはリソースタイプを として読み取りCreateAuroraSecondaryDBCluster、ステートマシンをdr-orchestrator-stepfunction-create-Aurora-Secondary-cluster呼び出します。

    リソースタイプを として示すステートマシン図 CreateAuroraSecondaryCluster。
  7. dr-orchestrator-stepfunction-create-Aurora-Secondary-cluster ステートマシンは、以前のプライマリリージョン (dbcluster-01) から既存のクラスター () を削除しますus-east-1

    グローバルデータベースから既存のクラスターを削除するステートマシン図。
  8. クラスター (dbcluster-01) が削除されると、ステートマシンは DB インスタンスとともに新しいクラスター (dbcluster-01) を作成し、Aurora グローバルデータベースをセカンダリクラスターとして結合して読み取り専用ワークロードを処理します。

    セカンダリデータベースクラスターの作成を示すステートマシン図。
  9. セカンダリクラスターが使用可能になると、dr-orchestrator-stepfunction-create-Aurora-Secondary-clusterステートマシンは完了し、成功トークンをDR Orchestrator Failbackステートマシンに送り返します。

    成功トークンが送信されたことを示すステートマシン。
  10. dr-orchestrator-stepfunction-FAILBACK ステートマシンが完了しました。

    CreateAuroraSecondaryDBCluster のステートマシン図が完了しました。
  11. Aurora グローバルデータベースは、Amazon RDS コンソールで確認できます。

プライマリ DB クラスターを us-east-1 に再配置する場合は、「スイッチオーバー」セクションで説明されている手順に従います。