快速入門:針對 ARM 範本 JSON 部署進行疑難解答

本快速入門說明如何針對 Azure Resource Manager 範本 (ARM 範本) JSON 部署錯誤進行疑難解答。 您將設定含有錯誤的範本,並瞭解如何修正錯誤。

Azure Resource Manager 範本是 JavaScript 物件表示法 (JSON) 檔案,可定義專案的基礎結構和組態。 範本使用宣告式語法。 您不需要撰寫程式設計命令順序來建立部署,即可描述預定的部署。

有三種與部署相關的錯誤類型:

  • 驗證錯誤發生於部署開始之前,並且為檔案中的語法錯誤所造成。 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: 的波浪線表示錯誤。 若要查看驗證錯誤,請將滑鼠停留在錯誤上方。

Screenshot of Visual Studio Code highlighting a template validation error with a red wavy line under the misspelled 'parameterss:' in the code.

您會發現variables,並resources出現未定義參數參考的錯誤。 若要顯示範本的驗證錯誤,請選取 [檢視>問題]。

Screenshot of Visual Studio Code showing the Problems tab listing undefined parameter reference errors for 'variables' and 'resources' sections.

所有錯誤都是由元素名稱的拼字不正確所造成。

"parameterss": {

錯誤訊息指出 範本驗證失敗:在類型為 『Template』 的物件上找不到成員 『parameterss』。路徑 'parameterss',行 4,位置 16

參數ARM 範本語法會顯示為parameters正確的元素名稱。

若要修正驗證錯誤和 未定義的參數參考 錯誤,請更正拼字並儲存盤案。

"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個字元或更少且只包含小寫字母或數位的前置詞。

因為部署未執行,因此沒有部署歷程記錄。

Screenshot of Azure resource group overview page displaying an empty deployment history section due to a preflight error.

活動記錄會顯示預檢錯誤。 選取記錄檔以查看錯誤的詳細數據。

Screenshot of Azure resource group activity log showing a preflight error entry with a red exclamation mark icon.

修正部署錯誤

使用有效的前置詞值執行部署,例如 storage

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

部署隨即開始,且會顯示在部署歷程記錄中。 部署失敗,因為 outputs 參考資源群組中不存在的虛擬網路。 不過,記憶體帳戶沒有錯誤,因此已部署資源。 部署歷程記錄會顯示失敗的部署。

Screenshot of Azure resource group overview page showing a failed deployment with a red exclamation mark icon in the deployment history section.

若要修正部署錯誤,請將參考函式變更為使用有效的資源。 如需詳細資訊,請參閱 解決找不到資源的錯誤。 在本快速入門中,刪除前面和 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 入口網站 中,於搜尋方塊中輸入資源群組
  2. 在 [ 依名稱篩選] 欄位中,輸入資源組名。
  3. 選取資源群組名稱。
  4. 選取 [刪除資源群組]
  5. 若要確認刪除,請輸入資源群組名稱,然後選取 [刪除]。

下一步

在本快速入門中,您已瞭解如何針對ARM範本部署錯誤進行疑難解答。