Informazioni sulla struttura e sulla sintassi dei modelli di Resource Manager

Questo articolo descrive la struttura di un modello di Azure Resource Manager (modello di ARM). Presenta le diverse sezioni di un modello e le proprietà disponibili in queste sezioni.

Questo articolo è destinato agli utenti che hanno familiarità con i modelli di ARM. Fornisce informazioni dettagliate sulla struttura del modello. Per un'esercitazione dettagliata che illustra il processo di creazione di un modello, vedi Esercitazione: Creare e distribuire il primo modello di ARM. Per informazioni sui modelli di ARM tramite un set guidato di moduli in Microsoft Learn, vedi Distribuire e gestire le risorse in Azure usando i modelli di ARM.

Suggerimento

Bicep è un nuovo linguaggio che offre le stesse funzionalità dei modelli di ARM, ma con una sintassi più semplice da usare. Se consideri l'infrastruttura come opzioni di codice, raccomandiamo di dare un’occhiata Bicep.

Per informazioni sugli elementi di un file Bicep, vedi Comprendere la struttura e la sintassi dei file Bicep.

Formato del modello

La struttura più semplice di un modello è costituita dagli elementi seguenti:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "languageVersion": "",
  "contentVersion": "",
  "apiProfile": "",
  "definitions": { },
  "parameters": { },
  "variables": { },
  "functions": [ ],
  "resources": [ ], /* or "resources": { } with languageVersion 2.0 */
  "outputs": { }
}
Nome dell'elemento Obbligatorio Descrizione
$schema Percorso del file dello schema JSON (JavaScript Object Notation) che descrive la versione del linguaggio del modello. Il numero di versione usato dipende dall'ambito della distribuzione e dall'editor JSON.

Se usi Visual Studio Code con l'estensione strumenti di Azure Resource Manager, usa la versione più recente per le distribuzioni di gruppi di risorse:
https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#

Altri editor (incluso Visual Studio) potrebbero non essere in grado di elaborare questo schema. Per questi editor, usa:
https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#

Per le distribuzioni della sottoscrizione, usa:
https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#

Per le distribuzioni di un gruppo di gestione, usa:
https://schema.management.azure.com/schemas/2019-08-01/managementGroupDeploymentTemplate.json#

Per le distribuzioni tenant, usa:
https://schema.management.azure.com/schemas/2019-08-01/tenantDeploymentTemplate.json#
languageVersion No Versione della lingua del modello. Per visualizzare i miglioramenti di languageVersion 2.0, vedi languageVersion 2.0.
contentVersion Versione del modello (ad esempio 1.0.0.0). Questo elemento accetta tutti i valori. Usare questo valore per documentare le modifiche significative al modello. Quando si distribuiscono risorse tramite il modello, è possibile usare questo valore per assicurarsi che venga usato il modello corretto.
apiProfile No Una versione dell'API che funge da raccolta di versioni delle API per i tipi di risorse. Usare questo valore per evitare di dover specificare le versioni delle API per ogni risorsa nel modello. Quando si specifica una versione del profilo API e non si specifica una versione dell'API per il tipo di risorsa, Resource Manager usa la versione dell'API per il tipo di risorsa definito nel profilo.

La proprietà del profilo API è particolarmente utile quando si distribuisce un modello in ambienti diversi, ad esempio Azure Stack e Azure globale. Usare la versione del profilo API per assicurarsi che il modello usi automaticamente le versioni supportate in entrambi gli ambienti. Per un elenco delle versioni correnti del profilo API e delle versioni delle API delle risorse definite nel profilo, vedere Profilo API.

Per altre informazioni, vedere Tenere sotto controllo le versioni usando i profili API.
definizioni: No Schemi usati per convalidare i valori di matrici e oggetti. Le definizioni sono supportate solo in languageVersion 2.0.
parameters No Valori forniti durante la distribuzione per personalizzare la distribuzione di risorse.
variables No Valori usati come frammenti JSON nel modello per semplificare le espressioni di linguaggio del modello.
functions No Funzioni definite dall'utente disponibili nel modello.
resources Tipi di risorse che vengono distribuite o aggiornate in un gruppo di risorse o sottoscrizione.
outputs No Valori restituiti dopo la distribuzione.

Ogni elemento ha proprietà che è possibile impostare. In questo articolo le sezioni del modello vengono esaminate in modo dettagliato.

