次の方法で共有


Azure CLI でサービスダイレクト障害を使うカオス実験を作成する

カオス実験を使用して、制御された環境で障害を引き起こすことで、アプリケーションにこれらの障害に対する回復性があることを確認できます。 この記事では、カオス実験と Azure Chaos Studio を使用して、複数読み取り、単一書き込みの Azure Comos DB フェールオーバーを発生させます。 この実験を行うことで、フェールオーバー イベントが発生したときにデータ損失を防ぐことができます。

これらの同じ手順を使って、任意のサービス直接障害の実験を設定して実行できます。 カオス エージェントのインストールが必要なエージェントベースの障害とは異なり、サービスダイレクト障害は、インストルメンテーションを必要とせずに Azure リソースに対して直接実行されます。

前提条件

  • Azure サブスクリプション。 Azure サブスクリプションをお持ちでない場合は、開始する前に Azure 無料アカウントを作成してください。
  • Azure Cosmos DB アカウント。 Azure Cosmos DB アカウントがない場合は、作成できます。
  • Azure Cosmos DB アカウントの読み取りリージョンと書き込みリージョンが 1 つ以上設定されていること。

Azure Cloud Shell を開く

Azure Cloud Shell は無料のインタラクティブ シェルです。この記事の手順は、Azure Cloud Shell を使って実行することができます。 一般的な Azure ツールが事前にインストールされており、アカウントで使用できるように構成されています。

Cloud Shell を開くには、コード ブロックの右上隅にある [使ってみる] を選択します。 また、Bash に移動して別のブラウザー タブで Cloud Shell を開くこともできます。 [コピー] を選択してコードのブロックをコピーし、Cloud Shell に貼り付けてから、[入力] を選択して実行します。

CLI をローカルにインストールして使う場合、このチュートリアルでは、Azure CLI バージョン 2.0.30 以降が必要です。 バージョンを確認するには、az --version を実行します。 インストールまたはアップグレードする必要がある場合は、Azure CLI のインストールに関するページを参照してください。

Note

ここに示す手順では、Cloud Shell 内の Bash ターミナルを使用します。 CLI をローカルまたは PowerShell ターミナルで実行していると、一部のコマンドが説明どおりに機能しない場合があります。

Azure Cosmos DB アカウントで Chaos Studio を有効化する

Chaos Studio では、最初にリソースを Chaos Studio に追加しておかない限り、リソースに対して障害を挿入することはできません。 リソースにターゲットと機能を作成することによって、リソースを Chaos Studio に追加します。 Azure Cosmos DB アカウントには、1 つのターゲットの種類 (サービス直接) と 1 つの機能 (フェールオーバー) しかありません。 その他のリソースには、最大 2 つのターゲットの種類がある場合があります。 ターゲットの種類の 1 つはサービスダイレクト障害用です。 もう 1 つのターゲットの種類はエージェントベース障害用です。 他のリソースには、他にも多くの機能がある場合があります。

  1. $RESOURCE_ID を、追加するリソースのリソース ID に置き換えて、ターゲットを作成します。 $TARGET_TYPE を、追加するターゲットの種類に置き換えます。

    az rest --method put --url "https://management.azure.com/$RESOURCE_ID/providers/Microsoft.Chaos/targets/$TARGET_TYPE?api-version=2023-11-01" --body "{\"properties\":{}}"
    

    たとえば、仮想マシンをサービス直接ターゲットとしてオンボードする場合:

    az rest --method put --url "https://management.azure.com/subscriptions/b65f2fec-d6b2-4edd-817e-9339d8c01dc4/resourceGroups/myRG/providers/Microsoft.Compute/virtualMachines/myVM/providers/Microsoft.Chaos/targets/Microsoft-VirtualMachine?api-version=2023-11-01" --body "{\"properties\":{}}"
    
  2. $RESOURCE_ID を、追加するリソースのリソース ID に置き換えて、ターゲット上に機能を作成します。 $TARGET_TYPE を、追加するターゲットの種類に置き換えます。 $CAPABILITY を、有効にするエラー機能の名前に置き換えます。

    az rest --method put --url "https://management.azure.com/$RESOURCE_ID/providers/Microsoft.Chaos/targets/$TARGET_TYPE/capabilities/$CAPABILITY?api-version=2023-11-01" --body "{\"properties\":{}}"
    

    たとえば、仮想マシンのシャットダウン機能を有効にする場合:

    az rest --method put --url "https://management.azure.com/subscriptions/b65f2fec-d6b2-4edd-817e-9339d8c01dc4/resourceGroups/myRG/providers/Microsoft.Compute/virtualMachines/myVM/providers/Microsoft.Chaos/targets/Microsoft-VirtualMachine/capabilities/shutdown-1.0?api-version=2023-11-01" --body "{\"properties\":{}}"
    

