Bitrock logo

Terraform Community Tools

Nonostante non abbia ancora raggiunto la versione 1.0, Terraform è diventato lo strumento di fatto per la gestione dell’infrastruttura cloud. Uno dei suoi principali punti di forza è sicuramente l’ampio supporto cross-cloud, che consente ai progetti di passare da un fornitore di cloud a un altro con uno sforzo operativo minimo. Inoltre, la popolarità della comunità che rilascia continuamente componenti di infrastruttura riutilizzabili, i moduli Terraform, rende facile avviare nuovi progetti con una configurazione completamente funzionale fin dall’inizio.

Per affrontare tutti i diversi casi d’uso di Terraform, sia che venga eseguito come parte di una pipeline GitOps o direttamente dalle macchine degli sviluppatori, la comunità ha costruito una serie di strumenti per migliorare l’esperienza degli sviluppatori.

In questo post ne descriveremo alcuni, concentrandoci su quelli che potrebbero non essere così popolari o ampiamente adottati, ma che certamente meritano un po’ di attenzione.

Automazione delle pull request

Atlantis

GitHub Website

Atlantis

Atlantis è un’applicazione golang che ascolta gli eventi di pull request di Terraform tramite webhook. Permette agli utenti di eseguire da remoto “terraform plan” e “terraform apply” in base al contenuto della richiesta di pull, commentando il risultato. Atlantis è un buon punto di partenza per rendere visibili le modifiche all’infrastruttura a tutti i team, consentendo anche a quelli non operativi di contribuire alla base di codice dell’infrastruttura Terraform. Se volete vedere Atlantis in azione, guardate questo video di presentazione.

Se volete limitare e controllare l’esecuzione delle modifiche di Terraform, fornendo comunque un’interfaccia amichevole, Terraform Cloud ed Enterprise supportano l’invocazione di operazioni remote tramite UI, VCS, CLI e API. L’offerta comprende un’ampia serie di funzionalità per integrare le modifiche all’infrastruttura nelle pipeline CI.

Importazione di risorse Cloud esistenti

L’importazione di risorse esistenti in una base di codice Terraform è un processo lungo e noioso. Terraform è in grado di importare una risorsa esistente nel suo stato tramite il comando “import”, ma la responsabilità di scrivere l’HCL che descrive la risorsa spetta allo sviluppatore. La comunità ha creato strumenti in grado di automatizzare questo processo.

Terraforming

GitHub Website

Terraforming supporta l’esportazione di risorse AWS esistenti in risorse Terraform, la loro importazione nello stato Terraform e la scrittura della configurazione in un file.

Terraformer

GitHub

Terraformer supporta l’esportazione di risorse esistenti da diversi provider, come AWS, Azure e GCP. Lo strumento sfrutta i provider Terraform per eseguire la mappatura degli attributi delle risorse con quelli di Terraform, il che lo rende più resistente agli aggiornamenti delle API. Terraformer è stato sviluppato da Waze e ora gestito dal team di Google Cloud Platform.

Gestione delle versioni

tfenv

GitHub

Quando si lavora con progetti basati su diverse versioni di Terraform, è scomodo passare da una versione all’altra e il rischio di aggiornare la versione di Terraform degli stati a una nuova è alto. tfenv viene in supporto e rende facile avere diverse versioni di Terraform installate sulla stessa macchina.

Security and Compliance Scanning

tfsec

GitHub

Logo

tfsec esegue l’analisi statica del codice Terraform per rilevare potenziali vulnerabilità nella configurazione dell’infrastruttura risultante. È dotato di una serie di regole che funzionano tra i vari provider e di una serie di regole specifiche per i provider, con supporto per AWS, Azure e GCP. Supporta la disabilitazione dei controlli su risorse specifiche, facilitando l’inclusione dello strumento in una pipeline CI.

Terrascan

GitHub Website

Terrascan

Terrascan rileva le violazioni della sicurezza e della conformità nel codice Terraform, riducendo il rischio di fornire infrastrutture cloud non sicure. Lo strumento supporta AWS, Azure, GCP e Kubernetes e viene fornito con un set di oltre 500 policy per le best practice di sicurezza. È possibile scrivere policy personalizzate con il linguaggio Open Policy Agent Rego.

Regula

GitHub

Regula è uno strumento che ispeziona il codice di Terraform alla ricerca di configurazioni errate della sicurezza e di violazioni della conformità. Supporta AWS, Azure e GCP e include una libreria di regole scritte in linguaggio Open Policy Agent Rego. Regula è composto da due parti, la prima genera un piano Terraform in JSON che viene poi consumato da

Terraform Compliance

GitHub Website

Logo

Terraform Compliance affronta il problema da una prospettiva diversa, consentendo di scrivere regole di conformità in modo BDD (Behaviour Driven Development). Un’ampia serie di esempi fornisce una panoramica delle capacità dello strumento. È facile inserire Terraform Compliance nella catena CI e convalidare l’infrastruttura prima della distribuzione.

Mentre Terraform Compliance è gratuito e facile da usare, è possibile definire un insieme molto più ampio di criteri utilizzando HashiCorp Sentinel, che fa parte dell’offerta HashiCorp Enterprise. Sentinel supporta criteri a grana fine basati su condizioni, con diversi livelli di applicazione, che vengono valutati come parte di un’esecuzione remota di Terraform.

Linting

TFLint

GitHub

TFLint è un linter di Terraform che si concentra sui potenziali errori e sulle migliori pratiche. Lo strumento viene fornito con un set di regole generali e per AWS, mentre le regole per altri fornitori di cloud come Azure e GCP sono in fase di aggiunta. Non si concentra su questioni di sicurezza o conformità, ma piuttosto sulla convalida di variabili di configurazione come i tipi di istanza, che potrebbero causare un errore di runtime durante l’applicazione delle modifiche. TFLint cerca di colmare la lacuna di “terraform validate”, che non è in grado di convalidare i valori delle variabili oltre ai controlli di sintassi e di coerenza interna.

Cost Estimation

infracost

GitHub Website

Infracost

Tenere traccia dei prezzi dell’infrastruttura è piuttosto complicato e di solito si scopre il costo effettivo di un’implementazione dopo averla gestita per giorni, se non settimane. infracost viene in aiuto fornendo un modo per stimare quanto costeranno le risorse che si stanno per implementare. Al momento lo strumento supporta solo AWS, fornendo informazioni sui costi delle risorse a tariffa oraria e di quelle basate sull’utilizzo, come le funzioni Lambda di AWS. Per queste ultime, richiede l’uso del provider infracost Terraform, che consente di descrivere le stime di utilizzo per una stima dei costi più realistica. Ciò consente una rapida analisi “what-if”, come ad esempio “cosa succede se questo mese il mio Lambda riceve un numero di richieste 2 volte superiore?”. La possibilità di produrre una “diff” dei costi è utile quando si integra infracost nella pipeline CI.

Terraform Enterprise offre una funzione di stima dei costi che amplia l’offerta di infracost con il supporto dei tre principali fornitori di cloud pubblico: AWS, Azure e GCP. Inoltre, è possibile applicare le politiche Sentinel, ad esempio per impedire l’esecuzione delle modifiche di Terraform in base all’aumento dei costi.


Autore: Simone Ripamonti, DevOps Engineer @Bitrock

Skip to content