Definizioni

definitions Nella sezione del modello specifica gli schemi usati per convalidare i valori di matrice e oggetto. Definitions può essere usato solo con languageVersion 2.0.

"definitions": {
  "<definition-name": {
    "type": "<data-type-of-definition>",
    "allowedValues": [ "<array-of-allowed-values>" ],
    "minValue": <minimum-value-for-int>,
    "maxValue": <maximum-value-for-int>,
    "minLength": <minimum-length-for-string-or-array>,
    "maxLength": <maximum-length-for-string-or-array>,
    "prefixItems": <schema-for-validating-array>,
    "items": <schema-for-validating-array-or-boolean>,
    "properties": <schema-for-validating-object>,
    "additionalProperties": <schema-for-validating-object-or-boolean>,
    "discriminator": <schema-to-apply>,
    "nullable": <boolean>,
    "metadata": {
      "description": "<description-of-the-type-definition>"
    }
  }
}
Nome dell'elemento Obbligatorio Descrizione
definizione-nome Nome della definizione del tipo. deve essere un identificatore JavaScript valido.
type Tipo della definizione del tipo. I tipi e i valori consentiti sono string, securestring, int, bool, object, secureObject e array. Vedi Tipi di dati nei modelli di ARM.
allowedValues No Matrice di valori consentiti per la definizione di tipo per assicurarsi che venga fornito il valore corretto.
minValue No Valore minimo per le definizioni di tipo int, questo valore è inclusivo.
maxValue No Valore massimo per le definizioni di tipo int, questo valore è inclusivo.
minLength No Lunghezza minima per le definizioni di tipo string, secureString e array. Questo valore è inclusivo.
maxLength No Lunghezza massima per i parametri di tipo string, secureString e array. Questo valore è inclusivo.
prefixItems No Schema per convalidare l'elemento di una matrice nello stesso indice.
articoli No Schema applicato a tutti gli elementi della matrice il cui indice è maggiore dell'indice più grande del vincolo prefixItems , o booleano per controllare gli elementi della matrice il cui indice è maggiore dell'indice più grande del vincolo prefixItems .
proprietà No Schema per la convalida dell'oggetto.
additionalProperties No Schema applicato a tutte le proprietà non menzionate nel vincolo properties , o booleano per accettare qualsiasi proprietà non definita nel vincolo properties .
discriminator No Schema da applicare in base a una proprietà discriminatoria.
nullable No Un booleano che indica che il valore può essere null o omesso.
description No Descrizione della definizione di tipo visualizzata per gli utenti tramite il portale. Per altre informazioni, consultare la sezione Comments in templates (Commenti nel modello).

Per esempi di come usare le definizioni dei tipi, vedi Definizioni dei tipi nei modelli di ARM.

In Bicep, vedi Tipi di dati definiti dall'utente.

Parametri

Nella sezione parameters del modello puoi specificare i valori che è possibile immettere durante la distribuzione delle risorse. È previsto un limite di 256 parametri in un modello. È possibile ridurre il numero dei parametri usando oggetti che contengono più proprietà.

Le proprietà disponibili per un parametro sono:

