Guida introduttiva: Risolvere i problemi relativi alle distribuzioni JSON del modello di Resource Manager

Questa guida introduttiva descrive come risolvere gli errori di distribuzione JSON del modello di Azure Resource Manager (modello di Resource Manager). Si configurerà un modello con errori e si apprenderà come correggere gli errori.

Un modello di Azure Resource Manager è un file JSON (JavaScript Object Notation) che definisce l'infrastruttura e la configurazione per il progetto. Il modello utilizza la sintassi dichiarativa. Si descrive la distribuzione prevista senza scrivere la sequenza di comandi di programmazione per creare la distribuzione.

Alla distribuzione sono correlati tre tipi di errori:

  • Gli errori di convalida si verificano prima dell'inizio di una distribuzione e sono causati da errori di sintassi nel file. Un editor di codice come Visual Studio Code può identificare questi errori.
  • Gli errori di convalida preliminare si verificano quando viene eseguito un comando di distribuzione, ma le risorse non vengono distribuite. Vengono rilevati senza avviare la distribuzione. Ad esempio, se un valore di parametro non è corretto, l'errore viene rilevato nella convalida preliminare.
  • Gli errori di distribuzione si verificano durante il processo di distribuzione e possono essere trovati solo valutando lo stato di avanzamento della distribuzione nell'ambiente Azure.

Tutti i tipi di errore restituiscono un codice errore usato per risolvere i problemi della distribuzione. Gli errori preliminari e di convalida vengono visualizzati nel log attività ma non nella cronologia della distribuzione.

Prerequisiti

Per completare questa guida introduttiva, sono necessari gli elementi seguenti:

Creare un modello con errori

Copiare il modello seguente e salvarlo in locale. Questo file verrà usato per risolvere un errore di convalida, un errore preliminare e un errore di distribuzione. In questo argomento di avvio rapido si presuppone che il file sia stato denominato troubleshoot.json , ma sia possibile usare qualsiasi nome.

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

Correzione dell'errore di convalida

Aprire il file in Visual Studio Code. La linea ondulata sotto parameterss: indica un errore. Per visualizzare l'errore di convalida, passare il puntatore del mouse sull'errore.

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

Si noterà che variables e resources si verificano errori per il riferimento ai parametri non definiti. Per visualizzare gli errori di convalida del modello, selezionare Visualizza>problemi.

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

Tutti gli errori sono causati dall'ortografia errata di un nome di elemento.

"parameterss": {

Il messaggio di errore indica che la convalida del modello non è riuscita: impossibile trovare il membro 'parameterss' nell'oggetto di tipo 'Template'. Percorso 'parameterss', riga 4, posizione 16.

La sintassi del modello di Resource Manager per i parametri mostra che parameters è il nome dell'elemento corretto.

Per correggere l'errore di convalida e gli errori di riferimento ai parametri non definiti, correggere l'ortografia e salvare il file.

"parameters": {

Correzione dell'errore preliminare

Per creare un errore di convalida preliminare, si userà un valore non corretto per il prefixName parametro .

Questa guida introduttiva usa troubleshootRG per il nome del gruppo di risorse, ma è possibile usare qualsiasi nome.

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

Il modello non riesce la convalida preliminare e la distribuzione non viene eseguita. prefixName è maggiore di 11 caratteri e contiene caratteri speciali e lettere maiuscole.

Archiviazione nomi devono essere compresi tra 3 e 24 caratteri e usare solo lettere minuscole e numeri. Il valore del prefisso ha creato un nome di archiviazione non valido. Per altre informazioni, vedere Risolvere gli errori relativi ai nomi degli account di archiviazione. Per correggere l'errore preliminare, usare un prefisso con 11 caratteri o meno e contiene solo lettere minuscole o numeri.

Poiché la distribuzione non è stata eseguita, non esiste alcuna cronologia di distribuzione.

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

Il log attività mostra l'errore preliminare. Selezionare il log per visualizzare i dettagli dell'errore.

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

Correzione dell'errore di distribuzione

Eseguire la distribuzione con un valore di prefisso valido, ad esempio storage.

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

La distribuzione inizia ed è visibile nella cronologia di distribuzione. La distribuzione non riesce perché outputs fa riferimento a una rete virtuale che non esiste nel gruppo di risorse. Tuttavia, non si sono verificati errori per l'account di archiviazione, quindi la risorsa è stata distribuita. La cronologia della distribuzione mostra una distribuzione non riuscita.

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

Per correggere l'errore di distribuzione, modificare la funzione di riferimento per usare una risorsa valida. Per altre informazioni, vedere Risolvere gli errori relativi alla risorsa non trovata. Per questa guida introduttiva, eliminare la virgola che precede vnetResult e tutti .vnetResult Salvare il file ed eseguire di nuovo la distribuzione.

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

Dopo la correzione degli errori di convalida, preliminare e distribuzione, il modello seguente distribuisce un account di archiviazione. La cronologia della distribuzione e il log attività mostrano una distribuzione corretta.

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

Pulire le risorse

Quando le risorse di Azure non sono più necessarie, eliminare il gruppo di risorse.

az group delete --name troubleshootRG

Per eliminare il gruppo di risorse dal portale, seguire questa procedura:

  1. Nella portale di Azure immettere Gruppi di risorse nella casella di ricerca.
  2. Nel campo Filtra per nome immettere il nome del gruppo di risorse.
  3. Selezionare il nome del gruppo di risorse.
  4. Selezionare Elimina gruppo di risorse.
  5. Per confermare l'eliminazione, immettere il nome del gruppo di risorse e selezionare Elimina.

Passaggi successivi

In questa guida introduttiva si è appreso come risolvere gli errori di distribuzione dei modelli di Resource Manager.