Che cosa sono i modelli di Azure Resource Manager?

Passando al cloud, molti team hanno adottato la metodologia di sviluppo Agile. Questi team devono agire rapidamente. Devono distribuire ripetutamente le loro soluzioni nel cloud e sapere che la loro infrastruttura è in uno stato affidabile. Poiché l'infrastruttura è diventata parte del processo iterativo, la divisione tra operazioni e sviluppo è scomparsa. Teams deve gestire l'infrastruttura e il codice dell'applicazione tramite un processo unificato.

Per soddisfare queste sfide, puoi automatizzare le distribuzioni e usare le procedure dell'infrastruttura come codice. Nel codice si definisce l'infrastruttura che deve essere distribuita. Il codice dell'infrastruttura diventa parte del progetto. Analogamente al codice dell'applicazione, il codice dell'infrastruttura viene archiviato in un repository di origine e ne viene creata la versione. Chiunque nel team può eseguire il codice e distribuire ambienti simili.

Per implementare l'infrastruttura come codice per le soluzioni di Azure, usare modelli di Azure Resource Manager (modelli di ARM). Un modello è un file JSON (JavaScript Object Notation) che definisce l'infrastruttura e la configurazione del progetto. Il modello usa una sintassi dichiarativa che consente di indicare ciò che si intende distribuire senza dover scrivere la sequenza dei comandi di programmazione per crearlo. Nel modello si specificano le risorse da distribuire e le proprietà per tali risorse.

Suggerimento

È stato introdotto un nuovo linguaggio denominato Bicep che offre le stesse funzionalità dei modelli arm, ma con una sintassi più semplice da usare. Ogni file Bicep viene convertito automaticamente in un modello di Resource Manager durante la distribuzione. Se si considera l'infrastruttura come opzioni di codice, è consigliabile esaminare Bicep. Per altre informazioni, vedere Che cos'è Bicep?.

Per informazioni su come iniziare a usare i modelli di Resource Manager, vedere il video seguente.

Perché scegliere i modelli di Resource Manager?

Se si sta tentando di decidere tra l'uso di modelli di Resource Manager e uno dell'altra infrastruttura come servizi di codice, considerare i vantaggi seguenti dell'uso dei modelli:

  • Sintassi dichiarativa: i modelli di ARM consentono di creare e distribuire un'intera infrastruttura di Azure in modo dichiarativo. Ad esempio, è possibile distribuire non solo macchine virtuali, ma anche l'infrastruttura di rete, i sistemi di archiviazione e qualsiasi altra risorsa necessaria.

  • Risultati ripetibili: è possibile distribuire ripetutamente l'infrastruttura nel corso del ciclo di vita dello sviluppo garantendo al contempo che le risorse vengano distribuite in uno stato coerente. I modelli sono idempotenti, il che significa che è possibile distribuire lo stesso modello più volte e ottenere gli stessi tipi di risorse nel medesimo stato. È possibile sviluppare un modello che rappresenta lo stato desiderato, anziché sviluppare molti modelli separati per rappresentare gli aggiornamenti.

  • Orchestrazione: non è necessario preoccuparsi delle complessità delle operazioni di ordinamento. Resource Manager gestisce la distribuzione delle risorse interdipendenti, in modo che vengano create nell'ordine corretto. Quando possibile, Resource Manager distribuisce le risorse in parallelo, in modo che le distribuzioni terminino più velocemente rispetto alle distribuzioni seriali. Il modello si distribuisce tramite un comando anziché tramite più comandi imperativi.

    Confronto tra distribuzioni di modelli

  • File modulari: se le distribuzioni diventano più complesse, è possibile suddividere i modelli in componenti più piccoli riutilizzabili e collegarli in fase di distribuzione. È anche possibile annidare un modello all'interno di un altro modello.

  • Creare qualsiasi risorsa di Azure: è possibile usare immediatamente nuovi servizi e funzionalità di Azure nei modelli. Non appena un provider di risorse introduce nuove risorse, è possibile distribuire tali risorse tramite modelli. Non è necessario attendere l'aggiornamento di strumenti o moduli prima di usare i nuovi servizi.

  • Estendibilità: con gli script di distribuzione è possibile aggiungere script di PowerShell o Bash ai modelli. Gli script di distribuzione estendono la possibilità di configurare le risorse durante la distribuzione. Uno script può essere incluso nel modello oppure archiviato in un'origine esterna e a cui viene fatto riferimento nel modello. Gli script di distribuzione consentono di completare la configurazione dell'ambiente end-to-end in un singolo modello di ARM.

  • Test: è possibile assicurarsi che il modello segua le linee guida consigliate testandolo con il kit di strumenti del modello arm (arm-ttk). Questo kit di test è uno script di PowerShell che è possibile scaricare da GitHub. Il kit di strumenti semplifica lo sviluppo di competenze usando il linguaggio del modello.

  • Modifiche in anteprima: è possibile usare l'operazione di simulazione per ottenere un'anteprima delle modifiche prima di distribuire il modello. Con la simulazione, vengono visualizzate le risorse che verranno create, aggiornate o eliminate e tutte le proprietà delle risorse che verranno modificate. L'operazione di simulazione controlla lo stato corrente dell'ambiente ed elimina la necessità di gestire lo stato.

  • Convalida predefinita: il modello viene distribuito solo dopo il superamento della convalida. Resource Manager controlla il modello prima di avviare la distribuzione per assicurarsi che la distribuzione abbia esito positivo. La distribuzione è meno probabile che si arresti in uno stato di metà.

  • Distribuzioni rilevate: nella portale di Azure è possibile esaminare la cronologia della distribuzione e ottenere informazioni sulla distribuzione del modello. È possibile visualizzare il modello distribuito, i valori dei parametri passati e tutti i valori di output. Altre infrastrutture come servizi di codice non vengono rilevate tramite il portale.

    Cronologia di distribuzione

  • Criteri come codice: Criteri di Azure è un criterio come framework di codice per automatizzare la governance. Se si usano criteri di Azure, la correzione dei criteri viene eseguita sulle risorse non conformi quando vengono distribuite tramite modelli.

  • Progetti di distribuzione: è possibile sfruttare i vantaggi offerti da Microsoft per soddisfare gli standard normativi e di conformità. Questi progetti includono modelli predefiniti per varie architetture.

  • Integrazione CI/CD: è possibile integrare modelli in strumenti di integrazione continua e distribuzione continua (CI/CD), che consentono di automatizzare le pipeline di versione per aggiornamenti rapidi e affidabili delle applicazioni e dell'infrastruttura. Usando Azure DevOps e Resource Manager'attività modello, è possibile usare Azure Pipelines per compilare e distribuire continuamente progetti modello di Resource Manager. Per altre informazioni, vedere Progetto di Visual Studio con pipeline e Esercitazione: Integrazione continua dei modelli di Azure Resource Manager con Azure Pipelines.

  • Codice esportabile: è possibile ottenere un modello per un gruppo di risorse esistente esportando lo stato corrente del gruppo di risorse o visualizzando il modello usato per una distribuzione specifica. La visualizzazione del modello esportato è un modo utile per ottenere informazioni sulla sintassi del modello.

  • Strumenti di creazione: è possibile creare modelli con Visual Studio Code e l'estensione dello strumento modello. Si ottiene intellisense, evidenziazione della sintassi, guida in linea e molte altre funzioni del linguaggio. Oltre a Visual Studio Code, è anche possibile usare Visual Studio.