"parameters": {
  "<parameter-name>" : {
    "type" : "<type-of-parameter-value>",
    "defaultValue": "<default-value-of-parameter>",
    "allowedValues": [ "<array-of-allowed-values>" ],
    "minValue": <minimum-value-for-int>,
    "maxValue": <maximum-value-for-int>,
    "minLength": <minimum-length-for-string-or-array>,
    "maxLength": <maximum-length-for-string-or-array>,
    "prefixItems": <schema-for-validating-array>,
    "items": <schema-for-validating-array-or-boolean>,
    "properties": <schema-for-validating-object>,
    "additionalProperties": <schema-for-validating-object-or-boolean>,
    "discriminator": <schema-to-apply>,
    "nullable": <boolean>,
    "metadata": {
      "description": "<description-of-the parameter>"
    }
  }
}
Nome dell'elemento Obbligatorio Descrizione
parameter-name Nome del parametro. deve essere un identificatore JavaScript valido.
type Tipo di valore del parametro. I tipi e i valori consentiti sono string, securestring, int, bool, object, secureObject e array. Vedi Tipi di dati nei modelli di ARM.
defaultValue No Valore predefinito per il parametro, se non viene fornito alcun valore per il parametro.
allowedValues No Matrice di valori consentiti per il parametro per assicurare che venga fornito il valore corretto.
minValue No Il valore minimo per i parametri di tipo int, questo valore è inclusivo.
maxValue No Il valore massimo per i parametri di tipo int, questo valore è inclusivo.
minLength No Lunghezza minima per i parametri di tipo string, secureString e array. Questo valore è inclusivo.
maxLength No Lunghezza massima per i parametri di tipo string, secureString e array. Questo valore è inclusivo.
prefixItems No Definizione di tipo per convalidare l'elemento di una matrice nello stesso indice. prefixItems è supportato solo in languageVersion 2.0.
articoli No Schema applicato a tutti gli elementi della matrice il cui indice è maggiore dell'indice più grande del vincolo prefixItems , o booleano per controllare gli elementi della matrice il cui indice è maggiore dell'indice più grande del vincolo prefixItems . items è supportato solo in languageVersion 2.0.
proprietà No Schema per la convalida dell'oggetto. properties è supportato solo in languageVersion 2.0.
additionalProperties No Schema applicato a tutte le proprietà non menzionate nel vincolo properties , o booleano per accettare qualsiasi proprietà non definita nel vincolo properties . additionalProperties è supportato solo in languageVersion 2.0.
discriminator No Schema da applicare in base a una proprietà discriminatoria. discriminator è supportato solo in languageVersion 2.0.
nullable No Un booleano che indica che il valore può essere null o omesso. nullable è supportato solo in languageVersion 2.0.
description No Descrizione del parametro visualizzato agli utenti nel portale. Per altre informazioni, consultare la sezione Comments in templates (Commenti nel modello).

Per esempi di come usare i parametri, vedi Parametri nei modelli di ARM.

In Bicep vedi parametri.

Variabili

Nella sezione variables puoi costruire valori da usare in tutto il modello. Non è obbligatorio definire le variabili. Queste tuttavia consentono spesso di semplificare il modello, riducendo le espressioni complesse. Il formato di ogni variabile corrisponde a uno dei tipi di dati. È previsto un limite di 256 parametri in un modello.

L'esempio seguente mostra le opzioni disponibili per definire una variabile:

"variables": {
  "<variable-name>": "<variable-value>",
  "<variable-name>": {
    <variable-complex-type-value>
  },
  "<variable-object-name>": {
    "copy": [
      {
        "name": "<name-of-array-property>",
        "count": <number-of-iterations>,
        "input": <object-or-value-to-repeat>
      }
    ]
  },
  "copy": [
    {
      "name": "<variable-array-name>",
      "count": <number-of-iterations>,
      "input": <object-or-value-to-repeat>
    }
  ]
}

Per informazioni sull'uso di copy per creare diversi valori per una variabile, vedi Iterazione variabili.

Per esempi di come usare le variabili, vedi Variabili nel modello di ARM.

In Bicep vedi variabili.

Funzioni

Nel modello è possibile creare funzioni personalizzate. Tali funzioni sono disponibili per usare il modello. Si definiscono in genere espressioni complesse che non vuoi ripetere in tutto il modello. Le funzioni definite dall'utente vengono create da espressioni e funzioni supportate nei modelli.

Quando si crea una funzione definita dall'utente, è necessario tenere presente alcune restrizioni:

  • La funzione non può accedere alle variabili.
  • La funzione può usare solo i parametri definiti in essa. Quando usi la funzione parametri all'interno di una funzione definita dall'utente, puoi usare solo i parametri per quella funzione.
  • La funzione non può chiamare altre funzioni definite dall'utente.
  • La funzione non può usare la funzione di riferimento.
  • I parametri della funzione non possono avere valori predefiniti.
"functions": [
  {
    "namespace": "<namespace-for-functions>",
    "members": {
      "<function-name>": {
        "parameters": [
          {
            "name": "<parameter-name>",
            "type": "<type-of-parameter-value>"
          }
        ],
        "output": {
          "type": "<type-of-output-value>",
          "value": "<function-return-value>"
        }
      }
    }
  }
],
Nome dell'elemento Obbligatorio Descrizione
namespace Spazio dei nomi per le funzioni personalizzate. Usare per evitare conflitti di denominazione con le funzioni del modello.
function-name Nome della funzione personalizzata. Quando si chiama la funzione, combinare il nome della funzione con lo spazio dei nomi . Ad esempio, per chiamare una funzione denominata uniqueName nello spazio dei nomi contoso, usa "[contoso.uniqueName()]".
parameter-name No Nome del parametro da usare all'interno della funzione personalizzata.
parameter-value No Tipo di valore del parametro. I tipi e i valori consentiti sono string, securestring, int, bool, object, secureObject e array.
output-type Tipo del valore di output. I valori di output supportano gli stessi tipi dei parametri di input della funzione.
output-value Espressione del linguaggio di modello valutata e restituita dalla funzione.

