Informazioni sugli errori di distribuzione di AzureUnderstand Azure deployment errors

In questo argomento vengono descritti gli errori di distribuzione e le modalità per reperire altre informazioni sull'errore.This topic describes deployment errors and how you can discover more information about an error. Per la risoluzione di comuni errori di distribuzione, vedere Risolvere errori comuni durante la distribuzione di risorse in Azure con Azure Resource Manager.For resolutions to common deployment errors, see Troubleshoot common Azure deployment errors with Azure Resource Manager.

Due tipi di erroriTwo types of errors

I possibili errori sono di due tipi:There are two types of errors you can receive:

  • errori di convalidavalidation errors
  • errori di distribuzionedeployment errors

L'immagine seguente mostra il registro attività di una sottoscrizione.The following image shows the activity log for a subscription. Rappresenta due distribuzioni.It represents two deployments. In una distribuzione il modello non ha superato la convalida (Convalida) e la procedura non è stata eseguita.In one deployment, the template failed validation (Validate) and did not proceed. Nell'altra distribuzione il modello ha superato la convalida, ma non ha permesso di creare risorse, si noti Write Deployments (Scrivi distribuzioni).In the other deployment, the template passed validation but failed when creating the resources (Write Deployments).

mostra codice di errore

Gli errori di convalida sono causati da scenari già determinati prima della distribuzione.Validation errors arise from scenarios that can be determined before deployment. Tra di essi figurano gli errori di sintassi presenti in un modello oppure il tentativo di distribuire risorse superiori alle quote di sottoscrizione.They include syntax errors in your template, or trying to deploy resources that would exceed your subscription quotas. Gli errori di distribuzione sorgono da condizioni che si verificano durante il processo di distribuzione.Deployment errors arise from conditions that occur during the deployment process. Tra essi configurano i tentativi di accedere a una risorsa che viene distribuita in parallelo.They include trying to access a resource that is being deployed in parallel.

Entrambi i tipi di errore restituiscono un codice necessario per risolvere i problemi della distribuzione.Both types of errors return an error code that you use to troubleshoot the deployment. Entrambi i tipi di errori vengono visualizzati nel log attività.Both types of errors appear in the activity log. Gli errori di convalida non sono invece visualizzati nella cronologia della distribuzione, poiché quest'ultima non è mai stata avviata.However, validation errors do not appear in your deployment history because the deployment never started.

Determinare il codice di erroreDetermine error code

Per avere informazioni sull'errore è possibile esaminare il messaggio di errore e il codice di errore.You can learn about an error by looking at the error message and the error code. L'articolo Risolvere errori comuni durante la distribuzione di risorse in Azure con Azure Resource Manager elenca le risoluzione in base al codice di errore.The Troubleshoot common Azure deployment errors with Azure Resource Manager article lists resolutions by error code. L'argomento illustra come usare il portale di Azure per trovare il codice di errore.This topic shows how to use the Azure portal to discover the error code.

Errori di convalidaValidation errors

Durante la distribuzione nel portale, viene visualizzato un errore di convalida dopo l'invio dei valori.When deploying through the portal, you see a validation error after submitting your values.

vista dell'errore di convalida nel portale

Selezionare il messaggio per avere altre informazioni.Select the message for more details. Nella figura seguente viene visualizzato un errore InvalidTemplateDeployment e un messaggio che indica che la distribuzione è stata bloccata da un criterio.In the following image, you see an InvalidTemplateDeployment error and a message that indicates a policy blocked deployment.

visualizzare le informazioni di convalida

Errori di distribuzioneDeployment errors

Quando l'operazione supera la convalida, ma non esegue correttamente la distribuzione, viene visualizzato l'errore nelle notifiche.When the operation passes validation, but fails during deployment, you see the error in the notifications. Selezionare la notifica.Select the notification.

Notifica di errore

Vengono visualizzati maggiori dettagli sulla distribuzione.You see more details about the deployment. Selezionare l'opzione per trovare altre informazioni sull'errore.Select the option to find more information about the error.

distribuzione non riuscita

Viene visualizzato il messaggio di errore e i codici di errore.You see the error message and error codes. Si noti che sono presenti due codici di errore.Notice there are two error codes. Il primo codice di errore, DeploymentFailed è un errore generale che non contiene i dettagli necessari per risolvere l'errore.The first error code (DeploymentFailed) is a general error that does not provide the details you need to solve the error. Il secondo codice di errore, StorageAccountNotFound, contiene i dettagli necessari.The second error code (StorageAccountNotFound) provides the details you need.

