Terraform è uno strumento open source infrastructure as code (IaC) creato da HashiCorp. Terraform consente agli sviluppatori di predisporre, aggiornare ed eliminare componenti di infrastrutture cloud e on-premise, come macchine virtuali e cluster Kubernetes, scrivendo file di configurazione leggibili.
HashiCorp Terraform utilizza un linguaggio dichiarativo anziché un linguaggio procedurale. Gli utenti descrivono lo stato finale desiderato per le risorse dell'infrastruttura e Terraform si occupa del resto. Terraform crea automaticamente un piano di esecuzione, identifica le dipendenze tra le risorse e fornisce i componenti nell'ordine corretto. Ad esempio, se una macchina virtuale (VM) dipende da un cloud privato virtuale (VPC), Terraform garantisce che il VPC venga creato prima di eseguire il provisioning della VM.
Al contrario, con un linguaggio procedurale, gli sviluppatori devono scrivere istruzioni dettagliate per il provisioning dell'infrastruttura.
I file di configurazione di Terraform possono essere sottoposti a controllo delle versioni, riutilizzati e condivisi. Terraform gestisce componenti di basso livello, come le risorse di calcolo e storage, e componenti di alto livello, come le voci DNS (Domain Name System) e le funzionalità SaaS (Software as a Service).
Nel febbraio 2025, IBM ha acquisito HashiCorp e le sue offerte, tra cui Terraform.
Terraform crea e gestisce risorse su piattaforme cloud e altri servizi tramite application programming interface (API). Terraform funziona con quasi ogni piattaforma o servizio dotati di un'API accessibile, tra cui Amazon Web Services (AWS), Microsoft Azure, Google Cloud, GitHub, IBM Cloud e Docker.
Il workflow principale di Terraform è composto da tre fasi:
Uno sviluppatore scrive un file di configurazione leggibile per definire le configurazioni delle risorse per l'infrastruttura desiderata. Il file è dichiarativo, ovvero lo sviluppatore descrive l'infrastruttura desiderata, ma non come eseguirne il provisioning.
Ad esempio, se uno sviluppatore desidera predisporre l'infrastruttura per la distribuzione di un'app ospitata nel cloud, potrebbe specificare di aver bisogno di macchine virtuali all'interno di un cloud privato virtuale, con relativi gruppi di sicurezza e un load balancer.
Un singolo file di configurazione può gestire risorse distribuite su più provider e servizi cloud.
Terraform analizza sia la configurazione scritta fornita dallo sviluppatore che lo stato corrente dell'infrastruttura dell'organizzazione. Quindi crea un piano di esecuzione che descrive come raggiungere lo stato finale desiderato partendo dallo stato attuale.
Il piano stesso assume la forma di un elenco delle risorse infrastrutturali che Terraform creerà, aggiornerà o distruggerà per allineare l’ambiente reale alla configurazione definita dallo sviluppatore.
Consideriamo l'esempio precedente di uno sviluppatore che distribuisce un'applicazione su macchine virtuali in un cloud privato virtuale. Il piano di Terraform potrebbe includere azioni come:
Gli sviluppatori possono rivedere e modificare il piano prima che Terraform lo esegua.
Quando il piano viene approvato, Terraform esegue le operazioni proposte nell'ordine corretto, rispettando tutte le eventuali dipendenze tra le risorse. In altre parole, se la risorsa A dipende dalla risorsa B, Terraform garantisce che la risorsa B venga creata prima della risorsa A.
Ad esempio, se uno sviluppatore aggiorna le proprietà di un VPC e modifica il numero di macchine virtuali in quel VPC, Terraform ricrea il VPC con le proprietà aggiornate prima di scalare le macchine virtuali.
I componenti principali di Terraform includono:
I file di configurazione sono il modo in cui gli sviluppatori definiscono le risorse desiderate per gli ambienti on-premise e cloud. Questi file indicano a Terraform quali provider utilizzare, quale infrastruttura creare e quali dati recuperare. Gli sviluppatori possono modificare, riutilizzare e condividere i file di configurazione.
Gli sviluppatori possono scrivere file di configurazione in JSON o in HashiCorp Configuration Language (HCL). HCL utilizza una sintassi dichiarativa: gli sviluppatori descrivono l'infrastruttura desiderata anziché specificare come eseguirne il provisioning. HCL è simile alle coppie chiave-valore di JSON, ma è ottimizzato per la leggibilità da parte degli esseri umani.
I moduli sono container riutilizzabili per più risorse che vengono comunemente usate insieme. Ad esempio, un modulo potrebbe contenere macchine virtuali, database, configurazioni di rete e impostazioni di sicurezza, tutto in un unico pacchetto. I moduli vengono memorizzati come raccolte di file di configurazione.
I moduli Terraform consentono agli sviluppatori di creare infrastrutture complesse senza dover ripartire ogni volta da zero. Possono invece utilizzare moduli che descrivono già le configurazioni infrastrutturali di cui hanno bisogno.
Un file di stato Terraform è una rappresentazione dello stato attuale dell'infrastruttura, inclusi componenti, configurazioni e relazioni tra le risorse.
Quando Terraform crea un piano, inizia confrontando il file di configurazione con il file di stato. Ciò consente a Terraform di determinare le modifiche da apportare per allineare l'infrastruttura corrente alla configurazione desiderata.
I provider Terraform sono plug-in che consentono a Terraform di interagire con le API di servizi e piattaforme esterne. I provider abilitano Terraform a gestire le risorse negli ambienti infrastructure as a service (IaaS), platform as a service (PaaS) e software as a service (SaaS). Ogni provider contiene tutto il codice di cui Terraform ha bisogno per connettersi a un servizio, eseguire l'autenticazione e predisporre le risorse.
Sebbene gli sviluppatori possano scrivere i propri provider, possono anche utilizzare provider preesistenti scritti da HashiCorp e da altri utenti di Terraform. Sono disponibili provider predefiniti per la maggior parte dei principali servizi di cloud pubblico e privato, così come per database, soluzioni di rete e altri strumenti comuni.
Il Terraform Registry è un repository di provider, moduli, regole di policy e soluzioni.
Chiunque può pubblicare e utilizzare le risorse presenti nel Terraform Registry pubblico. Le organizzazioni possono anche creare registri privati per condividere internamente i propri moduli e risorse.
La CLI di Terraform è lo strumento da riga di comando per gestire l'infrastruttura tramite Terraform. Gli sviluppatori la utilizzano per eseguire comandi, generare piani di esecuzione, applicare modifiche e interagire con i componenti chiave di Terraform, quali file di configurazione, file di stato, provider e moduli.
Le organizzazioni utilizzano Terraform per predisporre e gestire l'infrastruttura durante il suo intero ciclo di vita. I casi d'uso più comuni includono:
Gli ambienti multicloud possono essere complessi perché ogni provider di cloud ha le proprie interfacce, strumenti e workflow. Inoltre, le risorse chiave possono essere distribuite su più data center.
Le organizzazioni possono utilizzare Terraform per semplificare la gestione e l'orchestrazione di infrastrutture multicloud su larga scala. Nello specifico, Terraform consente alle organizzazioni di utilizzare lo stesso linguaggio di configurazione per predisporre e gestire risorse tra più provider di servizi in un workflow.
Terraform è in grado di distribuire e gestire infrastrutture per applicazioni multilivello, consentendo alle organizzazioni di gestire le risorse di ciascun livello in un workflow unificato, rispettando le dipendenze.
Ad esempio, un'applicazione multilivello potrebbe essere costituita da un pool di server web, un livello di database, un livello API, server di cache e un livello di routing. Terraform provvede al provisioning del livello del database prima del provisioning dei server web che dipendono da esso.
Nelle grandi organizzazioni, i team centralizzati delle operazioni IT ricevono tipicamente molte richieste infrastrutturali ripetitive.
Le organizzazioni possono utilizzare Terraform per creare un modello di infrastruttura self-service che consenta ai team di prodotto di gestire la propria infrastruttura in modo indipendente. Ad esempio, utilizzando moduli predefiniti, i team possono implementare direttamente componenti standardizzati e approvati.
Le organizzazioni possono anche integrare Terraform con sistemi di ticketing e pipeline di integrazione continua/distribuzione continua (CI/CD) DevOps per automatizzare le richieste di provisioning di nuove infrastrutture. Ad esempio, quando un utente invia una richiesta di infrastruttura al sistema di ticketing, Terraform può avviare un workflow per aggiornare automaticamente le risorse di conseguenza.
Terraform può aiutare le organizzazioni ad applicare le politiche di sicurezza e conformità riguardo ai tipi di risorse che i team possono predisporre e utilizzare.
Ad esempio, le organizzazioni possono utilizzare i moduli Terraform per codificare gli standard per l'implementazione e la gestione delle risorse in tutta l'organizzazione. Utilizzando questi moduli approvati, i team possono essere certi di distribuire le risorse nel rispetto delle pratiche dell'organizzazione.
Le organizzazioni possono memorizzare i file di configurazione di Terraform in un sistema di controllo delle versioni (VCS), che consente ai team DevOps di collaborare sul codice, rivedere le definizioni, tenere traccia delle modifiche all’infrastruttura e, se necessario, ripristinare versioni precedenti.
Kubernetes e Terraform sono componenti comuni degli ambienti cloud ed entrambi aiutano ad automatizzare le attività relative all'infrastruttura. Tuttavia, la differenza principale tra i due è che Kubernetes si concentra sui workload containerizzati, mentre Terraform gestisce tutti i tipi di componenti dell'infrastruttura, inclusi gli stessi cluster.
Kubernetes è una piattaforma di orchestrazione dei container open source per pianificare e automatizzare la distribuzione, la gestione e la scalabilità delle applicazioni containerizzate. Terraform è uno strumento infrastructure as code che automatizza il provisioning e la gestione dell'infrastruttura.
Sebbene si tratti di strumenti distinti con funzioni diverse, spesso lavorano insieme negli ambienti cloud. Ad esempio, Terraform può automatizzare il provisioning di cluster Kubernetes sulle piattaforme cloud, mentre Kubernetes gestisce la distribuzione delle applicazioni all'interno di questi cluster.
Terraform e Ansible sono entrambi strumenti infrastructure as code che aiutano ad automatizzare le attività fondamentali legate all'infrastruttura. Tuttavia, usano linguaggi diversi e spesso hanno scopi diversi. Terraform viene utilizzato per il provisioning delle risorse dell'infrastruttura, mentre Ansible viene spesso utilizzato per gestire le configurazioni delle risorse.
Terraform utilizza un linguaggio puramente dichiarativo, mentre Ansible combina sia il linguaggio dichiarativo che quello procedurale. Nella configurazione procedurale, uno sviluppatore specifica i passaggi per configurare le risorse nello stato desiderato. La configurazione procedurale è più laboriosa, ma può anche offrire un maggiore controllo.
I playbook Ansible, scritti in YAML, consentono un controllo granulare su attività come l'installazione di software e l'aggiornamento delle impostazioni di sistema. Ansible dispone anche di una serie di moduli predefiniti per attività comuni di gestione della configurazione, tra cui la gestione dei pacchetti e gli aggiornamenti del sistema operativo. Inoltre, Ansible può applicare modifiche alle risorse in modo idempotente, ovvero dopo che un'operazione è stata applicata per la prima volta, le successive applicazioni della stessa operazione non modificano la risorsa.
Nel complesso, queste caratteristiche contribuiscono a spiegare perché Ansible è una scelta comune per la gestione della configurazione.
Sebbene Terraform possa effettuare il provisioning delle risorse dell'infrastruttura, non è in grado di gestire il software all'interno delle risorse con la stessa efficacia di Ansible. Ad esempio, Terraform può definire una nuova macchina virtuale, includendo proprietà come il tipo di istanza e la dimensione del disco, ma non può aggiornare il sistema operativo sulla macchina virtuale.
Tuttavia, Terraform può interagire con strumenti di gestione della configurazione come Ansible per semplificare e ottimizzare la configurazione dell'infrastruttura. Ad esempio, un'organizzazione potrebbe utilizzare Terraform per il provisioning di macchine virtuali e Ansible per configurare il software su tali macchine.
Scala automaticamente l'infrastruttura IT esistente per prestazioni più elevate a costi inferiori.
Scopri come l'AI per le operazioni IT fornisce gli insight necessari per favorire eccezionali prestazioni di business.
Vai oltre la semplice automazione delle attività per gestire processi di alto profilo, rivolti ai clienti e in grado di generare entrate con adozione e scalabilità integrate.