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. Man mano che l'infrastruttura è diventata parte del processo iterativo, la divisione tra operazioni e sviluppo è scomparsa. I team devono gestire l'infrastruttura e il codice dell'applicazione tramite un processo unificato.

Per affrontare queste sfide, è possibile automatizzare le distribuzioni e usare la procedura dell'infrastruttura come codice. Nel codice si definisce l'infrastruttura che deve essere distribuita. Il codice dell'infrastruttura diventa parte del progetto. Proprio come il codice dell'applicazione, il codice dell'infrastruttura viene archiviato in un repository di origine e ne viene creata una 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 di ARM, ma con una sintassi più semplice da usare. Ogni file Bicep viene convertito automaticamente in un modello di ARM durante la distribuzione. Se si considera l'infrastruttura come opzioni di codice, raccomandiamo di dare un’occhiata Bicep. Per ulteriori informazioni, vedere Che cos'è Bicep?.

Per informazioni su come iniziare a usare i modelli di ARM, guardare il video seguente.

Perché scegliere i modelli di ARM?

Se vuoi scegliere tra l'uso di modelli di ARM e un'altra infrastruttura come servizi di codice, considera i seguenti vantaggi 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.

    Diagram that shows the difference between imperative and declarative deployment.

  • 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 che gli strumenti o i moduli vengano aggiornati 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 o archiviato in un'origine esterna e referenziato nel modello. Gli script di distribuzione consentono di completare la configurazione dell'ambiente end-to-end in un singolo modello di ARM.

  • Test: puoi assicurarti che il modello segua le linee guida consigliate testandolo con il kit di strumenti del modello di 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 con il linguaggio del modello.

  • Anteprima delle modifiche: è 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 le eventuali 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 integrata: il modello viene distribuito solo dopo aver superato la convalida. Resource Manager controlla il modello prima di avviare la distribuzione per assicurarsi che la distribuzione vada a buon fine. È meno probabile che la distribuzione si arresti in fase di completamento.

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

    Screenshot of the Azure portal showing deployment history.

  • Criteri come codice: I criteri di Azure sono criteri come framework di codice per automatizzare la governance. Se si usano i criteri di Azure, la correzione dei criteri viene eseguita su risorse non conformi quando vengono distribuite tramite modelli.

  • Progetti di distribuzione: è possibile sfruttare i vantaggi dei Blueprints (Progetti) 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 possono automatizzare le pipeline di versione per aggiornamenti rapidi e affidabili dell'applicazione e dell'infrastruttura. Usando Azure DevOps e l'attività del modello di Resource Manager, è possibile usare Azure Pipelines per creare e distribuire in modo continuo progetti di modelli di ARM. Per ulteriori informazioni, vedere Progetto VS con pipeline e Esercitazione: Integrazione continua dei modelli di Azure Resource Manager con Azure Pipelines.

  • Codice esportabile: È possibile anche recuperare un modello per un gruppo di risorse esistente esportando lo stato corrente del gruppo di risorse oppure visualizzando il modello usato per una distribuzione specifica. Per conoscere la sintassi del modello è molto utile visualizzare il modello esportato.

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

File del modello

All'interno del modello è possibile scrivere le espressioni del 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": "2022-09-01",
    "name": "mystorageaccount",
    "location": "centralus",
    "sku": {
      "name": "Standard_LRS"
    },
    "kind": "StorageV2"
  },
]

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=2022-09-01
REQUEST BODY
{
  "location": "centralus",
  "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

È possibile definire i modelli e i gruppi di risorse, nonché la modalità di gestione della soluzione in modo completamente autonomo. Ad esempio, è possibile distribuire l'applicazione a tre livelli tramite un unico modello in un singolo gruppo di risorse.

Diagram that shows a three-tier application deployment using a single template.

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 soluzione specifica è necessario creare un modello principale che colleghi tutti i modelli necessari. L'immagine seguente mostra come distribuire una soluzione a tre livelli tramite un modello padre che include tre modelli annidati.

Diagram that shows a three-tier application deployment using nested templates.

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

Diagram that shows a three-tier application deployment with separate resource groups.

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