Confronto tra Terraform e Bicep

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.

Strumenti di interfaccia della riga di comando

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.