これで、Azure Cosmos DB アカウントが Chaos Studio に正常に追加されました。

実験の作成

実験を作成するための準備ができました。 カオス実験の作成時には、ターゲット リソースに対して実行するアクションを定義します。 アクションは編成され、順番に実行されます。 カオス実験では、並列で実行されるブランチに対して実行するアクションも定義されます。

  1. 次の JSON サンプルから始めて、実験の JSON を作成します。 実験作成 APIエラー ライブラリを使って、実行する実験に対応する JSON を変更します。

    {
      "location": "eastus",
      "identity": {
        "type": "SystemAssigned"
      },
      "properties": {
        "steps": [
          {
            "name": "Step1",
            "branches": [
              {
                "name": "Branch1",
                "actions": [
                  {
                    "type": "continuous",
                    "selectorId": "Selector1",
                    "duration": "PT10M",
                    "parameters": [
                      {
                        "key": "readRegion",
                        "value": "East US 2"
                      }
                    ],
                    "name": "urn:csci:microsoft:cosmosDB:failover/1.0"
                  }
                ]
              }
            ]
          }
        ],
        "selectors": [
          {
            "id": "Selector1",
            "type": "List",
            "targets": [
              {
                "type": "ChaosTarget",
                "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/chaosstudiodemo/providers/Microsoft.DocumentDB/databaseAccounts/myDB/providers/Microsoft.Chaos/targets/Microsoft-CosmosDB"
              }
            ]
          }
        ]
      }
    }
    
  2. Azure CLI を使って実験を作成します。 $SUBSCRIPTION_ID$RESOURCE_GROUP$EXPERIMENT_NAME を実験のプロパティに置き換えます。 実験 JSON を保存してアップロードしたことを確認します。 JSON ファイル名で experiment.json を更新します。

    az rest --method put --uri https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.Chaos/experiments/$EXPERIMENT_NAME?api-version=2023-11-01 --body @experiment.json
    

    実験ごとに、対応するシステム割り当てマネージド ID が作成されます。 次の手順の応答で、この ID のプリンシパル ID をメモします。

Azure Cosmos DB アカウントに実験アクセス許可を付与する

カオス実験を作成すると、ターゲット リソースに対して障害を実行するシステム割り当てマネージド ID が Chaos Studio によって作成されます。 実験を正常に実行するには、この ID にターゲット リソースへの適切なアクセス許可を付与する必要があります。

次のコマンドを実行して、この実験にリソースへのアクセス権を付与します。 $EXPERIMENT_PRINCIPAL_ID の箇所は、前の手順でメモしたプリンシパル ID に置き換えます。 $RESOURCE_ID を、ターゲット リソースのリソース ID に置き換えます。 この場合は、Azure Cosmos DB インスタンスのリソース ID です。 そのロールを、そのリソースの種類に適した組み込みロールに変更します。 実験の対象となるリソースごとに、このコマンドを実行します。

az role assignment create --role "Cosmos DB Operator" --assignee-object-id $EXPERIMENT_PRINCIPAL_ID --scope $RESOURCE_ID

実験を実行する

これで、実験を実行する準備が整いました。 その効果を確認するには、Azure Cosmos DB アカウントの概要を開き、別のブラウザー タブで [データをグローバルにレプリケートする] に移動することをお勧めします。実験中は定期的に更新して、リージョンのスワップを表示します。

  1. Azure CLI を使って実験を開始します。 $SUBSCRIPTION_ID$RESOURCE_GROUP$EXPERIMENT_NAME の箇所は、それぞれ実験のプロパティに置き換えます。

    az rest --method post --uri https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.Chaos/experiments/$EXPERIMENT_NAME/start?api-version=2023-11-01
    
  2. 応答には、実験の実行時に実験の状態を照会するために使用できる状態 URL が含まれています。

次のステップ

これで、Azure Cosmos DB サービス直接実験を実行したので、次のことを行う準備ができました。