Per esempi di come usare funzioni personalizzate, vedi Funzioni definite dall'utente nel modello di ARM.

In Bicep le funzioni definite dall'utente non sono supportate. Bicep supporta varie funzioni e operatori.

Risorse

Nella sezione resources puoi definire le risorse distribuite o aggiornate. È previsto un limite di 800 risorse per modello.

Le risorse vengono definite con la struttura seguente:

"resources": [
  {
    "condition": "<true-to-deploy-this-resource>",
    "type": "<resource-provider-namespace/resource-type-name>",
    "apiVersion": "<api-version-of-resource>",
    "name": "<name-of-the-resource>",
    "comments": "<your-reference-notes>",
    "location": "<location-of-resource>",
    "dependsOn": [
        "<array-of-related-resource-names>"
    ],
    "tags": {
        "<tag-name1>": "<tag-value1>",
        "<tag-name2>": "<tag-value2>"
    },
    "identity": {
      "type": "<system-assigned-or-user-assigned-identity>",
      "userAssignedIdentities": {
        "<resource-id-of-identity>": {}
      }
    },
    "sku": {
        "name": "<sku-name>",
        "tier": "<sku-tier>",
        "size": "<sku-size>",
        "family": "<sku-family>",
        "capacity": <sku-capacity>
    },
    "kind": "<type-of-resource>",
    "scope": "<target-scope-for-extension-resources>",
    "copy": {
        "name": "<name-of-copy-loop>",
        "count": <number-of-iterations>,
        "mode": "<serial-or-parallel>",
        "batchSize": <number-to-deploy-serially>
    },
    "plan": {
        "name": "<plan-name>",
        "promotionCode": "<plan-promotion-code>",
        "publisher": "<plan-publisher>",
        "product": "<plan-product>",
        "version": "<plan-version>"
    },
    "properties": {
        "<settings-for-the-resource>",
        "copy": [
            {
                "name": ,
                "count": ,
                "input": {}
            }
        ]
    },
    "resources": [
        "<array-of-child-resources>"
    ]
  }
]
Nome dell'elemento Obbligatorio Descrizione
condizione No Booleano che indica se verrà effettuato il provisioning della risorsa durante questa distribuzione. Se true, la risorsa viene creata durante la distribuzione. Se false, la risorsa viene ignorata per questa distribuzione. Vedi condizione.
type Tipo di risorsa. Questo valore è una combinazione dello spazio dei nomi del provider di risorse e del tipo di risorsa (ad esempio Microsoft.Storage/storageAccounts). Per determinare i valori disponibili, vedi riferimento al modello. Per una risorsa figlio, il formato del tipo dipende dal fatto che sia annidato all'interno della risorsa padre o definito all'esterno della risorsa padre. Vedere Impostare il nome e il tipo per le risorse figlio.
apiVersion Versione dell'API REST da utilizzare per la creazione della risorsa. Quando crei un nuovo modello, imposta questo valore sulla versione più recente della risorsa che stai distribuendo. Purché il modello funzioni in base alle esigenze, continua a usare la stessa versione dell'API. Continuando a usare la stessa versione dell'API, riduci al minimo il rischio che una nuova versione dell'API modifichi il funzionamento del modello. È consigliabile aggiornare la versione dell'API solo quando vuoi usare una nuova funzionalità introdotta in una versione successiva. Per determinare i valori disponibili, vedi riferimento al modello.
name Nome della risorsa. Il nome deve rispettare le restrizioni dei componenti URI definite dallo standard RFC3986. I servizi Azure che rendono visibile il nome della risorsa a terze parti convalidano anche il nome, per essere sicuri che non si tratti di un tentativo di spoofing per un'identità alternativa. Per una risorsa figlio, il formato del nome dipende dal fatto che sia annidato all'interno della risorsa padre o definito all'esterno della risorsa padre. Vedere Impostare il nome e il tipo per le risorse figlio.
comments No Le note per documentare le risorse nel modello. Per altre informazioni, consultare la sezione Comments in templates (Commenti nel modello).
posizione Variabile Aree geografiche supportate della risorsa specificata. È possibile selezionare qualsiasi località disponibile, ma è in genere opportuno sceglierne una vicina agli utenti. Di solito è anche opportuno inserire le risorse che interagiscono tra loro nella stessa area. La maggior parte dei tipi di risorsa richiede una posizione, ma alcuni tipi (ad esempio un'assegnazione di ruolo) non la richiedono. Vedi Impostare il percorso della risorsa.
dependsOn No Risorse da distribuire prima della distribuzione di questa risorsa. Resource Manager valuta le dipendenze tra le risorse e le distribuisce nell'ordine corretto. Quando le risorse non sono interdipendenti, vengono distribuite in parallelo. Il valore può essere un elenco delimitato da virgole di nomi o identificatori univoci di risorse. Elencare solo le risorse distribuite in questo modello. Le risorse non definite in questo modello devono essere già esistenti. Evitare di aggiungere dipendenze non necessarie perché possono rallentare la distribuzione e creare dipendenze circolari. Per indicazioni sull'impostazione delle dipendenze, vedi Definire l'ordine di distribuzione delle risorse nei modelli di ARM.
tag No Tag associati alla risorsa. Applicare i tag per organizzare in modo logico le risorse nella sottoscrizione.
autenticazione No Alcune risorse supportano le identità gestite per le risorse di Azure. Tali risorse hanno un oggetto identity a livello radice della dichiarazione di risorsa. Puoi impostare se l'identità è assegnata dall'utente o assegnata dal sistema. Per le identità assegnate dall'utente, specifica un elenco di ID risorsa per le identità. Imposta la chiave sull'ID risorsa e sul valore su un oggetto vuoto. Per ulteriori informazioni, vedi Configurare le identità gestite per le risorse di Azure in una macchina virtuale di Azure tramite i modelli.
sku No Alcune risorse consentono valori che definiscono lo SKU da distribuire. Ad esempio, è possibile specificare il tipo di ridondanza per un account di archiviazione.
kind No Alcune risorse consentono un valore che definisce il tipo di risorsa distribuito. Ad esempio, puoi specificare il tipo di istanza di Azure Cosmos DB da creare.
ambito No La proprietà scope è disponibile solo per i tipi di risorse di estensione. Usala quando specifichi un ambito diverso dall'ambito di distribuzione. Vedi Impostazione dell'ambito per le risorse di estensione nei modelli di ARM.
copy No Numero di risorse da creare, se sono necessarie più istanze. La modalità predefinita è parallela. Specificare la modalità seriale quando si desidera che non tutte le risorse vengano distribuite contemporaneamente. Per altre informazioni, vedere Creare più istanze di risorse in Azure Resource Manager.
piano No Alcune risorse consentono valori che definiscono il piano da distribuire. Ad esempio, è possibile specificare l'immagine del marketplace per una macchina virtuale.
proprietà No Impostazioni di configurazione specifiche delle risorse. I valori per l'elemento properties corrispondono esattamente a quelli specificati nel corpo della richiesta per l'operazione API REST (metodo PUT) per creare la risorsa. È inoltre possibile specificare una matrice di copia per creare diverse istanze di una proprietà. Per determinare i valori disponibili, vedi riferimento al modello.
risorse No Risorse figlio che dipendono dalla risorsa in via di definizione. Specificare solo tipi di risorsa consentiti dallo schema della risorsa padre. La dipendenza dalla risorsa padre non è implicita. È necessario definirla in modo esplicito. Vedere Impostare il nome e il tipo per le risorse figlio.

Per supportare il nome simbolico Bicep nei modelli di ARM JSON, aggiungi languageVersion con la versione 2.0 o più recente e modifica la definizione delle risorse da una matrice a un oggetto.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "languageVersion": "2.0",
  "contentVersion": "1.0.0.0",
  "resources": {
    "<name-of-the-resource>": {
      ...
    }
  }
}

