Cos'è Terraform?

Pubblicato il 15 aprile 2025
Aggiornato il 13 luglio 2026
Programmatore che elabora i dati su un laptop in una sala server
By Derek Robertson, Matthew Kosinski and Gregg Lindemulder

Definizione di Terraform

Terraform è un prodotto infrastructure as code (IaC) di livello aziendale creato da HashiCorp. Fornisce un'interfaccia unificata per la gestione del ciclo di vita dell'infrastruttura e un unico workflow per il provisioning dei componenti infrastrutturali per più cloud (AWS, Azure e Google Cloud), reti, data center privati e ambienti SaaS. 

Con Terraform, gli utenti possono creare, aggiornare e distruggere componenti infrastrutturali scrivendo file di configurazione leggibili dall'uomo. Questi file di configurazione utilizzano 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. 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 la VPC venga creata prima del 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 risorse di calcolo e storage e bucket S3, e componenti di alto livello, come voci del Domain Name System (DNS) e caratteristiche software as a service (SaaS).

Nel febbraio 2025, IBM ha acquisito HashiCorp e le sue offerte, tra cui Terraform. 

Come funziona Terraform?

Terraform funziona praticamente con qualsiasi piattaforma o servizio dotato di application programming interface (API)accessibile, inclusi Amazon Web Services (AWS), Microsoft Azure, Google Cloud, GitHub, IBM Cloud e Docker.

Il workflow principale di Terraform è composto da tre fasi:

  1. Scrittura
  2. Piano 
  3. Candidarsi

1. Scrittura

Uno sviluppatore scrive un file di configurazione leggibile per definire le configurazioni delle risorse per l'infrastruttura desiderata. Il file è dichiarativo. Lo sviluppatore descrive l'infrastruttura che desidera, ma non come eseguirne il provisioning. 

Ad esempio, supponiamo che uno sviluppatore voglia predisporre l'infrastruttura per distribuire un'app ospitata nel cloud. Potrebbe specificare di aver bisogno di macchine virtuali in un cloud privato virtuale, con gruppi di sicurezza associati e un load balancer.

Un singolo file di configurazione può gestire risorse distribuite su più provider e servizi cloud.

2. Pianificazione

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 desiderato partendo dallo stato attuale.

Il piano stesso assume la forma di un elenco delle infrastrutture che Terraform creerà, aggiornerà o distruggerà per allineare il mondo reale alle configurazioni descritte 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:

  • Provisioning di nuove macchine virtuali per ospitare l'app. 

  • Modifica di un gruppo di sicurezza esistente per consentire il traffico verso le nuove macchine virtuali. 

  • Fornitura di un sistema di bilanciamento del carico per distribuire il traffico tra le macchine virtuali.

Gli sviluppatori possono rivedere, modificare e convalidare il piano prima che Terraform lo esegua.

3. Applicazione

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, supponiamo che uno sviluppatore aggiorni le proprietà di una VPC e cambi il numero di macchine virtuali in quella VPC. Terraform ricrea il VPC con le proprietà aggiornate prima di scalare le macchine virtuali.

Componenti di Terraform

I componenti principali di Terraform includono:

  • File di configurazione
  • Moduli
  • File di stato
  • Fornitori
  • Registri
  • CLI di Terraform
File di configurazione

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.

Moduli

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. Invece, possono utilizzare moduli che descrivono già le configurazioni infrastrutturali di cui hanno bisogno.

File di stato

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. Questo confronto permette a Terraform di determinare quali cambiamenti deve apportare per allineare l'infrastruttura attuale alla configurazione desiderata.

Fornitori

I provider di Terraform sono plug-in che Terraform utilizza per 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, nonché per database, soluzioni di rete e altri strumenti comuni.  

Terraform può anche gestire l'infrastruttura esistente. Grazie al blocco di importazione, gli sviluppatori possono integrare nella gestione di Terraform risorse create al di fuori di esso, consentendo loro di codificare e controllare l'intero ambiente, non solo le nuove risorse. 

Registri

Il Terraform Registry è un repository per provider, moduli, regole di policy e soluzioni.

Chiunque può pubblicare e utilizzare le risorse e i modelli sul Terraform Registry pubblico. Per utilizzare un provider o modulo da questo registro, gli utenti lo aggiungono alle loro configurazioni. Quando eseguono il comando "terraform init", Terraform scarica automaticamente tutto il necessario.

Le organizzazioni possono anche creare registri privati per condividere internamente i propri moduli e risorse.

CLI di Terraform

La Terraform CLI è lo strumento da riga di comando (CLI) per la gestione dell'infrastruttura con Terraform. Gli sviluppatori lo utilizzano per eseguire comandi, generare piani di esecuzione, applicare modifiche e interagire con componenti chiave di Terraform come file di configurazione, file di stato, provider e moduli.

In che modo le organizzazioni utilizzano Terraform?

Le organizzazioni utilizzano Terraform per predisporre e gestire l'infrastruttura durante il suo intero ciclo di vita. I casi d'uso più comuni includono:

  • Gestione di ambienti ibridi e multicloud
  • Gestione dell'infrastruttura delle applicazioni
  • Self-service per sviluppatori 
  • Gestione delle politiche e della conformità
  • Collaborazione del team

Gestione di ambienti ibridi e multicloud

Gli ambienti ibridi e multicloud possono essere complessi perché ogni provider di cloud ha le proprie interfacce, strumenti e workflow.  In questo tipo di configurazioni, le risorse cloud critiche potrebbero essere distribuite tra cloud pubblici, cloud privati e più data center.