File modello

All'interno del modello è possibile scrivere espressioni modello che estendono le funzionalità di JSON. Queste espressioni usano le funzioni fornite da Resource Manager.

Il modello include le sezioni seguenti:

  • Parametri: specificare valori durante la distribuzione che consentano di usare lo stesso modello anche in altri ambienti.

  • Variabili: definire valori riutilizzati nei modelli. Possono essere costruiti dai valori dei parametri.

  • Funzioni definite dall'utente: creare funzioni personalizzate che semplifichino il modello.

  • Risorse: specificare le risorse da distribuire.

  • Output: restituire i valori dalle risorse distribuite.

Processo di distribuzione dei modelli

Quando si distribuisce un modello, Resource Manager lo converte in operazioni API REST. Ad esempio, quando Resource Manager riceve un modello con la definizione di risorsa seguente:

"resources": [
  {
    "type": "Microsoft.Storage/storageAccounts",
    "apiVersion": "2019-04-01",
    "name": "mystorageaccount",
    "location": "westus",
    "sku": {
      "name": "Standard_LRS"
    },
    "kind": "StorageV2",
    "properties": {}
  }
]

Converte la definizione nell'operazione dell'API REST seguente, che viene inviata al provider di risorse Microsoft.Storage:

PUT
https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/mystorageaccount?api-version=2019-04-01
REQUEST BODY
{
  "location": "westus",
  "sku": {
    "name": "Standard_LRS"
  },
  "kind": "StorageV2",
  "properties": {}
}

Si noti che l'oggetto apiVersion impostato nel modello per la risorsa viene usato come versione dell'API per l'operazione REST. È possibile distribuire ripetutamente il modello con la certezza che continuerà a funzionare. Usando la stessa versione dell'API, non è necessario preoccuparsi delle modifiche che causano un'interruzione che potrebbero essere introdotte nelle versioni successive.

Per distribuire un modello, usare una delle opzioni seguenti:

Progettazione di modelli

La modalità di definizione dei modelli e dei gruppi di risorse è una scelta personale e dipende dalla modalità di gestione della soluzione preferita. Ad esempio, è possibile distribuire l'applicazione a tre livelli tramite un unico modello in un singolo gruppo di risorse.

modello a tre livelli

Non è tuttavia necessario definire l'intera infrastruttura in un unico modello. Spesso, è consigliabile dividere i requisiti di distribuzione in un set di modelli specifici mirati, in base allo scopo. È anche possibile riusare i modelli per altre soluzioni. Per distribuire una particolare soluzione, si crea un modello principale che collega tutti i modelli necessari. L'immagine seguente illustra come distribuire una soluzione a tre livelli tramite un modello padre che include tre modelli annidati.

modello a tre livelli annidati

Se si immaginano livelli con cicli di vita separati, è possibile distribuire i tre livelli a gruppi di risorse separati. Si noti che le risorse possono comunque essere collegate alle risorse in altri gruppi.

modello a livelli

Per informazioni sui modelli annidati, vedere Uso di modelli collegati con Azure Resource Manager.

Condividere modelli

Dopo aver creato il modello, è possibile condividerlo con altri utenti dell'organizzazione. Le specifiche del modello consentono di archiviare un modello come tipo di risorsa. È possibile usare il controllo degli accessi in base al ruolo per gestire l'accesso alla specifica del modello. Gli utenti con accesso in lettura alla specifica del modello possono distribuirlo, ma non modificare il modello.

Questo approccio consente di condividere in modo sicuro i modelli che soddisfano gli standard dell'organizzazione.

Passaggi successivi