Share via


Azure CLI でエージェント ベースのエラーを使用するカオス実験を作成する

カオス実験を使用して、制御された環境で障害を引き起こすことで、アプリケーションにこれらの障害に対する回復性があることを確認できます。 この記事では、カオス実験と Azure Chaos Studio を使用して、Linux 仮想マシン (VM) に高い割合の CPU 使用率イベントを発生させます。 この実験を実行すると、アプリケーションがリソース不足になるのを防ぐことができます。

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

前提条件

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

仮想マシンにマネージド ID を割り当てる

VM で Chaos Studio を設定する前に、エージェントをインストールする予定の各 VM または仮想マシン スケール セットにユーザー割り当てマネージド ID を割り当てます。 az vm identity assign または az vmss identity assign コマンドを使用します。 $VM_RESOURCE_ID/$VMSS_RESOURCE_ID を、カオス ターゲットとして追加する VM のリソース ID に置き換えます。 $MANAGED_IDENTITY_RESOURCE_ID を、ユーザー割り当てマネージド ID のリソース ID に置き換えます。

仮想マシン

az vm identity assign --ids $VM_RESOURCE_ID --identities $MANAGED_IDENTITY_RESOURCE_ID

仮想マシン スケール セット

az vmss identity assign --ids $VMSS_RESOURCE_ID --identities $MANAGED_IDENTITY_RESOURCE_ID

仮想マシンで Chaos Studio を有効にする

Chaos Studio で仮想マシンに対して障害を挿入するには、その前に、対象となる仮想マシンを Chaos Studio に追加しておく必要があります。 Chaos Studio に仮想マシンを追加するには、そのリソースにターゲットと機能を作成します。 次に、カオス エージェントをインストールします。

仮想マシンには、ターゲットの種類が 2 つあります。 1 つのターゲットの種類では、(エージェントが不要な) サービス直接エラーが有効になります。 もう 1 つのターゲットの種類では、エージェントベースのエラー (エージェントのインストールが必要) が有効になります。 カオス エージェントは、VM 拡張機能として VM にインストールされているアプリケーションです。 これを使用して、ゲスト オペレーティング システムにエラーをインジェクトします。

カオス ターゲットと機能を有効にする

