クイック スタート: ARM テンプレート JSON デプロイのトラブルシューティング

このクイックスタートでは、Azure Resource Manager テンプレート (ARM テンプレート) JSON デプロイ エラーのトラブルシューティング方法について説明します。 エラーを含むテンプレートを設定し、エラーを修正する方法を学びます。

Azure Resource Manager テンプレートは JavaScript Object Notation (JSON) ファイルであり、プロジェクトのインフラストラクチャと構成が定義されています。 このテンプレートでは、宣言型の構文が使用されています。 デプロイしようとしているものを、デプロイを作成する一連のプログラミング コマンドを記述しなくても記述できます。

デプロイに関するエラーには 3 種類あります。

  • 検証エラー デプロイ開始前に、ファイル中の構文エラーによって発生します。 これらのエラーは、Visual Studio Code などのコード エディターで特定できます。
  • プレフライト検証エラーは、デプロイ コマンドが実行されてもリソースがデプロイされない場合に発生します。 これらのエラーは、デプロイを開始しなくても検出されます。 たとえば、パラメーターの値が正しくない場合は、プレフライト検証でエラーが検出されます。
  • デプロイ エラー Azure 環境におけるデプロイのプロセスで発生し、デプロイの進行状況を確認することでのみ検出できます。

どの種類のエラーでも、デプロイのトラブルシューティングに使用できるエラー コードが出力されます。 検証とプレフライトのエラーはアクティビティ ログに表示されますが、デプロイ履歴には表示されません。

前提条件

このクイックスタートを実行するには、次のものが必要です。

エラーがあるテンプレートの作成

次のテンプレートをコピーしてローカルに保存します。 このファイルを使用して、検証エラー、プレフライト エラー、デプロイ エラーのトラブルシューティングを行います。 このクイックスタートでは、ファイルに troubleshoot.json という名前を付けていますが、任意の名前を使用できます。

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameterss": {
    "storageAccountType": {
      "type": "string",
      "defaultValue": "Standard_LRS",
      "allowedValues": [
        "Standard_LRS",
        "Standard_GRS",
        "Standard_ZRS",
        "Premium_LRS"
      ]
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    },
    "prefixName": {
      "type": "string"
    }
  },
  "variables": {
    "storageAccountName": "[concat(parameters('prefixName'), uniquestring(resourceGroup().id))]"
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-04-01",
      "name": "[variables('storageAccountName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "[parameters('storageAccountType')]"
      },
      "kind": "StorageV2",
      "properties": {}
    }
  ],
  "outputs": {
    "storageAccountName": {
      "type": "string",
      "value": "[variables('storageAccountName')]"
    },
    "vnetResult": {
      "type": "object",
      "value": "[reference(resourceId('Microsoft.Network/virtualNetworks', 'doesnotexist'), '2021-03-01', 'Full')]"
    }
  }
}

検証エラーを修正する

Visual Studio Code でファイルを開きます。 parameterss: の下の波線はエラーを示しています。 検証エラーを表示するために、エラーにカーソルを合わせます。

コード内のスペルミスのある 'parameterss:' の下にある赤い波線でテンプレート検証エラーを強調表示している Visual Studio コードのスクリーンショット。

variablesresourcesundefined parameter reference のエラーがあるのがわかります。 テンプレートの検証エラーを表示するには、 [表示]>[Problems](問題) を選択します。

'変数' セクションと 'リソース' セクションの未定義パラメーター参照エラーをリストする '問題' タブを表示している Visual Studio コードのスクリーンショット。

このすべてのエラーは、要素名のスペルが正しくないために発生します。

