チュートリアル:プライマリ リージョンからデータを読み取る際のエラーをシミュレートする

このチュートリアルは、シリーズの第 2 部です。 ここでは、失敗をシミュレートすることによって、読み取りアクセス geo ゾーン冗長ストレージ (RA-GZRS) の利点について学習します。

エラーをシミュレートするには、静的ルーティングまたは Fiddler のいずれかを使用できます。 どちらの方法でも、RA-GZRS ストレージ アカウントのプライマリ エンドポイントに対する要求エラーをシミュレートして、アプリケーションが代わりにセカンダリ エンドポイントから読み取りを行うようにすることができます。

Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。

シリーズの第 2 部で学習する内容は次のとおりです。

  • アプリケーションの実行と一時停止
  • 無効な静的ルートまたは Fiddler を使用してエラーをシミュレートする
  • プライマリ エンドポイントの復元をシミュレートする

前提条件

このチュートリアルを開始する前に、第 1 部のチュートリアル「Azure Storage を使用してアプリケーション データを高可用にする」を完了してください。

静的ルーティングを使用してエラーをシミュレートするには、管理者特権でのコマンド プロンプトを使用します。

Fiddler を使用してエラーをシミュレートするには、Fiddler をダウンロードしてインストールします。

無効な静的ルートで失敗をシミュレートする

RA-GZRS ストレージ アカウントのプライマリ エンドポイントに対するすべての要求について無効な静的ルートを作成できます。 このチュートリアルでは、ストレージ アカウントに要求をルーティングするためのゲートウェイとしてローカル ホストを使用します。 ローカル ホストをゲートウェイとして使用すると、ストレージ アカウントのプライマリ エンドポイントに対するすべての要求がホスト内でループバックされ、要求が失敗します。 失敗とプライマリ エンドポイントの回復を無効な静的ルートでシミュレートするには、次の手順に従います。

アプリケーションの開始と一時停止

前のチュートリアルの手順に従ってサンプルを起動し、テスト ファイルをダウンロードします。それがプライマリ ストレージからダウンロードされていることを確認します。 ターゲット プラットフォームに応じて、サンプルを手動で一時停止するか、プロンプトで待機できます。

エラーをシミュレートする

アプリケーションが一時停止している間に、管理者としてコマンド プロンプトを起動する (Windows の場合) か、root としてターミナルを実行します (Linux の場合)。

コマンド プロンプトまたはターミナルから、次のコマンドの STORAGEACCOUNTNAME を自分のストレージ アカウントの名前に置き換えて入力し、ストレージ アカウントのプライマリ エンドポイント ドメインに関する情報を取得します。

nslookup STORAGEACCOUNTNAME.blob.core.windows.net

ストレージ アカウントの IP アドレスを後で使用できるようテキスト エディターにコピーします。

ローカル ホストの IP アドレスを取得するには、Windows のコマンド プロンプトから「ipconfig」と入力するか、または Linux のターミナルから「ifconfig」と入力します。

宛先ホスト用の静的ルートを追加するには、Windows のコマンド プロンプトまたは Linux ターミナルから、次のコマンドの <destination_ip> を自分のストレージ アカウントの IP アドレスに、<gateway_ip> を自分のローカル ホストの IP アドレスに置き換えて入力します。

Linux

sudo route add <destination_ip> gw <gateway_ip>

Windows

route add <destination_ip> <gateway_ip>

サンプルを実行中のウィンドウで、アプリケーションを再開するか適切なキーを押してサンプル ファイルをダウンロードします。それがセカンダリ ストレージからダウンロードされていることを確認します。 その後、サンプルをもう一度一時停止するか、プロンプトで待機できます。

プライマリ エンドポイントの復元をシミュレートする

プライマリ エンドポイントが再び機能するようになった状態をシミュレートするには、無効な静的ルートをルーティング テーブルから削除します。 これにより、プライマリ エンドポイントに対する要求はすべて、デフォルト ゲートウェイを介してルーティングできるようになります。 Windows のコマンド プロンプトまたは Linux のターミナルから次のコマンドを入力します。