Per altre informazioni, vedere Risorse.

In Bicep, vedi risorse.

Output

Nella sezione outputs , puoi specificare i valori restituiti dalla distribuzione. In genere, restituisci i valori dalle risorse che sono state distribuite. È previsto un limite di 64 output in un modello.

L'esempio seguente illustra la struttura di una definizione di output:

"outputs": {
  "<output-name>": {
    "condition": "<boolean-value-whether-to-output-value>",
    "type": "<type-of-output-value>",
    "value": "<output-value-expression>",
    "copy": {
      "count": <number-of-iterations>,
      "input": <values-for-the-variable>
    }
  }
}
Nome dell'elemento Obbligatorio Descrizione
output-name Nome del valore di output. deve essere un identificatore JavaScript valido.
condizione No Valore booleano che indica se questo valore di output viene restituito. Quando è true, il valore è incluso nell'output per la distribuzione. Quando è false, il valore dell'output viene ignorato per questa distribuzione. Quando non è specificato, il valore predefinito è true.
type Tipo del valore di output. I valori di output supportano gli stessi tipi dei parametri di input del modello. Se specifichi securestring per il tipo di output, il valore non viene visualizzato nella cronologia di distribuzione e non può essere recuperato da un altro modello. Per usare un valore segreto in più di un modello, archivia il segreto in un insieme di credenziali delle chiavi e fai riferimento al segreto nel file dei parametri. Per altre informazioni, vedere Usare Azure Key Vault per passare valori di parametro protetti durante la distribuzione.
value No Espressione del linguaggio di modello valutata e restituita come valore di output. Specifica il valore o la copia.
copy No Utilizzato per restituire più di un valore per un output. Specifica il valore o la copia. Per ulteriori informazioni, vedi Iterazione degli output nei modelli di ARM.

