Guida di avvio rapido - Risoluzione dei problemi relativi alle distribuzioni JSON dei modelli ARM
Questa guida di avvio rapido spiega come risolvere gli errori nella distribuzione JSON del modello di Azure Resource Manager (modello di ARM). Si dovrà configurare un modello con errori per apprendere come correggerli.
Un modello di Azure Resource Manager è un file JSON (JavaScript Object Notation) che definisce l'infrastruttura e la configurazione del progetto. Il modello utilizza la sintassi dichiarativa. Si descrive la distribuzione prevista senza scrivere la sequenza di comandi di programmazione necessari 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, ad esempio Visual Studio Code, è in grado di identificare questi errori.
- Gli errori di convalida preliminare si verificano quando si esegue 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 rilevati soltanto valutando lo stato di avanzamento della distribuzione nell'ambiente di 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 di avvio rapido sono richiesti:
- Se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.
- Visual Studio Code con l'estensione Strumenti di Azure Resource Manager più recente.
- Installare la versione più recente di Azure PowerShell o dell'interfaccia della riga di comando di Azure.
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 questa guida di avvio rapido si presume che il file sia stato denominato troubleshoot.json, ma è 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')]"
}
}
}
Correggere un errore di convalida
Aprire il file in Visual Studio Code. La linea ondulata sotto parameterss:
indica la presenza di un errore. Per visualizzare l'errore di convalida, passare il puntatore del mouse sull'errore.
Si noterà che a variables
e resources
sono associati errori di riferimento parametro non definito. Per visualizzare gli errori di convalida del modello, selezionare Visualizza>problemi.
Tutti gli errori sono causati dall'ortografia errata del nome di un elemento.
"parameterss": {
Il messaggio di errore indica 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 ARM per i parametri mostra che parameters
è il nome dell'elemento corretto.
Per risolvere l'errore di convalida e gli errori di riferimento parametro non definiti, correggere l'ortografia e salvare il file.
"parameters": {
Correggere un errore preliminare
Per creare un errore di convalida preliminare, si dovrà usare un valore errato per il parametro prefixName
.
In questa guida di avvio rapido si utilizza troubleshootRG come 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 a completare la convalida preliminare e la distribuzione non viene eseguita. prefixName
contiene più di 11 caratteri e include caratteri speciali e lettere maiuscole.
I nomi di archiviazione devono avere una lunghezza compresa tra 3 e 24 caratteri e includere 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 di 11 caratteri o meno e che includa solo lettere minuscole o numeri.
Poiché la distribuzione non è stata eseguita, la cronologia di distribuzione non esiste.
Il log attività mostra l'errore preliminare. Selezionare il log per visualizzare i dettagli dell'errore.
Correggere l'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 viene avviata ed è visibile nella cronologia di distribuzione. La distribuzione non viene completata 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 di distribuzione mostra una distribuzione non riuscita.
Per correggere l'errore di distribuzione, modificare la funzione di riferimento per usare una risorsa valida. Per altre informazioni, vedere Risolvere gli errori di risorsa non trovata. Per questa guida di avvio rapido, eliminare la virgola che precede vnetResult
e tutti i file vnetResult
Salvare il file ed eseguire nuovamente la distribuzione.
"vnetResult": {
"type": "object",
"value": "[reference(resourceId('Microsoft.Network/virtualNetworks', 'doesnotexist'), '2021-03-01', 'Full')]"
}
Dopo la correzione degli errori di convalida, preliminari e di distribuzione, il modello seguente distribuisce un account di archiviazione. La cronologia di distribuzione e il log attività indicano che la distribuzione è stata eseguita correttamente.
{
"$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, effettuare i passaggi riportati di seguito:
- Nel portale di Azure immettere Gruppi di risorse nella casella di ricerca.
- Immettere il nome del gruppo di risorse nel campo Filtra per nome.
- Selezionare il nome del gruppo di risorse.
- Selezionare Elimina gruppo di risorse.
- Per confermare l'eliminazione, immettere il nome del gruppo di risorse e selezionare Elimina.
Passaggi successivi
Grazie a questa guida di avvio rapido è stato possibile apprendere come risolvere gli errori nelle distribuzioni dei modelli di ARM.