dettagli dell'errore

Abilitazione della registrazione di debugEnable debug logging

In alcuni casi sono necessarie maggiori informazioni sulla richiesta e la risposta per individuare la causa dell'errore.Sometimes you need more information about the request and response to discover what went wrong. Con PowerShell o l'interfaccia della riga di comando di Azure è possibile richiedere la registrazione di informazioni aggiuntive durante la distribuzione.By using PowerShell or Azure CLI, you can request that additional information is logged during a deployment.

  • PowerShellPowerShell

    In PowerShell impostare il parametro DeploymentDebugLogLevel su All, ResponseContent o RequestContent.In PowerShell, set the DeploymentDebugLogLevel parameter to All, ResponseContent, or RequestContent.

    New-AzureRmResourceGroupDeployment -ResourceGroupName examplegroup -TemplateFile c:\Azure\Templates\storage.json -DeploymentDebugLogLevel All
    

    Esaminare il contenuto della richiesta con il cmdlet seguente:Examine the request content with the following cmdlet:

    (Get-AzureRmResourceGroupDeploymentOperation -DeploymentName storageonly -ResourceGroupName startgroup).Properties.request | ConvertTo-Json
    

    In alternativa, esaminare il contenuto della risposta con:Or, the response content with:

    (Get-AzureRmResourceGroupDeploymentOperation -DeploymentName storageonly -ResourceGroupName startgroup).Properties.response | ConvertTo-Json
    

    Queste informazioni consentono di stabilire se nel modello sia impostato un valore errato.This information can help you determine whether a value in the template is being incorrectly set.

  • Interfaccia della riga di comando di AzureAzure CLI

    Esaminare le operazioni di distribuzione con il comando seguente:Examine the deployment operations with the following command:

    az group deployment operation list --resource-group ExampleGroup --name vmlinux
    
  • Modello annidatoNested template

    Per registrare le informazioni di debug relative a un modello nidificato, usare l'elemento debugSetting.To log debug information for a nested template, use the debugSetting element.

    {
        "apiVersion": "2016-09-01",
        "name": "nestedTemplate",
        "type": "Microsoft.Resources/deployments",
        "properties": {
            "mode": "Incremental",
            "templateLink": {
                "uri": "{template-uri}",
                "contentVersion": "1.0.0.0"
            },
            "debugSetting": {
               "detailLevel": "requestContent, responseContent"
            }
        }
    }
    

Creare un modello per la risoluzione dei problemiCreate a troubleshooting template

Talvolta il modo più semplice per risolvere i problemi del modello è testarne alcune parti.In some cases, the easiest way to troubleshoot your template is to test parts of it. A tale scopo, è possibile creare un modello semplificato che consente di concentrarsi sulla parte da cui si ritiene abbia origine l'errore.You can create a simplified template that enables you to focus on the part that you believe is causing the error. Si supponga, ad esempio, di ricevere un errore quando si fa riferimento a una risorsa.For example, suppose you are receiving an error when referencing a resource. Anziché gestire un intero modello, crearne uno che restituisca la parte potenzialmente problematica.Rather than dealing with an entire template, create a template that returns the part that may be causing your problem. Ciò può aiutare a capire se i parametri trasmessi siano corretti, a usare correttamente le funzioni del modello e a recuperare le risorse desiderate.It can help you determine whether you are passing in the right parameters, using template functions correctly, and getting the resource you expect.

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storageName": {
        "type": "string"
    },
    "storageResourceGroup": {
        "type": "string"
    }
  },
  "variables": {},
  "resources": [],
  "outputs": {
    "exampleOutput": {
        "value": "[reference(resourceId(parameters('storageResourceGroup'), 'Microsoft.Storage/storageAccounts', parameters('storageName')), '2016-05-01')]",
        "type" : "object"
    }
  }
}

In alternativa, si supponga di incontrare errori di distribuzione presumibilmente correlati a dipendenze impostate in modo errato.Or, suppose you are encountering deployment errors that you believe are related to incorrectly set dependencies. Testare il modello suddividendolo in modelli semplificati.Test your template by breaking it into simplified templates. Creare innanzitutto un modello che distribuisce una sola risorsa (ad esempio SQL Server).First, create a template that deploys only a single resource (like a SQL Server). Quando si è certi che la risorsa sia definita correttamente, aggiungere una risorsa che dipende da essa (ad esempio un database SQL).When you are sure you have that resource correctly defined, add a resource that depends on it (like a SQL Database). Una volta definite correttamente queste due risorse, aggiungere altre risorse che dipendono da esse (ad esempio criteri di controllo).When you have those two resources correctly defined, add other dependent resources (like auditing policies). Tra una distribuzione di test e l'altra, eliminare il gruppo di risorse per assicurarsi di testare le dipendenze in modo adeguato.In between each test deployment, delete the resource group to make sure you adequately testing the dependencies.

