快速入門:針對 ARM 範本 JSON 部署進行疑難解答
本快速入門說明如何針對 Azure Resource Manager 範本 (ARM 範本) JSON 部署錯誤進行疑難解答。 您將設定含有錯誤的範本,並瞭解如何修正錯誤。
Azure Resource Manager 範本是 JavaScript 物件表示法 (JSON) 檔案,可定義專案的基礎結構和組態。 範本使用宣告式語法。 您不需要撰寫程式設計命令順序來建立部署,即可描述預定的部署。
有三種與部署相關的錯誤類型:
- 驗證錯誤發生於部署開始之前,並且為檔案中的語法錯誤所造成。 Visual Studio Code 之類的程式碼編輯器可識別這些錯誤。
- 預檢驗證錯誤發生於執行部署命令但未部署資源時。 在不啟動部署的情況下找到這些錯誤。 例如,若參數值不正確,則會在預檢驗證中找到錯誤。
- 部署錯誤發生在部署過程中,且只能藉由評估 Azure 環境中的部署進度將其找出。
所有錯誤類型都會傳回錯誤碼,以供您針對部署進行疑難排解之用。 驗證與預檢錯誤會顯示在活動記錄中,但不會出現在部署歷程記錄中。
必要條件
若要完成本快速入門,您需要下列專案:
- 如尚未擁有 Azure 訂用帳戶,請在開始之前先建立免費帳戶。
- 具有最新 Azure Resource Manager Tools 擴充功能的 Visual Studio Code。
- 安裝最新版的 Azure PowerShell 或 Azure CLI。
建立具有錯誤的範本
複製下列範本,並將其儲存在本機。 您將使用此檔案對驗證錯誤、預檢錯誤和部署錯誤進行疑難解答。 本快速入門假設您已將檔案 命名為 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:
的波浪線表示錯誤。 若要查看驗證錯誤,請將滑鼠停留在錯誤上方。
您會發現variables
,並resources
出現未定義參數參考的錯誤。 若要顯示範本的驗證錯誤,請選取 [檢視>問題]。
所有錯誤都是由元素名稱的拼字不正確所造成。
"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個字元或更少且只包含小寫字母或數位的前置詞。
因為部署未執行,因此沒有部署歷程記錄。
活動記錄會顯示預檢錯誤。 選取記錄檔以查看錯誤的詳細數據。
修正部署錯誤
使用有效的前置詞值執行部署,例如 storage
。
az group create --name troubleshootRG --location westus
az deployment group create \
--resource-group troubleshootRG \
--template-file troubleshoot.json \
--parameters prefixName=storage
部署隨即開始,且會顯示在部署歷程記錄中。 部署失敗,因為 outputs
參考資源群組中不存在的虛擬網路。 不過,記憶體帳戶沒有錯誤,因此已部署資源。 部署歷程記錄會顯示失敗的部署。
若要修正部署錯誤,請將參考函式變更為使用有效的資源。 如需詳細資訊,請參閱 解決找不到資源的錯誤。 在本快速入門中,刪除前面和 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
若要從入口網站刪除資源群組,請遵循下列步驟:
- 在 Azure 入口網站 中,於搜尋方塊中輸入資源群組。
- 在 [ 依名稱篩選] 欄位中,輸入資源組名。
- 選取資源群組名稱。
- 選取 [刪除資源群組]。
- 若要確認刪除,請輸入資源群組名稱,然後選取 [刪除]。
下一步
在本快速入門中,您已瞭解如何針對ARM範本部署錯誤進行疑難解答。