Linux

sudo route del <destination_ip> gw <gateway_ip>

Windows

route delete <destination_ip>

アプリケーションを再開するか適切なキーを押してサンプル ファイルをダウンロードします。今回は、それが再びプライマリ ストレージからダウンロードされていることを確認します。

Fiddler で失敗をシミュレートする

Fiddler を使用して失敗をシミュレートするには、RA-GZRS ストレージ アカウントのプライマリ エンドポイントに対する要求について失敗した応答を挿入します。

以降のセクションでは、fiddler を使用して失敗とプライマリ エンドポイントの回復をシミュレートする方法について説明します。

Fiddler を起動する

Fiddler を開き、 [Rules](ルール)[Customize Rules](ルールのカスタマイズ) の順に選択します。

Fiddler のルールをカスタマイズする

Fiddler ScriptEditor が起動し、SampleRules.js ファイルが表示されます。 このファイルを使用して Fiddler をカスタマイズします。

次のサンプル コードの STORAGEACCOUNTNAME を自分のストレージ アカウントの名前に置き換えて OnBeforeResponse 関数内に貼り付けます。 サンプルによっては、ダウンロードするテスト ファイルの名前に HelloWorld を置き換えるか、条件のその部分が適用されない場合は削除する必要がある場合もあります。 この新しいコードは、すぐに実行されないようにコメント アウトされています。

完了したら、 [File](ファイル)[Save](保存) の順に選択して変更を保存します。 ScriptEditor ウィンドウは、次の手順で使用するため、開いたままにしておきます。

    /*
        // Simulate data center failure
        // After it is successfully downloading the blob, pause the code in the sample,
        // uncomment these lines of script, and save the script.
        // It will intercept the (probably successful) responses and send back a 503 error.
        // When you're ready to stop sending back errors, comment these lines of script out again
        //     and save the changes.

        if ((oSession.hostname == "STORAGEACCOUNTNAME.blob.core.windows.net")
            // depending on the sample, you may need to modify or remove the line below
            && (oSession.PathAndQuery.Contains("HelloWorld"))) {
            oSession.responseCode = 503;
        }
    */

カスタマイズしたルールを貼り付ける

アプリケーションの開始と一時停止

前のチュートリアルの手順に従ってサンプルを起動し、テスト ファイルをダウンロードします。それがプライマリ ストレージからダウンロードされていることを確認します。 ターゲット プラットフォームに応じて、サンプルを手動で一時停止するか、プロンプトで待機できます。

エラーをシミュレートする

アプリケーションが一時停止している間に、Fiddler に戻り、OnBeforeResponse 関数内に保存したカスタム ルールのコメントを解除します。 [ファイル][保存] を選択して、ルールが有効になるように変更を保存します。 このコードでは、RA-GZRS ストレージ アカウントに対する要求を探し、パスにサンプル ファイルの名前が含まれている場合は、応答コード 503 - Service Unavailable を返します。

サンプルを実行中のウィンドウで、アプリケーションを再開するか適切なキーを押してサンプル ファイルをダウンロードします。それがセカンダリ ストレージからダウンロードされていることを確認します。 その後、サンプルをもう一度一時停止するか、プロンプトで待機できます。

プライマリ エンドポイントの復元をシミュレートする

Fiddler で、カスタム ルールを削除するか、もう一度コメント アウトします。 [ファイル][保存] を選択して、ルールが有効ではなくなったことを確認します。

サンプルを実行中のウィンドウで、アプリケーションを再開するか適切なキーを押してサンプル ファイルをダウンロードします。それが再びプライマリ ストレージからダウンロードされていることを確認します。 この後、サンプルを終了できます。

次のステップ

シリーズの第 2 部では、失敗をシミュレートして読み取りアクセス geo 冗長ストレージをテストする方法について学習しました。

RA-GZRS ストレージのしくみとその関連するリスクの詳細については、RA-GZRS を使用した HA アプリの設計に関する記事を参照してください。