Per esempi di come usare gli output, vedi Output nel modello di ARM.

In Bicep, vedi output.

Commenti e metadati

Sono disponibili diverse opzioni per aggiungere commenti e metadati al modello.

Commenti

Per i commenti inline, puoi usare // o /* ... */. In Visual Studio Code, salva i file di parametri con commenti come il JSON con commenti tipo di file (JSONC), in caso contrario viene visualizzato un messaggio di errore che indica che "Commenti non consentiti in JSON".

Nota

Quando usi l'interfaccia della riga di comando di Azure per distribuire modelli con commenti, utilizza la versione 2.3.0 o successiva e specifica l'opzione --handle-extended-json-format .

{
  "type": "Microsoft.Compute/virtualMachines",
  "apiVersion": "2023-03-01",
  "name": "[variables('vmName')]", // to customize name, change it in variables
  "location": "[parameters('location')]", //defaults to resource group location
  "dependsOn": [ /* storage account and network interface must be deployed first */
    "[resourceId('Microsoft.Storage/storageAccounts/', variables('storageAccountName'))]",
    "[resourceId('Microsoft.Network/networkInterfaces/', variables('nicName'))]"
  ],

In Visual Studio Code, l'estensione Strumenti di Azure Resource Manager può rilevare automaticamente un modello di ARM e modificare la modalità del linguaggio. Se vedi Modello di Azure Resource Manager nell'angolo inferiore destro di Visual Studio Code, puoi usare i commenti inline. In questo modo i commenti inline non verranno più contrassegnati come non validi.

Screenshot of Visual Studio Code in Azure Resource Manager template mode.

In Bicep, vedi commenti.

Metadati UFX

È possibile aggiungere un oggetto metadata praticamente ovunque nel modello. Resource Manager ignora l'oggetto, ma l'editor JSON potrebbe segnalare che la proprietà non è valida. Nell'oggetto definire le proprietà necessarie.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "metadata": {
    "comments": "This template was developed for demonstration purposes.",
    "author": "Example Name"
  },

Per parameters, aggiungi un oggetto metadata con una proprietà description .

