Esplorare la struttura dei modelli di Azure Resource Manager

Completato

In questa attività verranno fornite informazioni sull'uso dei modelli di Microsoft Azure Resource Manager per implementare l'infrastruttura come codice. Si esamineranno le sezioni di un modello di Azure Resource Manager, si scoprirà come distribuire il modello di Azure Resource Manager in Azure e si analizzerà in modo approfondito la sezione resources del modello di Azure Resource Manager.

Che cos'è l'infrastruttura come codice?

L'infrastruttura come codice consente di descrivere, tramite il codice, l'infrastruttura necessaria per l'applicazione.

Con l'infrastruttura come codice, è possibile gestire sia il codice dell'applicazione che tutto quello che serve per distribuire l'applicazione in un repository di codice centrale. I vantaggi dell'infrastruttura come codice sono i seguenti:

  • Configurazioni coerenti
  • Scalabilità migliorata
  • Distribuzioni più veloci
  • Migliore tracciabilità

Questo video illustra l'infrastruttura come codice:

Che cos'è un modello di Azure Resource Manager?

I modelli di Resource Manager sono file JavaScript Object Notation (JSON) che definiscono l'infrastruttura e la configurazione per la distribuzione. Il modello usa una sintassi dichiarativa. La sintassi dichiarativa è un modo per creare la struttura e gli elementi che delineano l'aspetto delle risorse senza descriverne il flusso di controllo. La sintassi dichiarativa è diversa dalla sintassi imperativa, che usa comandi che devono essere eseguiti dal computer. Lo scripting imperativo è incentrato sulla necessità di specificare ogni passaggio nell'ambito della distribuzione delle risorse.

I modelli di Azure Resource Manager consentono di dichiarare gli elementi che si intende distribuire senza dover scrivere la sequenza dei comandi di programmazione per crearli. In un modello di Azure Resource Manager si specificano le risorse e le proprietà per tali risorse. Azure Resource Manager usa quindi queste informazioni per distribuire le risorse in modo organizzato e coerente.

Vantaggi dell'uso dei modelli di Resource Manager

I modelli di Azure Resource Manager consentono di automatizzare le distribuzioni e di adottare l'infrastruttura come codice (IaC). Il codice del modello diventa parte dell'infrastruttura e dei progetti di sviluppo. Proprio come il codice dell'applicazione, è possibile archiviare i file IaC in un repository di origine e sottoporli al controllo delle versioni.

I modelli di Resource Manager sono idempotenti, il che significa che è possibile distribuire lo stesso modello più volte e ottenere gli stessi tipi di risorse nel medesimo stato.

Resource Manager gestisce la distribuzione delle risorse in modo che vengano create nell'ordine corretto. Quando possibile, le risorse vengono create anche in parallelo, in modo che le distribuzioni dei modelli di Azure Resource Manager vengano completate più rapidamente rispetto alle distribuzioni con script.

Diagram showing a mapping of the template processing procedure. There's only one call to process a template as opposed to several calls to process scripts.

Resource Manager include anche la convalida incorporata. Controlla il modello prima di avviare la distribuzione per assicurarsi che abbia esito positivo.

Se le distribuzioni diventano più complesse, è possibile suddividere i modelli di Azure Resource Manager in componenti più piccoli e riutilizzabili. È poi possibile collegare questi modelli più piccoli in fase di distribuzione. È anche possibile annidare i modelli all'interno di altri modelli.

Nel portale di Azure è possibile esaminare la cronologia di distribuzione e ottenere informazioni sullo stato di una distribuzione. Il portale visualizza i valori per tutti i parametri e gli output.

È inoltre possibile integrare i modelli di Resource Manager in strumenti di integrazione continua e distribuzione continua (CI/CD) come Azure Pipelines, che consentono di automatizzare le pipeline di rilascio per aggiornamenti rapidi e affidabili dell'infrastruttura e delle applicazioni. Usando le attività di Azure DevOps e dei modelli di Resource Manager, è possibile compilare e distribuire progetti in modo continuo.

Struttura del file modello di Resource Manager

Quando si scrive un modello di Resource Manager, è necessario conoscere tutti i componenti che lo costituiscono e il compito che assolvono. I file modello di ARM sono costituiti dagli elementi seguenti:

Elemento Descrizione
schema sezione obbligatoria che definisce il percorso del file di schema JSON che descrive la struttura dei dati JSON. Il numero di versione usato dipende dall'ambito della distribuzione e dall'editor JSON.
contentVersion sezione obbligatoria che definisce la versione del modello, ad esempio 1.0.0.0. È possibile usare questo valore per documentare modifiche significative apportate al modello in modo da essere certi di distribuire quello corretto.
apiProfile sezione facoltativa che definisce una raccolta di versioni delle API per i tipi di risorse. È possibile usare questo valore per evitare di dover specificare le versioni delle API per ogni risorsa nel modello.
parameters sezione facoltativa in cui è possibile definire i valori forniti durante la distribuzione. Questi valori possono essere forniti da un file di parametri, dai parametri della riga di comando o nel portale di Azure.
variables sezione facoltativa in cui è possibile definire i valori usati per semplificare le espressioni del linguaggio del modello.
functions sezione facoltativa in cui è possibile definire le funzioni definite dall'utente disponibili all'interno del modello. Le funzioni definite dall'utente possono semplificare il modello quando le espressioni complesse vengono usate più volte nel modello.
resources sezione obbligatoria che definisce gli elementi effettivi che si desidera distribuire o aggiornare, in un gruppo di risorse o una sottoscrizione.
output sezione facoltativa in cui è possibile specificare i valori che verranno restituiti alla fine della distribuzione.