Controllare la sequenza di distribuzioneCheck deployment sequence

Molti errori di distribuzione si verificano quando le risorse vengono distribuite secondo una sequenza imprevista.Many deployment errors happen when resources are deployed in an unexpected sequence. Questi errori vengono generati quando le dipendenze non sono impostate correttamente.These errors arise when dependencies are not correctly set. Quando manca una dipendenza necessaria, una risorsa tenta di usare un valore per un'altra risorsa che tuttavia non esiste ancoraWhen you are missing a needed dependency, one resource attempts to use a value for another resource but the other does not yet exist. e viene visualizzato un errore che indica che non è stata trovata una risorsa.You get an error stating that a resource is not found. Questo tipo di errore può verificarsi in modo intermittente perché i tempi di distribuzione delle singole risorse possono variare.You may encounter this type of error intermittently because the deployment time for each resource can vary. È ad esempio possibile che il primo tentativo di distribuire le risorse abbia esito positivo perché una risorsa obbligatoria viene casualmente completata in tempo,For example, your first attempt to deploy your resources succeeds because a required resource randomly completes in time. ma che ciò non avvenga al secondo tentativo e che questo abbia quindi esito negativo.However, your second attempt fails because the required resource did not complete in time.

È tuttavia opportuno evitare di impostare dipendenze non necessarie.But, you want to avoid setting dependencies that are not needed. La presenza di dipendenze non necessarie prolunga la durata della distribuzione impedendo di distribuire in parallelo risorse che non sono interdipendenti.When you have unnecessary dependencies, you prolong the duration of the deployment by preventing resources that are not dependent on each other from being deployed in parallel. Si potrebbero anche creare dipendenze circolari che bloccano la distribuzione.In addition, you may create circular dependencies that block the deployment. La funzione reference crea una dipendenza implicita nella risorsa specificata, se tale risorsa viene distribuita nello stesso modello.The reference function creates an implicit dependency on the referenced resource, when that resource is deployed in the same template. Si potrebbero quindi avere dipendenze aggiuntive rispetto a quelle specificate nella proprietà dependsOn.Therefore, you may have more dependencies than the dependencies specified in the dependsOn property. La funzione resourceId non crea una dipendenza implicita né esegue la convalida dell'esistenza della risorsa.The resourceId function does not create an implicit dependency or validate that the resource exists.

In caso di problemi relativi alle dipendenze, è necessario approfondire l'ordine di distribuzione delle risorse.When you encounter dependency problems, you need to gain insight into the order of resource deployment. Per visualizzare l'ordine delle operazioni di distribuzione:To view the order of deployment operations:

  1. Selezionare la cronologia delle distribuzioni per il gruppo di risorse.Select the deployment history for your resource group.

    selezionare la cronologia delle distribuzioni

  2. Selezionare una distribuzione dalla cronologia e fare clic su Eventi.Select a deployment from the history, and select Events.

    selezionare gli eventi di distribuzione

  3. Esaminare la sequenza degli eventi per ogni risorsa.Examine the sequence of events for each resource. Prestare attenzione allo stato di ciascuna operazione.Pay attention to the status of each operation. Ad esempio, l'immagine seguente mostra tre account di archiviazione distribuiti in parallelo.For example, the following image shows three storage accounts that deployed in parallel. Si noti che i tre account di archiviazione vengono avviati contemporaneamente.Notice that the three storage accounts are started at the same time.

    distribuzione parallela

    L'immagine successiva mostra tre account di archiviazione che non vengono distribuiti in parallelo.The next image shows three storage accounts that are not deployed in parallel. Il secondo account di archiviazione dipende dal primo e il terzo account di archiviazione dipende dal secondo.The second storage account depends on the first storage account, and the third storage account depends on the second storage account. Pertanto, il primo account di archiviazione viene avviato, accettato e completato prima che sia avviato il successivo.Therefore, the first storage account is started, accepted, and completed before the next is started.

    distribuzione sequenziale