"parameters": {
  "adminUsername": {
    "type": "string",
    "metadata": {
      "description": "User name for the Virtual Machine."
    }
  },

Durante la distribuzione del modello tramite il portale, il testo specificato nella descrizione viene usato automaticamente come suggerimento per tale parametro.

Screenshot showing parameter tip in Azure portal.

Per resources, aggiungi un elemento comments o un oggetto metadata . L'esempio seguente mostra sia un elemento comments che un oggetto metadata .

"resources": [
  {
    "type": "Microsoft.Storage/storageAccounts",
    "apiVersion": "2022-09-01",
    "name": "[format('{0}{1}', 'storage', uniqueString(resourceGroup().id))]",
    "comments": "Storage account used to store VM disks",
    "location": "[parameters('location')]",
    "metadata": {
      "comments": "These tags are needed for policy compliance."
    },
    "tags": {
      "Dept": "[parameters('deptName')]",
      "Environment": "[parameters('environment')]"
    },
    "sku": {
      "name": "Standard_LRS"
    },
    "kind": "Storage",
    "properties": {}
  }
]

Per outputs, aggiungi un oggetto metadata al valore di output.

"outputs": {
  "hostname": {
    "type": "string",
    "value": "[reference(variables('publicIPAddressName')).dnsSettings.fqdn]",
    "metadata": {
      "comments": "Return the fully qualified domain name"
    }
  },

Non puoi aggiungere un oggetto metadata alle funzioni definite dall'utente.

Stringhe multilinea

Puoi suddividere una stringa in più linee. Ad esempio, vedi la proprietà location e uno dei commenti nell'esempio JSON seguente.

Nota

Per distribuire modelli con stringhe multilinea, usa Azure PowerShell o l'interfaccia della riga di comando di Azure. Per l'interfaccia della riga di comando, usa la versione 2.3.0 o successiva e specifica l'opzione --handle-extended-json-format .

Le stringhe multilinea non sono supportate quando distribuisci il modello tramite il portale di Azure, una pipeline DevOps o l'API REST.

{
  "type": "Microsoft.Compute/virtualMachines",
  "apiVersion": "2023-03-01",
  "name": "[variables('vmName')]", // to customize name, change it in variables
  "location": "[
    parameters('location')
    ]", //defaults to resource group location
  /*
    storage account and network interface
    must be deployed first
  */
  "dependsOn": [
    "[resourceId('Microsoft.Storage/storageAccounts/', variables('storageAccountName'))]",
    "[resourceId('Microsoft.Network/networkInterfaces/', variables('nicName'))]"
  ],

In Bicep, vedi stringhe multilinea.

languageVersion 2.0

Nota

L'uso di qualsiasi languageVersion che termina in -experimental non è consigliato negli ambienti di produzione perché le funzionalità sperimentali possono essere modificate in qualsiasi momento.

Nota

La versione corrente dell'estensione Strumenti di Azure Resource Manager per Visual Studio Code non riconosce i miglioramenti apportati in languageVersion 2.0.

Per usare languageVersion 2.0, aggiungi "languageVersion": "2.0" al tuo modello:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "languageVersion": "2.0",
  "contentVersion": "1.0.0.0",
  "resources": {
    "<name-of-the-resource>": {
      ...
    }
  }
}

Miglioramenti e modifiche forniti in languageVersion 2.0:

  • Usa il nome simbolico nel modello JSON di ARM. Per ulteriori informazioni, vedi Usare nome simbolico.
  • Usa il nome simbolico nei cicli di copia delle risorse. Vedi Usare il nome simbolico.
  • Usa il nome simbolico nelle matrici dependsOn . Vedi DependsOn e In base alle risorse di un ciclo.
  • Usa il nome simbolico anziché il nome della risorsa nella funzione reference . Vedi le informazioni di riferimento.
  • Una funzione riferimenti() che restituisce una matrice di oggetti che rappresentano gli stati di runtime di una raccolta di risorse. Vedi riferimenti.
  • Usa la proprietà della risorsa "esistente" per dichiarare le risorse esistenti per ARM da leggere anziché distribuire una risorsa. Vedi Dichiarare le risorse esistenti.
  • Crea tipi definiti dall'utente. Vedi Definizione del tipo.
  • Vincoli di convalida dei tipi aggregati aggiuntivi da usare nei parametri e negli output.
  • Il valore predefinito per la proprietàexpressionEvaluationOptions è inner. Il valore outer è bloccato. Vedi Ambito di valutazione delle espressioni nei modelli annidati.
  • La funzione deployment restituisce un subset limitato di proprietà. Vedi Deployment (Distribuzione).
  • Se la risorsa Distribuzioni viene usata in una distribuzione con nome simbolico, usa apiVersion 2020-09-01 o versione successiva.
  • Nella definizione della risorsa non sono più necessari valori di doppio escape all'interno di un'espressione. Vedi Caratteri di escape.

Passaggi successivi