Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo articolo descrive come risolvere gli errori di modello non validi per i file Bicep e i modelli di Azure Resource Manager (modelli arm). L'errore si verifica per diversi motivi, ad esempio un errore di sintassi, un valore di parametro non valido o una dipendenza circolare.
Sintomo
Quando viene distribuito un modello, viene visualizzato un errore che indica:
Code=InvalidTemplate
Message=<varies>
Il messaggio di errore dipende dal tipo di errore.
Motivo
Questo errore può derivare da diversi tipi di errori. In genere implicano una sintassi o un errore strutturale nel modello.
Soluzione 1: Errore di sintassi
Se viene visualizzato un messaggio di errore che indica che la convalida del modello non è riuscita, è possibile che si verifichi un problema di sintassi nel modello.
Code=InvalidTemplate
Message=Deployment template validation failed
Gli errori di sintassi possono verificarsi perché le espressioni modello hanno molti elementi. Ad esempio, l'assegnazione del nome per un account di archiviazione include coppie di virgolette singole o doppie, parentesi graffe, parentesi quadre e parentesi tonde. Le espressioni contengono anche funzioni e caratteri come segni di dollaro, virgole e punti.
Quando viene visualizzato questo tipo di errore, esaminare la sintassi dell'espressione. Per identificare gli errori del modello, è possibile usare Visual Studio Code con l'estensione Bicep o l'estensione Strumenti di Azure Resource Manager più recente.
Soluzione 2: lunghezze di segmento non corrette
Un altro errore di modello non valido si verifica quando il nome della risorsa non è nel formato corretto. Per risolvere l'errore, vedere Risolvere gli errori relativi al nome e alla mancata corrispondenza del tipo.
Soluzione 3: Il parametro non è valido
È possibile specificare i valori consentiti di un parametro in un modello. Durante la distribuzione, se si specifica un valore che non è consentito, viene visualizzato un messaggio simile all'errore seguente:
Code=InvalidTemplate;
Message=Deployment template validation failed: 'The provided value {parameter value}
for the template parameter {parameter name} is not valid. The parameter value is not
part of the allowed values
Controllare il modello per i valori consentiti del parametro e usare un valore consentito durante la distribuzione. Per altre informazioni, vedere Valori consentiti per i modelli Bicep o ARM.
Soluzione 4: Troppi gruppi di risorse di destinazione
Questo errore può verificarsi nelle distribuzioni precedenti perché sono stati limitati a cinque gruppi di risorse di destinazione in una singola distribuzione. Nel maggio 2020, tale limite è stato aumentato a 800 gruppi di risorse. Per altre informazioni, vedere come eseguire la distribuzione in più gruppi di risorse per modelli Bicep o ARM.
Soluzione 5: Rilevata dipendenza circolare
Questo errore viene visualizzato quando le risorse dipendono l'una dall'altra in modo da impedire l'avvio della distribuzione. Una combinazione di interdipendenze rende due o più risorse in attesa di altre risorse in attesa. Ad esempio, resource1
dipende da resource3
, resource2
dipende da resource1
e resource3
dipende da resource2
. In genere è possibile risolvere questo problema rimuovendo le dipendenze non necessarie.
Bicep crea una dipendenza implicita quando una risorsa usa il nome simbolico di un'altra risorsa. Una dipendenza esplicita utilizzando dependsOn
di solito non è necessaria. Per altre informazioni, vedere Dipendenze Bicep.
Per risolvere una dipendenza circolare:
- Nel modello trovare la risorsa identificata nella dipendenza circolare.
- Per tale risorsa, esaminare la
dependsOn
proprietà e gli eventuali usi dellereference
funzioni oresourceId
per visualizzare le risorse da cui dipende. - Esaminare queste risorse per vedere le risorse da cui dipendono. Seguire le dipendenze finché non si nota una risorsa che dipende dalla risorsa originale.
- Per le risorse coinvolte nella dipendenza circolare, esaminare attentamente tutti gli usi della
dependsOn
proprietà per identificare eventuali dipendenze non necessarie. Per risolvere i problemi di distribuzione, rimuovere le dipendenze circolari. Anziché eliminare il codice, è possibile usare i commenti in modo che il codice non venga eseguito durante la distribuzione successiva. È possibile usare commenti a riga singola (//
) o commenti su più righe (/* ... */
) nei modelli arm o nei file Bicep . - Ridistribuire il modello.
La rimozione di valori dalla dependsOn
proprietà può causare errori durante la distribuzione del modello. Se viene visualizzato un errore, aggiungere nuovamente la dipendenza nel modello. Se sono stati usati commenti per ignorare il codice nel modello, è possibile rimuovere i commenti per ripristinare il codice.
Se questo approccio non risolve la dipendenza circolare, è consigliabile spostare parte della logica di distribuzione in risorse figlio, ad esempio estensioni o impostazioni di configurazione. Configurare le risorse figlio affinché vengano distribuite dopo le risorse coinvolte nella dipendenza circolare. Si supponga, ad esempio, di distribuire due macchine virtuali e che sia necessario impostare in ognuna proprietà che fanno riferimento all'altra. È possibile eseguire la distribuzione nell'ordine seguente:
- VM1
- VM2
- L'estensione in VM 1 dipende da VM 1 e VM 2. L'estensione imposta in VM 1 valori ottenuti da VM 2.
- L'estensione in VM 2 dipende da VM 1 e VM 2. L'estensione imposta in VM 2 valori ottenuti da VM 1.
Lo stesso approccio funziona per le app di App Service. Prendere in considerazione lo spostamento di valori di configurazione in una risorsa figlia della risorsa dell'app. È possibile distribuire due app Web nell'ordine seguente:
- webapp1
- webapp2
- La configurazione per webapp1 dipende da webapp1 e webapp2. Contiene le impostazioni dell'app con i valori di webapp2.
- La configurazione per webapp2 dipende da webapp1 e webapp2. Contiene le impostazioni dell'app con i valori di webapp1.
Soluzione 6: Convalidare la sintassi per i modelli esportati
Dopo aver distribuito le risorse in Azure, è possibile esportare il file JSON del modello ARM e modificarlo per altre distribuzioni. Prima di usarlo per distribuire le risorse , è necessario convalidare il modello esportato per la sintassi corretta.
È possibile esportare un modello dal portale, dall'interfaccia della riga di comando di Azure o da Azure PowerShell. Ci sono raccomandazioni sia che tu abbia esportato il modello dalla risorsa o dal gruppo di risorse, sia dalla cronologia di distribuzione.
Dopo aver esportato un modello ARM, è possibile decompilare il modello JSON in Bicep. Usa quindi il linter e le procedure consigliate per convalidare il tuo codice.
Per ulteriori informazioni, vedi i seguenti articoli: