Bicep: l’alternativa a JSON per la distribuzione degli Azure Resource Manager Templates in Microsoft Azure

Uno dei vantaggi dei template di Azure è quello di poter creare tutte le risorse necessarie alla creazione di una soluzione, anche complessa, semplicemente utilizzando un clic! Ne avevo già parlato tempo fa nella guida Azure Resource Manager templates – Deployment con un clic! – ICT Power.

Sul sito web GitHub, all’indirizzo https://github.com/Azure/azure-quickstart-templates trovate centinaia di template in formato JavaScript Object Notation (JSON), che vi permettono di creare macchine virtuali, reti virtuali, applicazioni web, database SQL e di realizzare soluzioni e applicazioni già pronte all’uso. L’Infrastructure as code è infatti il processo di provisioning automatizzato, consistente e ripetibile delle risorse necessarie alla propria infrastruttura (reti virtuali, macchine virtuali, applicazioni, storage, ecc.).

Per poterlo fare basta dichiarare nel template di Azure quali risorse volete utilizzare e successivamente fornire i parametri necessari alla configurazione della soluzione scelta.

Infatti, il codice degli ARM template è di tipo dichiarativo, cioè voi chiedete quali risorse creare e poi ci pensa la parte di backend a crearle, nel giusto ordine. Il codice imperativo invece esegue una sequenza di comandi, in un ordine predeterminato.

Figura 1: Infrastructure as code – Utilizzo degli ARM templates

Da pochissimo giorni Microsoft ha rilasciato Bicep, un linguaggio specifico di dominio (Domain Specific Language) che è stato progettato per uno specifico scenario o “dominio” e che usa la sintassi dichiarativa per distribuire le risorse di Azure e che rispetto a JSON offre il vantaggio di essere più conciso.

La sintassi JSON per creare un modello di Azure Resource Manager (ARM) può essere dettagliata e richiedere espressioni complesse. La sintassi di Bicep riduce tale complessità e sono necessarie meno righe di codice per ottenere lo stesso risultato finale.

È possibile integrare Bicep con gli strumenti di sviluppo. Alla pagina Configurare gli ambienti di sviluppo e distribuzione di Bicep – Azure Resource Manager | Microsoft Docs trovate tutte le indicazioni.

Bicep è già disponibile in Azure Cloud Shell (sia in Bash che in PowerShell). Potete verificarne la versione con il comando bicep –version (ci sono due trattini).

Figura 2: Verifica della versione di Bicep in Azure Cloud Shell

Come funziona

Quando volete creare una serie di risorse in Azure, vi basterà inviare il template Bicep ad Azure Resource Manager, che lo convertirà in un template JSON (che è ancora obbligatorio) e che creerà le risorse dichiarate. La conversione viene effettuata automaticamente quando inviate il template o può essere fatta manualmente.

Figura 3: Funzionamento di un deployment effettuato con template Bicep

JSON e Bicep a confronto

Come già sottolineato, Bicep offre una sintassi più semplice da utilizzare quando si scrive un ARM Template. Nella figura è possibile vedere a sinistra un template Bicep e a destra un template JSON che creano la stessa risorsa in Azure!

Figura 4: JSON e Bicep a confronto

Decompilare ARM templates scritte in JSON in Bicep

È possibile decompilare e quindi convertire i modelli ARM in Bicep. Per farlo basta usare semplicemente il comando

NOTA: La decompilazione tenta di convertire il file, ma non esiste alcun mapping garantito da JSON del modello ARM a Bicep. Potrebbe essere necessario correggere gli avvisi e gli errori nel file Bicep generato.

Per maggiori informazioni vi rimando alla lettura della guida Decompilare il file JSON del modello arm in Bicep – Azure Resource Manager | Microsoft Docs

Visualizzazione affiancata

Bicep Playground consente di visualizzare i file JSON e Bicep equivalenti affiancati. È possibile selezionare un modello di esempio per visualizzare entrambe le versioni. Cliccando su Decompile potete caricare il vostro modello JSON e visualizzare il file Bicep equivalente. Nella foto sotto è mostrato un mio template ARM scritto in JSON affiancato al Bicep decompiltato. Si noti il numero ridotto di righe nel file Bicep a sinistra.

Figura 5: Visualizzazione affiancata dello stesso template ARM in formato Bicep e JSON

Esempi sull’utilizzo di Bicep possono essere recuperati anche dal repository ufficiale bicep/docs/examples at main · Azure/bicep · GitHub

Esempio di utilizzo

A titolo di esempio ho creato un piccolo script per utilizzare il template Bicep ed effettuare il deployment dalla mia postazione di lavoro:

  1. Per prima cosa assicuratevi di aver installato il modulo AZ di PowerShell con il comando Install-Module AZ
  2. Successivamente installate Bicep con l’apposito installer. Maggiori informazioni sono disponibili alla pagina bicep/installing.md at main · Azure/bicep · GitHub
  3. Procedete all’esecuzione del vostro script di deployment

NOTA: Ho eseguito queste operazioni sul mio PC. Utilizzate Azure Cloud Shell per evitare di installare i moduli

Qui di seguito i comandi utilizzati:

Figura 6: Script che utilizza il template Bicep

Figura 7: Risorse create dal template Bicep

Se volete utilizzare Azure Cloud Shell vi basterà prima caricare il file .bicep nello storage account collegato alla vostra Shell e poi lanciare il deployment, come mostrato nella figura sotto:

Figura 8: Deployment del template Bicep utilizzando la Azure Cloud Shell

Conclusioni

Bicep non è stato pensato per poter essere utilizzato come linguaggio per scrivere applicazioni, ma viene utilizzato unicamente per creare gli Azure Resource Manager templates. Il suo obiettivo è la semplicità di utilizzo, sintassi semplificata e di essere facile da imparare, senza dover avere conoscenze pregresse di sviluppo software.

Per istruzioni dettagliate sull’uso di Bicep per distribuire l’infrastruttura in Azure, Microsoft Learn offre diversi moduli di apprendimento. Visitate la pagina Individuare Bicep in Microsoft Learn – Azure Resource Manager | Microsoft Docs

Qui di seguito il video di presentazione del Project Bicep alla Conferenza Microsoft Ignite del 2 marzo 2021: