Quickstart: Problemen met JSON-implementaties van ARM-sjablonen oplossen

In deze quickstart wordt beschreven hoe u JSON-implementatiefouten in Azure Resource Manager-sjablonen (ARM-sjabloon) oplost. U stelt een sjabloon in met fouten en leert hoe u de fouten kunt oplossen.

Een Azure Resource Manager-sjabloon is een JSON-bestand (JavaScript Object Notation) dat de infrastructuur en configuratie voor uw project definieert. Voor de sjabloon is declaratieve syntaxis vereist. U beschrijft de beoogde implementatie zonder de reeks programmeeropdrachten te schrijven om de implementatie te maken.

Er zijn drie typen fouten die gerelateerd zijn aan een implementatie:

  • Validatiefouten treden op voordat een implementatie begint en worden veroorzaakt door syntaxisfouten in uw bestand. Een code-editor zoals Visual Studio Code kan deze fouten identificeren.
  • Preflight-validatiefouten treden op wanneer een implementatieopdracht wordt uitgevoerd, maar resources niet worden geïmplementeerd. Deze fouten worden gevonden zonder de implementatie te starten. Als een parameterwaarde bijvoorbeeld onjuist is, wordt de fout gevonden in de validatie vooraf.
  • Implementatiefouten treden op tijdens het implementatieproces en kunnen alleen worden gevonden door de voortgang van de implementatie in uw Azure-omgeving te beoordelen.

Beide typen fouten retourneren een foutcode die je gebruikt om de problemen met de implementatie op te lossen. Validatie- en voorbereidende fouten worden weergegeven in het activiteitenlogboek, maar worden niet weergegeven in je implementatiegeschiedenis.

Vereisten

U hebt het volgende nodig om deze quickstart te voltooien:

Een sjabloon maken met fouten

Kopieer de volgende sjabloon en sla deze lokaal op. U gebruikt dit bestand om een validatiefout, een voorbereidende fout en een implementatiefout op te lossen. In deze quickstart wordt ervan uitgegaan dat u de naam van het bestand hebt troubleshoot.json , maar u kunt elke naam gebruiken.

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

Validatiefout oplossen

Open het bestand in Visual Studio Code. De golvende lijn onder parameterss: geeft een fout aan. Als u de validatiefout wilt zien, beweegt u de muisaanwijzer over de fout.

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

U ziet dat en resources fouten variables bevatten voor niet-gedefinieerde parameterreferenties. Als u de validatiefouten van de sjabloon wilt weergeven, selecteert u Problemen weergeven>.

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

Alle fouten worden veroorzaakt door de onjuiste spelling van een elementnaam.

"parameterss": {

Het foutbericht geeft aan dat sjabloonvalidatie is mislukt: kan lid 'parameters' niet vinden voor het object van het type Sjabloon. Pad 'parameters', regel 4, positie 16.

De syntaxis van de ARM-sjabloon voor parameters geeft aan dat parameters dit de juiste elementnaam is.

Corrigeer de spelling en sla het bestand op om de validatiefout en niet-gedefinieerde parameterreferentiefouten op te lossen.

"parameters": {

Voorbereidende fout oplossen

Als u een preflight-validatiefout wilt maken, gebruikt u een onjuiste waarde voor de prefixName parameter.

In deze quickstart wordt gebruikgemaakt van troubleshootRG voor de naam van de resourcegroep, maar u kunt elke naam gebruiken.

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

De sjabloon mislukt de preflight-validatie en de implementatie wordt niet uitgevoerd. Het prefixName is meer dan 11 tekens en bevat speciale tekens en hoofdletters.

Opslagnamen moeten tussen 3 en 24 tekens zijn en mogen alleen kleine letters en cijfers gebruiken. De waarde van het voorvoegsel heeft een ongeldige opslagnaam gemaakt. Zie voor meer informatie Solve errors for resource quotas (Fouten met opslagaccountnamen oplossen). Als u de voorbereidende fout wilt oplossen, gebruikt u een voorvoegsel van 11 tekens of minder en bevat u alleen kleine letters of cijfers.

Omdat de implementatie niet is uitgevoerd, is er geen implementatiegeschiedenis.

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

In het activiteitenlogboek wordt de voorbereidende fout weergegeven. Selecteer het logboek om de details van de fout weer te geven.

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

Implementatiefout oplossen

Voer de implementatie uit met een geldige voorvoegselwaarde, zoals storage.

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

De implementatie begint en is zichtbaar in de implementatiegeschiedenis. De implementatie mislukt omdat outputs wordt verwezen naar een virtueel netwerk dat niet bestaat in de resourcegroep. Er zijn echter geen fouten opgetreden voor het opslagaccount, dus de resource is geïmplementeerd. De implementatiegeschiedenis toont een mislukte implementatie.

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

Als u de implementatiefout wilt oplossen, wijzigt u de referentiefunctie om een geldige resource te gebruiken. Zie Resource niet gevonden fouten oplossen voor meer informatie. Voor deze quickstart verwijdert u de komma die voorafgaat aan vnetResult en alle vnetResult. Sla het bestand op en voer de implementatie opnieuw uit.

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

Nadat de validatie- en implementatiefouten zijn opgelost, wordt met de volgende sjabloon een opslagaccount geïmplementeerd. In de implementatiegeschiedenis en het activiteitenlogboek ziet u een geslaagde implementatie.

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

Resources opschonen

Wanneer de Azure-resources niet meer nodig zijn, verwijdert u de resourcegroep.

az group delete --name troubleshootRG

Voer de volgende stappen uit om de resourcegroep uit de portal te verwijderen:

  1. Voer in Azure Portal resourcegroepen in het zoekvak in.
  2. Voer in het veld Filteren op naam de naam van de resourcegroep in.
  3. Selecteer de naam van de resourcegroep.
  4. Selecteer Resourcegroep verwijderen.
  5. Om de verwijdering te bevestigen, voert u de naam van de resourcegroep in en selecteert u Verwijderen.

Volgende stappen

In deze quickstart hebt u geleerd hoe u implementatiefouten met ARM-sjablonen kunt oplossen.