Persino per scenari più complessi è possibile usare la stessa tecnica per individuare quando è stata avviata e completata la distribuzione per ogni risorsa.Even for more complicated scenarios, you can use the same technique to discover when deployment is started and completed for each resource. Esaminare gli eventi di distribuzione per verificare se la sequenza è diversa dal previsto.Look through your deployment events to see if the sequence is different than you would expect. In tal caso, valutare nuovamente le dipendenze per la risorsa.If so, reevaluate the dependencies for this resource.

Resource Manager identifica le dipendenze circolari durante la convalida del modello.Resource Manager identifies circular dependencies during template validation. Restituisce quindi un messaggio di errore che indica specificamente la presenza di una dipendenza circolare.It returns an error message that specifically states a circular dependency exists. Per risolvere una dipendenza circolare:To solve a circular dependency:

  1. Nel modello trovare la risorsa identificata nella dipendenza circolare.In your template, find the resource identified in the circular dependency.
  2. Esaminare la proprietà dependsOn e le occorrenze della funzione reference per tale risorsa per verificare le risorse da cui dipende.For that resource, examine the dependsOn property and any uses of the reference function to see which resources it depends on.
  3. Esaminare tali risorse per verificare da quali risorse dipendono.Examine those resources to see which resources they depend on. Seguire le dipendenze finché non si rileva una risorsa che dipende dalla risorsa originale.Follow the dependencies until you notice a resource that depends on the original resource.
  4. Per le risorse coinvolte nella dipendenza circolare, esaminare attentamente tutte le occorrenze della proprietà dependsOn per identificare eventuali dipendenze non necessarie.For the resources involved in the circular dependency, carefully examine all uses of the dependsOn property to identify any dependencies that are not needed. Rimuovere tali dipendenze.Remove those dependencies. Se non si è certi che una dipendenza sia necessaria, provare a rimuoverla.If you are unsure that a dependency is needed, try removing it.
  5. Ridistribuire il modello.Redeploy the template.

La rimozione di valori dalla proprietà dependsOn può causare errori durante la distribuzione del modello.Removing values from the dependsOn property can cause errors when you deploy the template. Se si verifica un errore, riaggiungere la dipendenza al modello.If you encounter an error, add the dependency back into the template.

Se con questo approccio non si rivolve la dipendenza circolare, provare a spostare parte della logica di distribuzione in risorse figlio, come estensioni o impostazioni di configurazione.If that approach does not solve the circular dependency, consider moving part of your deployment logic into child resources (such as extensions or configuration settings). Configurare tali risorse figlio in modo che vengano distribuite dopo le risorse coinvolte nella dipendenza circolare.Configure those child resources to deploy after the resources involved in the circular dependency. Si supponga, ad esempio, di distribuire due macchine virtuali e che sia necessario impostare in ognuna proprietà che fanno riferimento all'altra.For example, suppose you are deploying two virtual machines but you must set properties on each one that refer to the other. È possibile eseguire la distribuzione nell'ordine seguente:You can deploy them in the following order:

  1. VM 1vm1
  2. VM 2vm2
  3. L'estensione in VM 1 dipende da VM 1 e VM 2.Extension on vm1 depends on vm1 and vm2. L'estensione imposta in VM 1 valori ottenuti da VM 2.The extension sets values on vm1 that it gets from vm2.
  4. L'estensione in VM 2 dipende da VM 1 e VM 2.Extension on vm2 depends on vm1 and vm2. L'estensione imposta in VM 2 valori ottenuti da VM 1.The extension sets values on vm2 that it gets from vm1.

Lo stesso approccio è applicabile alle app del servizio app.The same approach works for App Service apps. Provare a spostare i valori di configurazione in una risorsa figlio della risorsa app.Consider moving configuration values into a child resource of the app resource. È possibile distribuire due app Web nell'ordine seguente:You can deploy two web apps in the following order:

  1. App Web 1webapp1
  2. App Web 2webapp2
  3. La configurazione per App Web 1 dipende da App Web 1 e App Web 2.config for webapp1 depends on webapp1 and webapp2. Contiene impostazioni dell'app con valori di App Web 2.It contains app settings with values from webapp2.
  4. La configurazione per App Web 2 dipende da App Web 1 e App Web 2.config for webapp2 depends on webapp1 and webapp2. Contiene impostazioni dell'app con valori di App Web 1.It contains app settings with values from webapp1.

Passaggi successiviNext steps