"parameterss": {

エラー メッセージは、Template validation failed: Could not find member 'parameterss' on object of type 'Template'. Path 'parameterss', line 4, position 16 となっています。

parameters の ARM テンプレート構文は、parameters が正しい要素名であることを示しています。

検証エラーと undefined parameter reference エラーを修正するにはスペルを修正し、ファイルを保存します。

"parameters": {

プレフライト エラーを修正する

プレフライト検証エラーを作成するには、prefixName パラメーターに正しくない値を使用します。

このクイックスタートではリソース グループ名に troubleshootRG を使用していますが、任意の名前を使用できます。

az group create --name troubleshootRG --location westus
az deployment group create \
  --resource-group troubleshootRG \
  --template-file troubleshoot.json \
  --parameters prefixName=long!!StoragePrefix

テンプレートはプレフライト検証に失敗し、デプロイが実行されません。 prefixName が 11 文字を超え、特殊文字と大文字を含んでいます。

ストレージ名は 3 から 24 文字までとし、小文字と数字のみを使用する必要があります。 プレフィックス値によって無効なストレージ名が作成されました。 詳細については、「ストレージ アカウント名のエラーの解決」を参照してください。 プレフライト エラーを修正するには、使用するプレフィックスを 11 文字以下にし、小文字または数字のみを含めます。

デプロイが実行されなかったため、デプロイ履歴はありません。

プリフライト エラーにより空のデプロイ履歴セクションが表示された Azure リソース グループの概要ページのスクリーンショット。

アクティビティ ログにプレフライト エラーが表示されます。 ログを選択するとエラーの詳細が表示されます。

赤い感嘆符アイコンが付いたプリフライト エラー エントリを示す Azure リソース グループ アクティビティ ログのスクリーンショット。

デプロイ エラーを修正する

storage のような有効なプレフィックス値を使用してデプロイを実行します。

az group create --name troubleshootRG --location westus
az deployment group create \
  --resource-group troubleshootRG \
  --template-file troubleshoot.json \
  --parameters prefixName=storage

デプロイが始まり、デプロイ履歴に表示されます。 outputs がリソース グループに存在しない仮想ネットワークを参照しているため、デプロイは失敗します。 ただし、ストレージ アカウントにはエラーがなかったため、リソースはデプロイされました。 デプロイ履歴には、デプロイが失敗したことが表示されます。

デプロイ履歴セクションに赤い感嘆符アイコンが付いた、失敗したデプロイを示す Azure リソース グループの概要ページのスクリーンショット。

デプロイ エラーを修正するには、有効なリソースを使用するように reference 関数を変更します。 詳細については、「リソースが見つからないエラーを解決する」を参照してください。 このクイック スタートでは、vnetResult の前のコンマとすべての vnetResult を削除します。 ファイルを保存し、デプロイを再実行します。

"vnetResult": {
  "type": "object",
  "value": "[reference(resourceId('Microsoft.Network/virtualNetworks', 'doesnotexist'), '2021-03-01', 'Full')]"
}

検証、プレフライト、デプロイのエラーが修正された後、次のテンプレートによってストレージ アカウントがデプロイされます。 デプロイ履歴とアクティビティ ログに、デプロイが成功したことが表示されます。

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storageAccountType": {
      "type": "string",
      "defaultValue": "Standard_LRS",
      "allowedValues": [
        "Standard_LRS",
        "Standard_GRS",
        "Standard_ZRS",
        "Premium_LRS"
      ]
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    },
    "prefixName": {
      "type": "string"
    }
  },
  "variables": {
    "storageAccountName": "[concat(parameters('prefixName'), uniquestring(resourceGroup().id))]"
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-04-01",
      "name": "[variables('storageAccountName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "[parameters('storageAccountType')]"
      },
      "kind": "StorageV2",
      "properties": {}
    }
  ],
  "outputs": {
    "storageAccountName": {
      "type": "string",
      "value": "[variables('storageAccountName')]"
    }
  }
}

リソースをクリーンアップする

Azure リソースが必要なくなったときは、リソース グループを削除します。

az group delete --name troubleshootRG

ポータルでリソース グループを削除するには、このステップに従います。

  1. Azure portal で、検索ボックスに「リソース グループ」と入力します。
  2. [名前でフィルター] フィールドに、リソース グループ名を入力します。
  3. リソース グループ名を選択します。
  4. [リソース グループの削除] を選択します。
  5. 削除を確認するには、リソース グループ名を入力して [削除] を選択します。

次のステップ

このクイックスタートでは、ARM テンプレート デプロイ エラーのトラブルシューティング方法について説明しました。