Le organizzazioni possono utilizzare Terraform per semplificare la gestione e l'orchestrazione di infrastrutture cloud complesse e su larga scala. In particolare, Terraform consente alle organizzazioni di utilizzare lo stesso linguaggio di configurazione per fornire e gestire risorse su cloud pubblici, cloud privati e ambienti on-premise in un unico workflow unificato.

Per aiutare a gestire l'infrastruttura su larga scala, Terraform Stacks aiuta gli utenti ad automatizzare e ottimizzare il coordinamento, la distribuzione/implementazione e la gestione del ciclo di vita delle configurazioni interdipendenti di Terraform, riducendo i tempi e i costi di gestione dell'infrastruttura. 

Gli stack sostituiscono la tradizionale struttura dei moduli principali di Terraform con una nuova architettura basata su componenti costruita a partire dai moduli Terraform. Utilizzando gli stack, gli utenti possono fornire e coordinare il ciclo di vita dell'infrastruttura su larga scala, offrendo un approccio organizzato e riutilizzabile che espande l'infrastruttura come codice.

Gestione dell'infrastruttura delle applicazioni

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.

Self-service per sviluppatori

Il self-service per sviluppatori si sta evolvendo oltre la semplice provisioning dell'infrastruttura per coprire l'intero ciclo di vita delle applicazioni, dalla configurazione dell'ambiente alla distribuzione/implementazione e alle operazioni in corso.

Terraform fornisce le basi per questo moderno modello self-service. Si integra con portali dello sviluppatore come Backstage, Port e Cortex; sistemi ITSM come ServiceNow e Jira; e piattaforme di pipeline CI/CD come GitHub Actions e Jenkins.

Per i team che preferiscono rimanere all'interno dei workflow di Terraform, Waypoint funge da portale self-service per sviluppatori nativi di Terraform, consentendo esperienze di distribuzione/implementazione applicative coerenti e guidate da policy. 

Su AWS, Azure e GCP, Terraform agisce come il livello di integrazione e controllo che unifica questi punti di ingresso, permettendo agli sviluppatori di muoversi più velocemente mantenendo governance e coerenza operativa.

Gestione delle politiche e della conformità

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.

Sentinel, il framework policy-as-code di HashiCorp per l'applicazione di una governance logica e dettagliata in tutta l'infrastruttura, fornisce una libreria di policy prescritte che offrono controlli pronti all'uso (ad esempio, mappature verso NIST SP-80053). Queste politiche aiutano i team a far rispettare i vincoli di conformità comuni senza dover redigere tutte le policy da zero.

Ad esempio, le organizzazioni possono utilizzare i moduli Terraform per codificare 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.

Collaborazione in team

Le organizzazioni possono memorizzare il codice Terraform e i file di configurazione in un sistema di controllo della versione (VCS), come un repository Git. Questa disposizione consente ai team DevOps di collaborare sul codice, rivedere le definizioni, tenere traccia delle modifiche all'infrastruttura e, se necessario, ripristinare versioni precedenti.

HashiCorp Terraform e Red Hat Ansible a confronto 

Terraform e Ansible vengono spesso utilizzati insieme per estendere l'automazione oltre il provisioning delle infrastrutture. Terraform eccelle nel provisioning delle infrastrutture, preparando ed effettuando il provisioning di risorse complesse per ambienti cloud e ibridi. Ansible è un potente strumento per la gestione della configurazione, la modifica e la manutenzione coerente dell'infrastruttura esistente. 

I playbook Ansible, scritti in YAML, consentono un controllo granulare su attività come l'installazione di software e l'aggiornamento delle impostazioni di sistema.

I due strumenti affrontano fasi diverse ma connesse del ciclo di vita dell'infrastruttura, rendendoli una scelta naturale per le organizzazioni che cercano coerenza tra gli ambienti.

Le integrazioni tra Terraform e Ansible aiutano a colmare il divario tra creazione di risorse e gestione della configurazione. Ad esempio, le azioni di Terraform possono inviare un evento che attiva la funzionalità di automazione guidata dagli eventi della piattaforma di automazione Ansible (AAP) per attivare workflow dinamici di automazione da Ansible, il tutto con una sola applicazione di Terraform. 

Questa interconnessione può aiutare a unificare gli strumenti infrastrutturali e ridurre le tensioni tra le Operazioni del giorno 2, come patching, scaling e decommissioning. Insieme, Terraform e Ansible contribuiscono a garantire che infrastrutture e applicazioni rimangano coerenti e affidabili in ogni fase del loro ciclo di vita.

IBM DevOps

Cos'è DevOps?

Andrea Crawford spiega cos'è DevOps, il suo valore e in che modo le pratiche e gli strumenti DevOps ti aiutano a spostare le tue app nell'intera delivery pipeline, dall'ideazione alla produzione. Guidato dai principali leader di pensiero IBM, il curriculum è progettato con lo scopo di aiutare i leader aziendali ad acquisire le conoscenze necessarie per dare priorità agli investimenti nell'AI che possono promuovere la crescita.

Terraform e Kubernetes a confronto

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 open source di orchestrazione dei container per la pianificazione e l'automatizzazione della distribuzione, gestione e scalabilità delle applicazioni containerizzate. Terraform è uno strumento infrastructure as code che automatizza il provisioning e la gestione dell'infrastruttura.

Sebbene questi strumenti siano distinti e abbiano funzioni diverse, spesso lavorano insieme nei backend 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.

Autori

Derek Robertson

Staff Writer

IBM Think

Matthew Kosinski

Staff Editor

IBM Think

Gregg Lindemulder

Staff Writer

IBM Think