Comprendere la struttura e la sintassi dei modelli di Resource Manager

Questo articolo descrive la struttura di un modello di Azure Resource Manager (modello 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 Resource Manager. Fornisce informazioni dettagliate sulla struttura del modello. Per un'esercitazione dettagliata che illustra il processo di creazione di un modello, vedere Esercitazione: Creare e distribuire il primo modello di Resource Manager. Per informazioni sui modelli di Resource Manager tramite un set guidato di moduli Learn, vedere Distribuire e gestire le risorse in Azure usando i modelli di Resource Manager.

Suggerimento

Bicep è un nuovo linguaggio che offre le stesse funzionalità dei modelli di Arm, ma con una sintassi più semplice da usare. Se si considera l'infrastruttura come opzioni di codice, è consigliabile esaminare Bicep.

Per informazioni sugli elementi di un file Bicep, vedere 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 Obbligatoria 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 si usa Visual Studio Code con l'estensione degli strumenti di Resource Manager di Azure, usare 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 tali editor, usare:
https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#

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

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

Per le distribuzioni tenant, usare:
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, vedere 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 traccia delle versioni usando i profili API.
Definizioni No Schemi usati per convalidare la matrice e i valori degli 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 specificare gli schemi usati per convalidare la matrice e i valori degli oggetti. 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 Obbligatoria Descrizione
nome della definizione Nome della definizione del tipo. Deve essere un identificatore JavaScript valido.
tipo Tipo della definizione del tipo. I tipi e i valori consentiti sono string, securestring, int, bool, object, secureObject e array. Vedere Tipi di dati nei modelli di Resource Manager.
allowedValues No Matrice di valori consentiti per la definizione del tipo per assicurarsi che venga fornito il valore corretto.
minValue No Il valore minimo per le definizioni di tipo int, questo valore è inclusivo.
maxValue No Il valore massimo per le definizioni dei tipi int, questo valore è inclusivo.
minLength No Lunghezza minima per le definizioni di tipo stringa, sicura e matrice, questo valore è inclusivo.
maxLength No Lunghezza massima per le definizioni di tipo stringa, sicura e matrice, questo valore è inclusivo.
prefixItems No Schema per convalidare l'elemento di una matrice nello stesso indice.
items No Schema applicato a tutti gli elementi della matrice il cui indice è maggiore dell'indice più grande del prefixItems vincolo o booleano per controllare gli elementi della matrice il cui indice è maggiore dell'indice più grande del prefixItems vincolo.
properties No Schema per la convalida dell'oggetto .
proprietà aggiuntive No Schema applicato a tutte le proprietà non menzionate nel properties vincolo o booleano per accettare qualsiasi proprietà non definita nel properties vincolo.
discriminator No Schema da applicare in base a una proprietà discriminatoria.
nullable No Valore booleano che indica che il valore può essere null o omesso.
description No Descrizione della definizione del tipo visualizzata agli 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, vedere Definizioni dei tipi nei modelli di Resource Manager.

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

Parametri

parameters Nella sezione del modello si specificano i valori che è possibile immettere durante la distribuzione delle risorse. Sono limitati a 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 Obbligatoria Descrizione
nome parametro Nome del parametro. Deve essere un identificatore JavaScript valido.
tipo Tipo di valore del parametro. I tipi e i valori consentiti sono string, securestring, int, bool, object, secureObject e array. Vedere Tipi di dati nei modelli di Resource Manager.
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 del tipo per convalidare l'elemento di una matrice nello stesso indice. prefixItems è supportato solo in languageVersion 2.0.
items No Schema applicato a tutti gli elementi della matrice il cui indice è maggiore dell'indice più grande del prefixItems vincolo o booleano per controllare gli elementi della matrice il cui indice è maggiore dell'indice più grande del prefixItems vincolo. items è supportato solo in languageVersion 2.0.
properties No Schema per la convalida dell'oggetto . properties è supportato solo in languageVersion 2.0.
proprietà aggiuntive No Schema applicato a tutte le proprietà non menzionate nel properties vincolo o booleano per accettare qualsiasi proprietà non definita nel properties vincolo. 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 Valore 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, vedere Parametri nei modelli di Resource Manager.

In Bicep vedere parametri.

Variabili

Nella sezione si costruiscono valori che possono essere usati in tutto il variables 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. Sono limitate a 256 variabili in un modello.

Nell'esempio seguente vengono illustrate le opzioni disponibili per la definizione di 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 copy per creare diversi valori per una variabile, vedere Iterazione variabile.

Per esempi di come usare le variabili, vedere Variabili nel modello di Resource Manager.

In Bicep vedere variabili.

Funzioni

Nel modello è possibile creare funzioni personalizzate. Tali funzioni sono disponibili per usare il modello. In genere, si definiscono espressioni complesse che non si desidera 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 si usa la funzione parameters all'interno di una funzione definita dall'utente, si è limitati ai parametri per tale 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 Obbligatoria 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, usare "[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.
tipo di output Tipo del valore di output. I valori di output supportano gli stessi tipi dei parametri di input della funzione.
output-value Espressione del linguaggio del modello valutata e restituita dalla funzione .

Per esempi di come usare funzioni personalizzate, vedere Funzioni definite dall'utente nel modello di Resource Manager.

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

Risorse

resources Nella sezione vengono definite le risorse distribuite o aggiornate. Sono limitate a 800 risorse in un 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 Obbligatoria Descrizione
condizione No Valore booleano che indica se viene 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. Vedere condizione.
tipo 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, vedere informazioni di riferimento sul 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 si crea un nuovo modello, impostare questo valore sulla versione più recente della risorsa che si sta distribuendo. Se il modello funziona in base alle esigenze, continuare a usare la stessa versione dell'API. Continuando a usare la stessa versione dell'API, si riduce al minimo il rischio di una nuova versione dell'API che modifica il funzionamento del modello. È consigliabile aggiornare la versione dell'API solo quando si vuole usare una nuova funzionalità introdotta in una versione successiva. Per determinare i valori disponibili, vedere informazioni di riferimento sul modello.
name Nome della risorsa. Il nome deve rispettare le restrizioni dei componenti URI definite dallo standard RFC3986. I servizi di Azure che espongono il nome della risorsa a parti esterne convalidano il nome per assicurarsi che non si tratti di un tentativo di spoofing di un'altra identità. 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 Varia 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. Vedere Impostare la posizione delle risorse.
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, vedere Definire l'ordine di distribuzione delle risorse nei modelli di Resource Manager.
tags No Tag associati alla risorsa. Applicare i tag per organizzare in modo logico le risorse nella sottoscrizione.
identity No Alcune risorse supportano le identità gestite per le risorse di Azure. Queste risorse hanno un oggetto identity a livello radice della dichiarazione di risorsa. È possibile impostare se l'identità è assegnata dall'utente o assegnata dal sistema. Per le identità assegnate dall'utente, specificare un elenco di ID risorsa per le identità. Impostare la chiave sull'ID risorsa e sul valore su un oggetto vuoto. Per altre informazioni, vedere Configurare le identità gestite per le risorse di Azure in una macchina virtuale di Azure usando 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, è possibile 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. Usarlo quando si specifica un ambito diverso dall'ambito di distribuzione. Vedere Impostazione dell'ambito per le risorse di estensione nei modelli di Resource Manager.
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.
properties 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, vedere informazioni di riferimento sul modello.
resources 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 JSON di ARM, aggiungere languageVersion con la versione 2.0 o versione successiva e modificare la definizione della risorsa 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 vedere risorse.

Output

outputs Nella sezione specificare i valori restituiti dalla distribuzione. In genere, vengono restituiti valori dalle risorse distribuite. Sono limitati a 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 Obbligatoria 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.
tipo Tipo del valore di output. I valori di output supportano gli stessi tipi dei parametri di input del modello. Se si specifica securestring per il tipo di output, il valore non viene visualizzato nella cronologia della distribuzione e non può essere recuperato da un altro modello. Per usare un valore segreto in più modelli, archiviare il segreto in un Key Vault e fare riferimento al segreto nel file di parametri. Per altre informazioni, vedere Usare Azure Key Vault per passare valori di parametro protetti durante la distribuzione.
Valore No Espressione del linguaggio di modello valutata e restituita come valore di output. Specificare il valore o la copia.
copy No Utilizzato per restituire più di un valore per un output. Specificare il valore o la copia. Per altre informazioni, vedere Iterazione di output nei modelli di Resource Manager.

Per esempi di come usare gli output, vedere Output nel modello di Resource Manager.

In Bicep vedere output.

Commenti e metadati

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

Commenti

Per i commenti inline, è possibile usare // o /* ... */. In Visual Studio Code salvare i file di parametro con commenti come tipo di file JSON con commenti (JSONC), altrimenti viene visualizzato un messaggio di errore che indica "Commenti non consentiti in JSON".

Nota

Quando si usa l'interfaccia della riga di comando di Azure per distribuire modelli con commenti, usare la versione 2.3.0 o successiva e specificare 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 Azure Resource Manager Tools può rilevare automaticamente un modello di Resource Manager e modificare la modalità del linguaggio. Se viene visualizzato il modello di Azure Resource Manager nell'angolo inferiore destro di Visual Studio Code, è possibile usare i commenti inline. In questo modo i commenti inline non verranno più contrassegnati come non validi.

Screenshot di Visual Studio Code in modalità modello di Azure Resource Manager.

In Bicep vedere commenti.

Metadati

È 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, aggiungere un metadata oggetto con una description proprietà.

"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 che mostra il suggerimento del parametro in portale di Azure.

Per resources, aggiungere un elemento o un metadatacomments oggetto. Nell'esempio seguente vengono illustrati sia un comments elemento che un metadata oggetto .

"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, aggiungere un metadata oggetto al valore di output.

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

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

Stringhe a più righe

È possibile suddividere una stringa in più righe. Ad esempio, vedere la location proprietà e uno dei commenti nell'esempio JSON seguente.

Nota

Per distribuire modelli con stringhe a più righe, usare Azure PowerShell o l'interfaccia della riga di comando di Azure. Per l'interfaccia della riga di comando usare la versione 2.3.0 o successiva e specificare l'opzione --handle-extended-json-format .

Le stringhe a più righe non sono supportate quando si distribuisce 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 vedere stringhe a più righe.

languageVersion 2.0

Nota

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

Nota

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

Per usare languageVersion 2.0, aggiungere "languageVersion": "2.0" al 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 apportati con languageVersion 2.0:

Passaggi successivi