Snabbstart: Felsöka ARM-mall-JSON-distributioner

Den här snabbstarten beskriver hur du felsöker JSON-distributionsfel i Azure Resource Manager-mallen (ARM-mall). Du konfigurerar en mall med fel och lär dig hur du åtgärdar felen.

En Azure Resource Manager-mall är en JSON-fil (JavaScript Object Notation) som definierar infrastrukturen och konfigurationen för projektet. Mallen använder deklarativ syntax. Du beskriver den avsedda distributionen utan att skriva sekvensen med programmeringskommandon för att skapa distributionen.

Det finns två typer av fel som rör en distribution:

  • Valideringsfel inträffar innan en distribution påbörjas och orsakas av syntaxfel i filen. En kodredigerare som Visual Studio Code kan identifiera dessa fel.
  • Valideringsfel före start inträffar när ett distributionskommando körs men resurser inte distribueras. Dessa fel påträffas utan att distributionen startas. Om ett parametervärde till exempel är felaktigt, hittas felet i valideringen före start.
  • Distributionsfel uppstår under distributionsprocessen och kan bara hittas genom att utvärdera distributionens förlopp i Din Azure-miljö.

Båda typerna av fel returnerar en felkod som du använder för att felsöka distributionen. Valideringsfel och fel före start visas i aktivitetsloggen men visas inte i distributionshistoriken.

Förutsättningar

För att slutföra den här snabbstarten behöver du följande:

Skapa en mall med fel

Kopiera följande mall och spara den lokalt. Du använder den här filen för att felsöka ett valideringsfel, ett preflight-fel och ett distributionsfel. Den här snabbstarten förutsätter att du har namngett filen troubleshoot.json men du kan använda valfritt namn.

{
  "$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')]"
    }
  }
}

Åtgärda valideringsfel

Öppna filen i Visual Studio Code. Vågig linje under parameterss: indikerar ett fel. Hovra över felet om du vill se verifieringsfelet.

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

Du kommer att märka att variables och resources har fel för odefinierad parameterreferens. Om du vill visa mallens valideringsfel väljer du Visa>problem.

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

Alla fel orsakas av felaktig stavning av ett elementnamn.

"parameterss": {

Felmeddelandet visar att mallverifieringen misslyckades: Det gick inte att hitta medlemmens parametrar för objekt av typen "Mall". Sökvägen "parameterss", rad 4, position 16.

Syntaxen för ARM-mallen för parametrar visar att det parameters är rätt elementnamn.

Åtgärda verifieringsfelet och de odefinierade parameterreferensfelen genom att korrigera stavningen och spara filen.

"parameters": {

Åtgärda preflight-fel

Om du vill skapa ett preflight-valideringsfel använder du ett felaktigt värde för parametern prefixName .

Den här snabbstarten använder felsökningSG för resursgruppens namn, men du kan använda valfritt namn.

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

Mallen misslyckas med förhandsverifieringen och distributionen körs inte. Är prefixName mer än 11 tecken och innehåller specialtecken och versaler.

Lagringsnamn måste innehålla mellan 3 och 24 tecken och endast använda gemener och siffror. Prefixvärdet skapade ett ogiltigt lagringsnamn. Mer information finns i Åtgärda fel med lagringskontonamn. Om du vill åtgärda preflight-felet använder du ett prefix som är högst 11 tecken och endast innehåller gemener eller siffror.

Eftersom distributionen inte kördes finns det ingen distributionshistorik.

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

Aktivitetsloggen visar preflight-felet. Välj loggen för att se information om felet.

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

Åtgärda distributionsfel

Kör distributionen med ett giltigt prefixvärde, till exempel storage.

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

Distributionen börjar och visas i distributionshistoriken. Distributionen misslyckas eftersom outputs refererar till ett virtuellt nätverk som inte finns i resursgruppen. Det uppstod dock inga fel för lagringskontot, så resursen distribuerades. Distributionshistoriken visar en misslyckad distribution.

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

Åtgärda distributionsfelet genom att ändra referensfunktionen så att den använder en giltig resurs. Mer information finns i Lösa fel som inte hittades i resursen. För den här snabbstarten tar du bort kommatecknet som föregår vnetResult och alla vnetResult. Spara filen och kör distributionen igen.

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

När verifierings-, preflight- och distributionsfelen har åtgärdats distribuerar följande mall ett lagringskonto. Distributionshistoriken och aktivitetsloggen visar en lyckad distribution.

{
  "$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')]"
    }
  }
}

Rensa resurser

När Azure-resurserna inte längre behövs tar du bort resursgruppen.

az group delete --name troubleshootRG

Följ dessa steg om du vill ta bort resursgruppen från portalen:

  1. I Azure-portalen anger du Resursgrupper i sökrutan.
  2. I fältet Filtrera efter namn anger du resursgruppens namn.
  3. Välj resursgruppens namn.
  4. Välj Ta bort resursgrupp.
  5. Bekräfta borttagningen genom att ange resursgruppens namn och sedan välja Ta bort.

Nästa steg

I den här snabbstarten har du lärt dig hur du felsöker distributionsfel för ARM-mallar.