動的ターゲットを使用してホストを選択するカオス実験を作成する

カオス実験で動的ターゲットを使用すると、実験の実行対象となるターゲットのセットを選択できます。 この記事では、仮想マシン スケール セットを動的ターゲットにして、可用性ゾーンに基づきシャットダウンさせる方法を説明します。 この実験は、障害発生時に備え、Azure Virtual Machine Scale Sets インスタンスを別のリージョンにフェールオーバーする動作のテストを実施するのに役立ちます。

動的ターゲットをサポートする任意の障害について、お客様が実験をセットアップして実行する際には、ここに示す手順をそのまま使用できます。 現在、動的ターゲット設定は、仮想マシン スケール セットのシャットダウンの場合についてのみサポートされています。

前提条件

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 ターミナルで実行する場合、一部のコマンドは説明どおりに機能しないことがあります。

Virtual Machine Scale Sets インスタンスで Chaos Studio を有効にする

Azure Chaos Studio では、最初にリソースを Chaos Studio に追加しておかない限り、リソースに対して障害を挿入することはできません。 Chaos Studio にリソースを追加するには、そのリソースにターゲットと機能を作成します。

Virtual Machine Scale Sets のターゲットの種類は 1 つのみ (Microsoft-VirtualMachineScaleSet)、機能も 1 つのみ (shutdown) です。 その他のリソースには、ターゲットの種類が最大 2 つ含まれます。 ターゲットの種類の 1 つはサービスダイレクト障害用です。 もう 1 つのターゲットの種類はエージェントベース障害用です。 他のリソースには、場合によってその他多くの機能があります。

  1. 仮想マシン スケール セット リソースのターゲットを作成します。 $RESOURCE_ID の箇所は、追加する仮想マシン スケール セットのリソース ID に置き換えます。

    az rest --method put --url "https://management.azure.com/$RESOURCE_ID/providers/Microsoft.Chaos/targets/Microsoft-VirtualMachineScaleSet?api-version=2023-11-01" --body "{\"properties\":{}}"
    
  2. 仮想マシン スケール セット ターゲットに機能を作成します。 $RESOURCE_ID の箇所は、追加するリソースのリソース ID に置き換えます。 VirtualMachineScaleSet ターゲットと Shutdown-2.0 機能を指定します。

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

以上で、Chaos Studio に仮想マシン スケール セットが追加されました。

実験の作成

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

  1. 以下の Virtual Machine Scale Sets Shutdown 2.0 JSON サンプルをベースにして、お客様の実験用 JSON を作成します。 実行したい実験の内容に応じて、API での実験の作成に関するページ、障害ライブラリを参考にしながら、JSON に変更を加えてください。 現在、動的ターゲットは Virtual Machine Scale Sets Shutdown 2.0 障害でのみ使用でき、可用性ゾーンでのみフィルター処理できます。

    • ターゲットをフィルター処理する Azure 可用性ゾーンのリストを構成するには、filter 要素を使用します。 filter を指定しない場合、この障害では、仮想マシン スケール セット内のすべてのインスタンスがシャットダウンされます。
    • この実験では、指定したゾーン内のすべての仮想マシン スケール セットが対象になっています。
     {
        "location": "westus2",
        "identity": {
            "type": "SystemAssigned"
        },
        "properties": {
            "selectors": [
                {
                    "type": "List",
                    "id": "Selector1",
                    "targets": [
                        {
                            "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/rg-demo/providers/Microsoft.Compute/virtualMachineScaleSets/vmss-demo/providers/Microsoft.Chaos/targets/Microsoft-VirtualMachineScaleSet",
                            "type": "ChaosTarget"
                        }
                    ],
                    "filter": {
                        "type": "Simple",
                        "parameters": {
                            "zones": [
                                "1"
                            ]
                        }
                    }
                }
            ],
            "steps": [
                {
                    "name": "Step1",
                    "branches": [
                        {
                            "name": "Branch1",
                            "actions": [
                                {
                                    "name": "urn:csci:microsoft:virtualMachineScaleSet:shutdown/2.0",
                                    "type": "continuous",
                                    "selectorId": "Selector1",
                                    "duration": "PT2M",
                                    "parameters": [
                                        {
                                            "key": "abruptShutdown",
                                            "value": "false"
                                        }
                                    ]
                                }
                            ]
                        }
                    ]
                }
            ]
        }
    }
    
  2. Azure CLI を使って実験を作成します。 $SUBSCRIPTION_ID$RESOURCE_GROUP$EXPERIMENT_NAME の箇所は、それぞれ実験のプロパティに置き換えます。 実験用 JSON を確実に保存してアップロードします。 experiment.json の箇所は、実際に使用する 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 が Chaos Studio によって作成されます。 実験を正常に実行するには、この ID にターゲット リソースへの適切なアクセス許可を付与する必要があります。

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

az role assignment create --role "Virtual Machine Contributor" --assignee-object-id $EXPERIMENT_PRINCIPAL_ID --scope $RESOURCE_ID

実験を実行する

実験の実行準備が整いました。 効果を確かめるには、ポータルで、仮想マシン スケール セットのターゲットがシャットダウンされたかどうかをチェックします。 シャットダウンされている場合は、その仮想マシン スケール セットで実行されているサービスが期待どおり動作中になっていることを確認します。

  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 が含まれています。

次のステップ

以上で、動的ターゲットを使用した仮想マシン スケール セット シャットダウン実験の実行が済み、以下の内容に進む準備ができました。