Distribuire un modello di Azure Resource Manager in Azure

È possibile distribuire un modello di Azure Resource Manager in Azure in uno dei modi seguenti:

  • Distribuire un modello locale
  • Distribuire un modello collegato
  • Eseguire la distribuzione in una pipeline di distribuzione continua

Questo modulo è incentrato sulla distribuzione di un modello di Azure Resource Manager locale. Nei moduli Learn futuri si apprenderà come distribuire un'infrastruttura più complessa e come integrarla con Azure Pipelines.

Per distribuire un modello locale è necessario che Azure PowerShell o l'interfaccia della riga di comando di Azure siano installati in locale.

Per prima cosa, accedere ad Azure usando l'interfaccia della riga di comando di Azure o Azure PowerShell.

Definire quindi il gruppo di risorse. È possibile usare un gruppo di risorse già definito o crearne uno nuovo con il comando seguente. È possibile ottenere i valori delle località disponibili da: az account list-locations (interfaccia della riga di comando) o Get-AzLocation (PowerShell). È possibile configurare la posizione predefinito con az configure --defaults location=<location>.

az group create \
  --name {name of your resource group} \
  --location "{location}"

Per avviare la distribuzione del modello a livello del gruppo di risorse, usare il comando dell'interfaccia della riga di comando di Azure az deployment group create oppure il comando di Azure PowerShell New-AzResourceGroupDeployment.

Suggerimento

La differenza tra az deployment group create e az group deployment create è che az group deployment create è un comando precedente da deprecare e verrà sostituito da az deployment group create. È quindi consigliabile usare az deployment group create per distribuire le risorse nell'ambito del gruppo di risorse.

Entrambi i comandi richiedono il gruppo di risorse, l'area e il nome per la distribuzione per poterli identificare facilmente nella cronologia di distribuzione. Per praticità, gli esercizi creano una variabile che archivia il percorso del file modello. Questa variabile semplifica l'esecuzione dei comandi di distribuzione perché non è necessario digitare nuovamente il percorso ogni volta che si esegue la distribuzione. Ecco un esempio:

Per eseguire questo comando di distribuzione, è necessario avere la versione più recente dell'interfaccia della riga di comando di Azure.

templateFile="{provide-the-path-to-the-template-file}"
az deployment group create \
  --name blanktemplate \
  --resource-group myResourceGroup \
  --template-file $templateFile

Usare i modelli collegati per distribuire soluzioni complesse. È possibile suddividere un modello in molti modelli e distribuirli tramite un modello principale. Quando viene distribuito il modello principale, viene attivata la distribuzione di quello collegato. È possibile archiviare e proteggere il modello collegato usando un token SAS.

Una pipeline CI/CD consente di automatizzare la creazione e la distribuzione di progetti di sviluppo, inclusi i progetti di modello di Azure Resource Manager. Le due pipeline più comuni usate per la distribuzione dei modelli sono Azure Pipelines e GitHub Actions.

Altre informazioni su questi due tipi di distribuzione sono disponibili in altri moduli.

Aggiungere risorse al modello

Per aggiungere una risorsa al modello, occorre conoscere il provider di risorse e i relativi tipi di risorse. La sintassi per questa combinazione è nel formato {provider-risorse}/{tipo-risorsa}. Ad esempio, per aggiungere una risorsa dell'account di archiviazione al modello, sarà necessario il provider di risorse Microsoft.Storage. Uno dei tipi per questo provider è storageAccount. Quindi, il tipo di risorsa verrà visualizzato come Microsoft.Storage/storageAccounts. Per trovare i provider necessari, è possibile usare un elenco di provider di risorse per i servizi di Azure.

Dopo aver identificato il provider e il tipo di risorsa, è necessario comprendere le proprietà di ogni tipo di risorsa da usare. Per conoscere i dettagli, vedere Definire le risorse nei modelli di Azure Resource Manager. Vedere l'elenco nella colonna a sinistra per trovare la risorsa. Si noti che le proprietà sono ordinate in base alla versione dell'API.

Screenshot of a Microsoft documentation page showing the storage account documentation selected.

Di seguito è riportato un esempio di alcune delle proprietà elencate dalla pagina degli account di archiviazione:

Screenshot of a Microsoft documentation page showing some of the storage account properties.

Per l'esempio di archiviazione in uso, il modello potrebbe avere l'aspetto seguente:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.1",
  "apiProfile": "",
  "parameters": {},
  "variables": {},
  "functions": [],
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2019-06-01",
      "name": "learntemplatestorage123",
      "location": "westus",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "StorageV2",
      "properties": {
        "supportsHttpsTrafficOnly": true
      }
    }
  ],
  "outputs": {}
}