Per ottenere la scalabilità, i team devOps cercano sempre modi per distribuire rapidamente il codice con un processo attendibile e ripetibile. Quando si tratta del cloud e dell'infrastruttura, questo processo viene sempre più eseguito con l'infrastruttura distribuita come codice (IaC). Gli strumenti IaC variano dagli strumenti per utilizzo generico agli strumenti destinati a ambienti specifici. Terraform è un esempio del precedente, mentre Bicep è progettato per gestire le attività correlate ad Azure.
In questo articolo vengono confrontate nove funzionalità di infrastruttura e integrazione di Bicep e Terraform. La comprensione di queste differenze consente di decidere quale strumento supporta meglio l'infrastruttura e i processi.
Stato e back-end
Sia Terraform che Bicep sono la configurazione dello stato desiderata (DSC) che semplifica la gestione dell'infrastruttura IT e di sviluppo come codice. Terraform archivia lo stato relativo all'infrastruttura gestita e alla configurazione. Terraform usa queste informazioni per eseguire il mapping delle risorse reali alla configurazione, tenere traccia dei metadati e migliorare le prestazioni delle infrastrutture di grandi dimensioni. Lo stato viene archiviato in un file locale denominato terraform.tfstate
, ma può anche essere archiviato in modalità remota. È fondamentale eseguire il backup e proteggere i file di stato. Come Terraform, Bicep è dichiarativo e alla ricerca di obiettivi. Tuttavia, Bicep non archivia lo stato. Bicep si basa invece sulla distribuzione incrementale.
Destinazioni dell'infrastruttura
Quando si confronta Bicep con Terraform per la gestione dell'infrastruttura cloud, è importante considerare l'ambiente cloud di destinazione:
- Solo Azure
- Più cloud ibridi o multi-cloud
Bicep è specifico di Azure e non è progettato per l'uso con altri servizi cloud.
Se l'obiettivo è automatizzare le distribuzioni in uno degli ambienti seguenti, Terraform è probabilmente l'opzione migliore:
- Ambienti di virtualizzazione
- Scenari multicloud, ad esempio Azure e altri cloud
- Carichi di lavoro locali
Terraform interagisce con altri provider di servizi cloud o API usando plug-in denominati provider. Esistono diversi provider di Azure Terraform che consentono la gestione dell'infrastruttura di Azure. Quando si codifica una configurazione terraform, specificare i provider necessari in uso. Quando si esegue terraform init, il provider specificato viene installato e utilizzabile dal codice.
Gli strumenti dell'interfaccia della riga di comando svolgono un ruolo chiave nell'orchestrazione tramite l'implementazione e la gestione della tecnologia di automazione. Sia Bicep che Terraform offrono strumenti dell'interfaccia della riga di comando.
Bicep si integra con l'interfaccia della riga di comando di Azure, consentendo agli sviluppatori di usare az
comandi come:
L'interfaccia della riga di comando di Terraform consente di eseguire attività come convalidare e formattare il codice Terraform e creare e applicare un piano di esecuzione.
Bicep offre anche una funzionalità che semplifica l'integrazione di Bicep con Azure Pipelines. È disponibile una funzionalità simile per Terraform, ma è necessario scaricare e installare l'estensione Azure Pipelines Terraform Tasks per Visual Studio. Dopo l'installazione, è possibile eseguire i comandi dell'interfaccia della riga di comando di Terraform da Azure Pipelines. Inoltre, Terraform e Bicep supportano GitHub Actions per automatizzare compilazioni software, test e distribuzioni.
in lavorazione
Esistono alcune differenze importanti tra Bicep e Terraform in termini di efficienza e ottimizzazioni delle distribuzioni. Con Bicep, l'elaborazione avviene all'interno del lato principale del servizio infrastruttura di Azure. Questa funzionalità offre vantaggi come l'elaborazione preliminare per controllare i criteri o la disponibilità per la distribuzione di più istanze all'interno di un'area. Con Terraform, l'elaborazione viene eseguita all'interno del client Terraform. Di conseguenza, la pre-elaborazione non comporta chiamate ad Azure poiché usa lo stato e l'HCL (HashiCorp Language) per determinare le modifiche necessarie.
Autenticazione
Le funzionalità di autenticazione di Azure variano tra Bicep e Terraform. Con Bicep, viene fornito un token di autorizzazione durante la richiesta di inviare un file Bicep e un modello di Resource Manager. Resource Manager garantisce l'autorizzazione per creare la distribuzione e distribuire le risorse all'interno del modello specificato. Terraform autentica ogni API in base alle credenziali del provider, ad esempio l'interfaccia della riga di comando di Azure, l'entità servizio o le identità gestite per le risorse di Azure. Inoltre, più credenziali del provider possono essere usate in una singola configurazione.
Integrazioni di Azure
È anche consigliabile prendere in considerazione l'uso di funzionalità di Azure, ad esempio Criteri di Azure e il modo in cui ognuno interagisce con altri strumenti e linguaggi. La convalida preliminare di Bicep determina se una risorsa non è conforme a un criterio in modo che abbia esito negativo prima di una distribuzione. Gli sviluppatori possono quindi correggere le risorse con i criteri usando i modelli di Resource Manager forniti. Il modello di Resource Manager può essere usato per creare un'assegnazione di criteri a un'altra risorsa per la correzione automatica. Terraform, tuttavia, non riesce quando viene distribuita una risorsa non consentita a causa dei criteri.
Integrazione del portale
Un vantaggio principale che Bicep ha rispetto a Terraform è la possibilità di automatizzare le azioni del portale. Con Bicep è possibile usare il portale di Azure per esportare i modelli. L'esportazione di un modello consente di comprendere la sintassi e le proprietà che distribuiscono le risorse. È possibile automatizzare le distribuzioni future iniziando con il modello esportato e modificandolo in base alle proprie esigenze. Fino a quando non sono supportati i modelli Terraform, è necessario tradurre manualmente il modello esportato.
Anche se Terraform non fornisce le stesse integrazioni del portale di Bicep, l'infrastruttura di Azure esistente può essere presa nella gestione di Terraform usando Azure Export for Terraform. Esportazione di Azure per Terraform è uno strumento open source di proprietà e gestito da Microsoft su Repository GitHub di Azure/aztfexport.
Modifiche fuori banda
Le modifiche alla configurazione fuori banda vengono apportate a una configurazione del dispositivo al di fuori del contesto dello strumento. Si supponga, ad esempio, di distribuire un set di scalabilità di macchine virtuali usando Bicep o Terraform. Se si modifica il set di scalabilità di macchine virtuali usando il portale, la modifica sarà "fuori banda" e sconosciuta allo strumento IaC.
Se si usa Bicep, le modifiche fuori banda devono essere riconciliate con Bicep e il codice del modello di Resource Manager per evitare che tali modifiche vengano sovrascritte nella distribuzione successiva. Queste modifiche non bloccano la distribuzione.
Se si usa Terraform, è necessario importare le modifiche fuori banda nello stato terraform e aggiornare l'HCL.
Pertanto, se un ambiente comporta frequenti modifiche fuori banda, Bicep è più facile da usare. Quando si usa Terraform, è consigliabile ridurre al minimo le modifiche fuori banda.
Framework cloud
Cloud Adoption Framework (CAF) è una raccolta di documentazione, procedure consigliate e strumenti per accelerare l'adozione del cloud nel percorso cloud. Azure offre servizi nativi per la distribuzione delle zone di destinazione. Bicep semplifica questo processo con un'esperienza del portale basata sui modelli arm e sull'implementazione della zona di destinazione. Terraform usa un modulo Zone di destinazione su scala aziendale per distribuire, gestire e rendere operativo Azure.
Riepilogo
Bicep e Terraform offrono numerose funzionalità di integrazione e infrastruttura semplici da usare. Queste funzionalità semplificano l'implementazione e la gestione della tecnologia di automazione. Quando si decide quale sia la soluzione migliore per l'ambiente, è importante considerare se si esegue la distribuzione in più cloud o se l'infrastruttura è costituita da un ambiente multi-cloud o ibrido. Assicurarsi inoltre di considerare le nove funzionalità descritte in questo articolo per fare la scelta migliore per l'organizzazione.
Le organizzazioni di oggi affrontano sfide dinamiche che richiedono una grande flessibilità e agilità. Gli ambienti cloud pubblici soddisfano queste esigenze tramite l'automazione, in particolare tramite l'infrastruttura come codice (IaC). Due opzioni IaC principali sono Hashicorp Terraform e Bicep. Terraform è uno strumento open source che consente ai professionisti DevOps di gestire i servizi locali e cloud usando codice dichiarativo. Microsoft Bicep usa la sintassi dichiarativa per semplificare la distribuzione delle risorse di Azure.
In questo articolo vengono confrontate diverse funzionalità chiave dell'esperienza utente per identificare analogie e differenze tra Terraform e Bicep.
Sintassi del linguaggio
Bicep e Terraform sono linguaggi specifici del dominio (DSL) facili da usare e risparmiare tempo per gli sviluppatori. Entrambi gli strumenti incorporano parole chiave e concetti simili. Alcuni di questi concetti sono la parametrizzazione, il supporto per progetti multi-file e il supporto per i moduli esterni. Terraform offre tuttavia una libreria più completa di funzionalità predefinite per determinate attività. Decidere tra i due è una questione di preferenza e esperienza. Di seguito sono riportate brevi panoramiche e alcune delle funzionalità descrittive offerte da ogni sintassi del linguaggio.
Bicep è un linguaggio dichiarativo. Di conseguenza, l'ordine in cui gli elementi vengono definiti nel codice non influisce sul modo in cui viene elaborata la distribuzione. L'ambito di destinazione predefinito di Bicep è .resourceGroup
Gli utenti possono usare variabili per incapsulare espressioni complesse e rendere i file Bicep più leggibili. Il concetto di moduli consente il riutilizzo del codice Bicep tra progetti o team.
Terraform è anche un linguaggio dichiarativo che usa il linguaggio HCL (HashiCorp Configuration Language). Lo scopo principale di HCL è dichiarare le risorse. Altre funzionalità del linguaggio servono per rendere più conveniente definire le risorse. E come Bicep, l'ordinamento del codice nei file di configurazione di Terraform non è significativo.
Helper linguistici
Sia Bicep che Terraform forniscono helper del linguaggio per semplificare le attività di codifica. Poiché entrambi sono intuitivi, la scelta dipende in gran parte dalle preferenze e dai requisiti.
Bicep supporta le espressioni per rendere il codice più dinamico e flessibile. In un file Bicep è possibile usare diversi tipi di funzioni. Alcuni di questi tipi di funzione sono funzioni logiche, numeriche e obiezioni. I cicli possono definire più copie di una risorsa, un modulo, una proprietà, una variabile o un output. I cicli consentono di evitare la sintassi ripetuta in un file Bicep.
Terraform offre anche funzioni predefinite chiamate dall'interno delle espressioni per trasformare e combinare valori. Come Bicep, le espressioni Terraform possono includere espressioni complesse, ad esempio riferimenti ai dati esportati dalle risorse e dalla valutazione condizionale. I cicli possono gestire le raccolte e possono produrre più istanze di una risorsa senza la necessità di ripetere il codice.
Moduli
Sia Bicep che Terraform supportano il concetto di moduli. I moduli consentono di creare componenti riutilizzabili dal codice. I moduli svolgono un ruolo chiave nell'infrastruttura di ridimensionamento e mantengono la configurazione pulita. Poiché i moduli incapsulano gruppi di risorse, riducono la quantità di codice da sviluppare per componenti di infrastruttura simili. Anche se i moduli funzionano in modo analogo in Bicep e Terraform, variano in implementazione.
In Bicep un modulo è semplicemente un file Bicep distribuito da un altro file Bicep. I moduli Bicep consentono di migliorare la leggibilità dei file Bicep. Questi moduli sono anche scalabili. Gli utenti possono condividere moduli tra team per evitare la duplicazione del codice e ridurre gli errori. Per altre informazioni sulla definizione di un modulo Bicep, vedere Moduli Bicep.
In Terraform i moduli sono i principali mezzi per creare pacchetti e riutilizzare le configurazioni delle risorse tra i team. I moduli Terraform sono contenitori per più risorse incluse in un pacchetto come singola unità logica. Un modulo è costituito da una raccolta di .tf
file e/o .tf.json
archiviati insieme in una directory. Oltre ai moduli del file system locale, Terraform può caricare moduli da varie origini. Queste origini includono il Registro di sistema, il percorso locale, i moduli e GitHub.
Ciclo di vita del provisioning
Sia Terraform che Bicep consentono agli sviluppatori di convalidare una configurazione prima della distribuzione e quindi applicare le modifiche. Terraform offre maggiore flessibilità per eliminare tutti gli oggetti remoti gestiti da una configurazione specifica. Questa funzionalità è utile per pulire gli oggetti temporanei al termine del lavoro. È fondamentale considerare i requisiti del ciclo di vita delle distribuzioni tipiche dell'infrastruttura quando si sceglie l'opzione migliore.
Bicep offre un'operazione di simulazione che consente di visualizzare in anteprima le modifiche prima di distribuire un file Bicep. Azure Resource Manager fornisce l'operazione what-if
e non apporta modifiche alle risorse esistenti. È quindi possibile usare Azure PowerShell o l'interfaccia della riga di comando di Azure con i file Bicep per distribuire le risorse in Azure. Azure PowerShell e l'interfaccia della riga di comando di Azure non supportano la distribuzione di file Bicep remoti. È tuttavia possibile usare l'interfaccia della riga di comando di Bicep per compilare il file Bicep in un modello JSON e quindi caricare il file JSON in un percorso remoto.
In Terraform il comando terraform plan è simile all'operazione Bicep what-if
. Con il terraform plan
comando si crea un piano di esecuzione da visualizzare in anteprima prima di applicarlo. Si applica quindi il piano di esecuzione tramite il comando terraform apply . Quasi tutto ciò che si fa con Terraform implica l'uso di entrambi i terraform plan
comandi e terraform apply
.
Attività iniziali
Bicep e Terraform offrono entrambe le risorse per iniziare. Il modulo Learn per Bicep consente di definire come configurare le risorse di Azure. Vengono inoltre illustrate le distribuzioni di diverse risorse di Azure per offrire un'esperienza pratica.
Allo stesso modo, HashiCorp Learn fornisce agli utenti varie risorse di training di Terraform per insegnare come installare e usare Terraform. Queste risorse includono informazioni che illustrano come usare Terraform per effettuare il provisioning dell'infrastruttura in Azure.
Creazione di codice
L'esperienza di creazione del codice dipende dal numero di componenti aggiuntivi disponibili per l'editor preferito. Fortunatamente, Sia Bicep che Terraform offrono risorse per migliorare l'efficienza di creazione del codice.
Per Bicep, uno dei componenti aggiuntivi più efficaci è l'estensione Bicep di Visual Studio Code. L'estensione fornisce funzionalità come la convalida del codice, IntelliSense, l'accesso alle proprietà dot e il completamento automatico delle proprietà.
Per Terraform, l'estensione Terraform di Visual Studio Code con Terraform Language Server offre molte delle stesse funzionalità dell'estensione Bicep Visual Studio Code. Ad esempio, l'estensione supporta anche l'evidenziazione della sintassi, IntelliSense, lo spostamento del codice e uno strumento di esplorazione dei moduli. HashiCorp offre anche [istruzioni dettagliate sull'installazione] nel repository GitHub (https://github.com/hashicorp/terraform-ls/blob/main/docs/USAGE.md) per la configurazione e l'uso del server di linguaggio Terraform.
Copertura di Azure
Bicep ha un vantaggio rispetto a Terraform quando si tratta di configurare le risorse di Azure. Bicep è completamente integrato con i servizi di Azure. Offre inoltre un supporto immediato per le nuove funzionalità di Azure. Terraform offre due provider che consentono agli utenti di gestire Azure: AzureRM e AzAPI. Il provider AzureRM offre un'esperienza completamente personalizzata per i servizi stabili di Azure. A volte arrivare a questa esperienza personalizzata può comportare un po ' di ritardo. Il provider AzAPI è un livello sottile sopra le API REST di Azure Resource Manager, che, ad esempio Bicep, abilita il supporto immediato per le nuove funzionalità di Azure. È importante considerare i requisiti dell'infrastruttura dell'organizzazione e se sono completamente supportati prima di prendere una decisione.
Community e supporto
La community svolge un ruolo chiave nell'aiutare a imparare e superare le sfide. Sia le community Terraform che Bicep offrono un elevato livello di coinvolgimento e supporto.
Per il supporto di Bicep, dove si cerca assistenza dipende dalla natura del problema:
- Bug della documentazione: per i problemi relativi alla documentazione di Bicep in Microsoft Learn, ogni articolo include una sezione Commenti e suggerimenti.
- Codice sorgente Bicep e segnalare bug: visitare il repository GitHub di Microsoft Bicep per contribuire ai bug del prodotto Bicep e dei file open source.
Per il supporto di Terraform, dove si cerca assistenza dipende dalla natura del problema:
Bug della documentazione: per problemi con la documentazione di Terraform in Microsoft Learn, ogni articolo include una sezione Commenti e suggerimenti.
Codice sorgente del provider e bug: Microsoft ha repository GitHub in cui è possibile segnalare bug e contribuire ai provider di Azure Terraform open source. Per elencare i provider disponibili, passare all'organizzazione GitHub di Azure e immettere terraform-provider-
il campo Trova un repository.
Domande di base su Terraform: visitare la sezione Terraform del portale della community hashiCorp.
Domande correlate al provider Terraform: visitare la sezione Provider Terraform del portale della community HashiCorp.
Riepilogo
Bicep e Terraform sono due opzioni IaC principali che semplificano la configurazione e la distribuzione delle risorse di Azure. Entrambe offrono funzionalità semplici da usare che consentono alle organizzazioni di migliorare l'efficienza e la produttività. Quando si valuta la scelta migliore per l'organizzazione, prendere in considerazione attentamente i requisiti e le preferenze dell'infrastruttura.