次に、エージェントが Chaos Studio への接続に使用するユーザー割り当てマネージド ID を指定する、各 VM または仮想マシン スケール セットに Microsoft エージェント ターゲットを設定します。 この例では、すべての VM に対して 1 つのマネージド ID を使用します。 ターゲットは REST API を使用して作成する必要があります。 この例では、az rest CLI コマンドを使用して、REST API の呼び出しを実行します。

  1. $USER_IDENTITY_CLIENT_ID をマネージド ID のクライアント ID に置き換えて、次の JSON を変更します。 クライアント ID は、作成したユーザー割り当てマネージド ID の Azure portal の概要で確認できます。 $USER_IDENTITY_TENANT_ID を Azure AD テナント ID に置き換えます。 Azure portal の [テナント情報] にある [Microsoft Entra ID] で確認できます。 Azure CLI を実行しているのと同じ場所に JSON をファイルとして保存します。 Cloud Shell では、JSON ファイルをドラッグ アンド ドロップしてアップロードできます。

    {
      "properties": {
        "identities": [
          {
            "clientId": "$USER_IDENTITY_CLIENT_ID",
            "tenantId": "$USER_IDENTITY_TENANT_ID",
            "type": "AzureManagedIdentity"
          }
        ]
      }
    }
    
  2. $RESOURCE_ID をターゲット VM または仮想マシン スケール セットのリソース ID に置き換えて、ターゲットを作成します。 target.json は、前のステップで作成した JSON ファイルの名前に置き換えます。

    az rest --method put --uri https://management.azure.com/$RESOURCE_ID/providers/Microsoft.Chaos/targets/Microsoft-Agent?api-version=2023-11-01 --body @target.json --query properties.agentProfileId -o tsv
    

    PowerShell 解析エラーが発生した場合、このチュートリアルで推奨されているように Bash ターミナルに切り替えるか、参照先の JSON ファイルを一重引用符 (--body '@target.json') で囲みます。

  3. 後の手順で使用するために、このコマンドによって返される agentProfileId の GUID をコピーします。

  4. $RESOURCE_ID をターゲット VM または仮想マシン スケール セットのリソース ID に置き換えて、機能を作成します。 $CAPABILITY を、有効にするエラー機能の名前に置き換えます (例: CPUPressure-1.0)。

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

    たとえば、CPU 負荷の機能を有効にする場合は、次のようになります:

    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-Agent/capabilities/CPUPressure-1.0?api-version=2023-11-01" --body "{\"properties\":{}}"
    

Chaos Studio 仮想マシン拡張機能をインストールする

カオス エージェントは、VM または仮想マシン スケール セット インスタンスで実行され、エージェント ベースのエラーを実行するアプリケーションです。 インストール中に、次の構成を行います:

  • Chaos Studio に対する認証にエージェントが使用するマネージド ID を持つエージェント。
  • 作成した Microsoft エージェント ターゲットのプロファイル ID。
  • 必要に応じて、エージェントが Application Insights に診断イベントを送信できるようにする Application Insights インストルメンテーション キー。
  1. 作業を開始する前に、次の準備ができていることを確認します:

    • agentProfileId - ターゲットの作成時に返されるプロパティ。 このプロパティがない場合は、az rest --method get --uri https://management.azure.com/$RESOURCE_ID/providers/Microsoft.Chaos/targets/Microsoft-Agent?api-version=2023-11-01 を実行して、agentProfileId プロパティをコピーできます。
    • ClientId - ターゲットで使用されるユーザー割り当てマネージド ID のクライアント ID。 このプロパティがない場合は、az rest --method get --uri https://management.azure.com/$RESOURCE_ID/providers/Microsoft.Chaos/targets/Microsoft-Agent?api-version=2023-11-01 を実行して、clientId プロパティをコピーできます。
    • (省略可能) AppInsightsKey - Application Insights コンポーネントのインストルメンテーション キー。ポータルの [Essentials] の下にある [Application Insights] ページで確認できます。
  2. Chaos Studio VM 拡張機能をインストールします。 $VM_RESOURCE_ID を VM のリソース ID に置き換えるか、$SUBSCRIPTION_ID$RESOURCE_GROUP$VMSS_NAME を仮想マシン スケール セットのプロパティに置き換えます。 $AGENT_PROFILE_ID をエージェント プロファイル ID に置き換えます。 $USER_IDENTITY_CLIENT_ID をマネージド ID のクライアント ID に置き換えます。 $APP_INSIGHTS_KEY を Application Insights のインストルメンテーション キーに置き換えます。 Application Insights を使用していない場合は、そのキーと値のペアを削除します。

    既定のエージェント仮想マシン拡張機能の構成の完全な一覧

    ユーザーが必要とするエージェント VM 拡張機能の最小構成を次に示します。

    {
        "profile": "$AGENT_PROFILE_ID",
        "auth.msi.clientid": "$USER_IDENTITY_CLIENT_ID"
    }
    

    エージェント VM 拡張機能の構成のすべての値を次に示します

     {
        "profile": "$AGENT_PROFILE_ID",
        "auth.msi.clientid": "$USER_IDENTITY_CLIENT_ID",
        "appinsightskey": "$APP_INSIGHTS_KEY",
        "overrides": {
            "region": string, default to be null
            "logLevel": {
                "default" : string , default to be Information
                },
            "checkCertRevocation": boolean, default to be false.
        }
    }
    

    仮想マシンにエージェントをインストールする

    Windows

    az vm extension set --ids $VM_RESOURCE_ID --name ChaosWindowsAgent --publisher Microsoft.Azure.Chaos --version 1.0 --settings '{"profile": "$AGENT_PROFILE_ID", "auth.msi.clientid":"$USER_IDENTITY_CLIENT_ID", "appinsightskey":"$APP_INSIGHTS_KEY"{"Overrides": "CheckCertRevocation" = true}}'
    

    Linux

    az vm extension set --ids $VM_RESOURCE_ID --name ChaosLinuxAgent --publisher Microsoft.Azure.Chaos --version 1.0 --settings '{"profile": "$AGENT_PROFILE_ID", "auth.msi.clientid":"$USER_IDENTITY_CLIENT_ID", "appinsightskey":"$APP_INSIGHTS_KEY"{"Overrides": "CheckCertRevocation" = true}}'
    

    仮想マシン スケール セットにエージェントをインストールする

    Windows

    az vmss extension set --subscription $SUBSCRIPTION_ID --resource-group $RESOURCE_GROUP --vmss-name $VMSS_NAME --name ChaosWindowsAgent --publisher Microsoft.Azure.Chaos --version 1.0 --settings '{"profile": "$AGENT_PROFILE_ID", "auth.msi.clientid":"$USER_IDENTITY_CLIENT_ID", "appinsightskey":"$APP_INSIGHTS_KEY"{"Overrides": "CheckCertRevocation" = true}}'
    

    Linux

    az vmss extension set --subscription $SUBSCRIPTION_ID --resource-group $RESOURCE_GROUP --vmss-name $VMSS_NAME --name ChaosLinuxAgent --publisher Microsoft.Azure.Chaos --version 1.0 --settings '{"profile": "$AGENT_PROFILE_ID", "auth.msi.clientid":"$USER_IDENTITY_CLIENT_ID", "appinsightskey":"$APP_INSIGHTS_KEY"{"Overrides": "CheckCertRevocation" = true}}'
    
  3. 仮想マシン スケール セットを設定する場合は、インスタンスが最新のモデルにアップグレードされたことを確認します。 必要に応じて、モデル内のすべてのインスタンスをアップグレードします。

    az vmss update-instances -g $RESOURCE_GROUP -n $VMSS_NAME --instance-ids *
    

実験の作成

VM を正常にデプロイしたら、実験を作成できます。 カオス実験では、ターゲット リソースに対して実行するアクションを定義します。 アクションは編成され、順番に実行されます。 カオス実験では、並列で実行されるブランチに対して実行するアクションも定義されます。

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

    {
      "identity": {
        "type": "SystemAssigned"
      },
      "location": "centralus",
      "properties": {
        "selectors": [
          {
            "id": "Selector1",
            "targets": [
              {
                "id": "/subscriptions/b65f2fec-d6b2-4edd-817e-9339d8c01dc4/resourceGroups/myRG/providers/Microsoft.Compute/virtualMachines/myWindowsVM/providers/Microsoft.Chaos/targets/Microsoft-Agent",
                "type": "ChaosTarget"
              },
              {
                "id": "/subscriptions/b65f2fec-d6b2-4edd-817e-9339d8c01dc4/resourceGroups/myRG/providers/Microsoft.Compute/virtualMachines/myLinuxVM/providers/Microsoft.Chaos/targets/Microsoft-Agent",
                "type": "ChaosTarget"
              }
            ],
            "type": "List"
          }
        ],
        "steps": [
          {
            "branches": [
              {
                "actions": [
                  {
                    "duration": "PT10M",
                    "name": "urn:csci:microsoft:agent:cpuPressure/1.0",
                    "parameters": [
                      {
                        "key": "pressureLevel",
                        "value": "95"
                      }
                    ],
                    "selectorId": "Selector1",
                    "type": "continuous"
                  }
                ],
                "name": "Branch 1"
              }
            ],
            "name": "Step 1"
          }
        ]
      }
    }
    

    仮想マシン スケール セットに対して実行している場合は、ターゲットとするインスタンス番号を含むようにエラー パラメーターを変更します:

    "parameters": [
      {
        "key": "pressureLevel",
        "value": "95"
      },
      {
        "key": "virtualMachineScaleSetInstances",
        "value": "[0,1,2]"
      }
    ]
    

    Azure portal でスケール セット インスタンス番号を識別するには、仮想マシン スケール セットに移動し、[インスタンス]を選択します。 インスタンス名は、末尾がインスタンス番号になります。

  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 をメモします。

仮想マシンに実験アクセス許可を付与する

カオス実験を作成すると、ターゲット リソースに対して障害を実行するシステム割り当てマネージド ID が Chaos Studio によって作成されます。 実験を正常に実行するには、この ID にターゲット リソースへの適切なアクセス許可を付与する必要があります。 エージェントベースの障害には、閲覧者ロールが必要です。 仮想マシンの共同作成者など、*/読み取りアクセス許可を持たない他の役割では、エージェントベースのエラーに対する適切なアクセス許可が付与されません。

次のコマンドを使用して、VM または仮想マシン スケール セットへのアクセス権を実験に付与します。 $EXPERIMENT_PRINCIPAL_ID を前の手順のプリンシパル ID に置き換えます。 $RESOURCE_ID をターゲット VM または仮想マシン スケール セットのリソース ID に置き換えます。 実験定義で使用されるカオス エージェントのリソース ID ではなく、VM のリソース ID を使用してください。 実験でターゲットとなるVM または仮想マシン スケール セットごとに、このコマンドを実行します。

az role assignment create --role "Reader" --assignee-principal-type "ServicePrincipal" --assignee-object-id $EXPERIMENT_PRINCIPAL_ID --scope $RESOURCE_ID 

実験を実行する

これで、実験を実行する準備が整いました。 影響を確認するため、Azure Monitor メトリック グラフを別のブラウザー タブで開いて、お使いの VM の CPU 負荷を表示することをお勧めします。

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

次のステップ

以上でエージェント ベースの実験の実行が済みました。この後は、以下の内容に進むことができます。