# Terraform

Oggi, sempre più aziende utilizzano il **cloud** per implementare ambienti di lavoro o anche strutture IT complete. [Infrastructure as a Service (IaaS)](https://www.ionos.it/digitalguide/server/know-how/iaas-infrastructure-as-a-service/) è in molti casi il modo semplice ed economico per creare la base per i progetti pianificati. Le soluzioni cloud consentono inoltre di reagire con precisione alle **esigenze attuali**: mentre i componenti sottostanti come [server](https://www.ionos.it/digitalguide/server/know-how/cose-un-server-un-termine-due-definizioni/), [firewall](https://www.ionos.it/digitalguide/server/sicurezza/i-firewall-hardware-la-soluzione-firewall-piu-stabile/) o [load balancer](https://www.ionos.it/digitalguide/server/know-how/load-balancer-bilanciamento-del-carico-nel-server/) sono statici nel **data center** del provider, le soluzioni cloud possono essere modificate dinamicamente in un ambiente cloud virtualizzato, dando ai clienti la possibilità di **aumentare o diminuire le risorse in qualsiasi momento**.

Per garantire questa flessibilità, i provider forniscono **API** che permettono di scalare in qualsiasi momento l’ambiente IaaS noleggiato con il software appropriato; libertà interessanti, ma che comportano anche un **elevato impegno amministrativo**. Con il software **Terraform** l’azienda statunitense [HashiCorp](https://www.hashicorp.com/ "Il partner per le sfide del cloud - HashiCorp") dà la risposta giusta per facilitare il lavoro nel lungo periodo. Di che cosa si occupa questo strumento Infrastructure as Code (IaC) è spiegato di seguito.

## Che cos’è Terraform?

Quando si tratta dell’infrastruttura di base dello **sviluppo del software**, gli amministratori sono sempre in difficoltà: la tendenza allo [sviluppo agile](https://www.ionos.it/digitalguide/siti-web/programmazione-del-sito-web/sviluppo-agile/) porta a cicli di sviluppo sempre più brevi e a un’implementazione ancora più veloce dei cambiamenti. Per soddisfare le elevate esigenze di questo ritmo veloce, i responsabili IT devono **automatizzare il più possibile la gestione delle risorse**. Ciò comporta la scrittura di un codice di configurazione leggibile dal computer, noto anche come Infrastructure as Code (IaC, in italiano: “Infrastruttura come codice”).

[YouTube video](https://www.youtube.com/watch?v=RO7VcUAsf-I)Per semplificare questo processo, i responsabili IT possono ricorrere ai servizi del software Terraform, che da un lato permette una **descrizione uniforme dell’infrastruttura target** e dall’altro garantisce che questa sia implementata come desiderato dai provider IaaS supportati. Inoltre, il software consente di memorizzare i setup dell’infrastruttura fornita in modo che possano essere riutilizzati successivamente, ampliati o adattati in qualsiasi modo.

[YouTube video](https://www.youtube.com/watch?v=Ij1NO_6hMrM)Terraform è fondamentalmente un software open source (Mozilla Public License 2.0) e può quindi essere scaricato e utilizzato gratuitamente. Tuttavia, diverse **funzioni per la collaborazione in team così come per le istituzioni e le organizzazioni pubbliche** sono disponibili solo nelle edizioni a pagamento “Enterprise Pro” e “Enterprise Premium”. Il servizio IaC Service 2012 è stato sviluppato dalla **HashiCorp** di San Francisco.

N.B. Terraform **collabora con oltre 160 partner differenti**. Tra questi si annoverano Amazon Web Services (AWS), Atlassian, Cloudflare, Google, Microsoft e Oracle. Trovate un elenco completo di tutti i partner sul [sito ufficiale di HashiCorp](https://www.hashicorp.com/partners#technology "Riepilogo della rete dei partner di HashiCorp").

## In che modo Terraform supporta gli utenti nella concezione dell’Infrastructure as Code (IaC)?

Poiché di solito per implementare l’infrastruttura IT o le risorse necessarie per lo sviluppo del software vengono utilizzati non solo uno, ma diversi servizi cloud, il responsabile deve adattarsi di default a **diverse interfacce (API)** e familiarizzare con le peculiarità della rispettiva piattaforma. Questo vale indipendentemente dal fatto che si vogliano controllare manualmente queste API nel momento in cui si apportano modifiche all’infrastruttura o che si vogliano scrivere le proprie istruzioni IaC per l’accesso automatico.

Gli utenti di Terraform non hanno questo problema: invece dei linguaggi di interfaccia, si può usare il linguaggio di markup JavaScript semplificato, JSON, o il linguaggio di configurazione **HashiCorp Configuration Language (HCL),** basato su JSON, per descrivere l’infrastruttura di destinazione desiderata. Quest’ultima è l’opzione raccomandata da HashiCorp in quanto rende ancora più facile scrivere e leggere il codice attraverso commenti e altre funzioni. Terraform si aspetta i rispettivi file di configurazione come normali **file di testo**, anche se lo strumento IaC utilizza **l’estensione .tf**. Utilizzando uno strumento appropriato come [Git o SVN](https://www.ionos.it/digitalguide/siti-web/programmazione-del-sito-web/git-vs-svn-controllo-di-versione-a-confronto/), è possibile risalire facilmente alle diverse versioni di questi file, se lo si desidera.

N.B. Anche se le istruzioni non devono essere registrate nelle forme tipiche standard delle interfacce, Terraform ha bisogno delle **chiavi API** per comunicare con i rispettivi servizi e per poter adattare o implementare l’infrastruttura così come definita nel file di configurazione .tf.

## I più importanti componenti Terraform in sintesi

Il compito principale di Terraform è la **configurazione user-friendly** delle risorse infrastrutturali, in cui il markup in HCL o JSON gioca un ruolo centrale. Tuttavia, la semplicità linguistica non è assolutamente l’unica cosa che distingue lo strumento IaC: solo grazie alla collaborazione con tutti i **principali fornitori di software e hardware** e in combinazione con **l’architettura di base ampliabile** individualmente e **l’interfaccia a riga di comando** facile da usare i file di configurazione creati possono ottenere l’effetto desiderato. Le sezioni seguenti forniscono una breve panoramica dei vari componenti Terraform per illustrare le funzionalità del software IaC.

### Linguaggio di configurazione HCL

Il già menzionato linguaggio di configurazione HashiCorp ha lo scopo principale di descrivere il risultato desiderato e non i passaggi necessari per raggiungerlo. L’elemento più importante del linguaggio Terraform sono le **risorse**, perché descrivono i componenti infrastrutturali la cui gestione deve essere automatizzata con Terraform. Tutte le altre funzioni di questo linguaggio esistono esclusivamente per specificare le rispettive risorse. I seguenti tre elementi di base svolgono un ruolo importante:

- **Blocchi:** i blocchi sono contenitori per il contenuto. In questa funzione forniscono spazio per le configurazioni di qualsiasi oggetto, specialmente per le risorse configurate. Ogni blocco ha un tipo di blocco, una o più etichette e un’area del corpo. Quest’ultimo contiene un numero illimitato di argomenti e sottoblocchi.
- **Argomenti:** per assegnare un valore a un nome, utilizzate argomenti in HCL. Questi sono sempre dichiarati all’interno di blocchi.
- **Espressioni:** le espressioni rappresentano un valore. Questo può essere un valore concreto o un riferimento a uno o più valori. Un’espressione si verifica come valore per un argomento o all’interno di altri argomenti.

L’HCL è un linguaggio dichiarativo, in cui la **sequenza** dei singoli blocchi **non è rilevante**. Terraform elabora automaticamente le risorse descritte nella corretta sequenza basata su **relazioni predefinite**. Solo nei cosiddetti blocchi del fornitore (in inglese “Provisioner blocks”), necessari per l’esecuzione degli script, la sequenza è importante.

### Terraform CLI (interfaccia a riga di comando)

Terraform fornisce una propria interfaccia a riga di comando in modo che i file di configurazione creati possano essere valutati e utilizzati. Questa interfaccia definisce la sintassi e la struttura complessiva del linguaggio Terraform e coordina tutte le fasi di modifica necessarie per **implementare l’infrastruttura configurata**. La stessa CLI non ha alcuna conoscenza di tipi specifici di risorse infrastrutturali, ma ottiene queste informazioni attraverso speciali **estensioni “provider”**. In questo modo, l’interfaccia sa come definire e gestire i singoli tipi di risorse presso i fornitori di cloud supportati e quindi anche come **trasmettere le istruzioni** formulate universalmente nei file di configurazione Terraform **alle varie API del cloud**.

N.B. Un’interfaccia testuale prende il nome di **CLI (Command Line Interface)** quando le persone trasmettono istruzioni al computer **tramite immissione di comandi**. Questo concetto si differenzia dall’utilizzo dei computer **attraverso elementi di controllo grafici come icone, menu o pulsanti**. Per quest’ultimo tipo di navigazione si parla di un’interfaccia grafica o di una **GUI (Graphical User Interface)**.

### Funzione di memorizzazione e importazione

Al fine di allocare risorse reali per la configurazione, tenere traccia dei metadati e migliorare continuamente le prestazioni delle infrastrutture più grandi, **Terraform memorizza lo stato delle risorse e la configurazione di IaC creata**. Per impostazione predefinita, il software memorizza il file *terraform.tfstate* in una directory locale; in alternativa, è possibile selezionare una posizione diversa, particolarmente indicata per il lavoro di squadra. Per confrontare ogni volta lo stato con l’infrastruttura corrente, Terraform **aggiorna automaticamente** la CLI prima di ogni operazione di programma.

N.B. Per la memorizzazione dello stato non in locale e per l’esecuzione delle operazioni (possibile solo con le versioni “Enterprise Pro” e “Enterprise Premium”), Terraform utilizza back end specifici al posto dei back end locali predefiniti. Per essere utilizzati questi livelli particolari di astrazione devono essere definiti direttamente nel file di configurazione e inizializzati tramite la CLI.

Se avete creato un’infrastruttura con altri mezzi, potete **importare** questa configurazione esistente grazie alla funzione integrata per gestire in futuro le risorse corrispondenti con Terraform. Attualmente solo le risorse, ma non la loro configurazione, vengono **aggiunte allo stato attuale**. Quest’ultimo, tuttavia, dovrebbe essere possibile nelle future versioni dello strumento IaC.

### Grafico di dipendenza

Terraform consente di creare un grafico delle dipendenze della configurazione dell’infrastruttura definita o del piano di esecuzione. Basta usare il **comando CLI** “grafico terraform” e definire il tipo di grafico desiderato, e Terraform genererà automaticamente un corrispondente **file di output in formato DOT**. Questo può essere riprodotto utilizzando il software di visualizzazione [Graphviz](https://www.graphviz.org/ "Graphviz - Software per la visualizzazione dei grafici"), che HashiCorp raccomanda anche nella documentazione ufficiale online. La riga di comando può anche essere usata per convertire facilmente il file in un formato immagine come [SVG](https://www.ionos.it/digitalguide/siti-web/creare-siti/formato-svg-inserimento-di-oggetti-grafici-vettoriali-svg/).

### Plug-in di Terraform

Terraform si basa su un’architettura basata su plug-in che consente di **ampliare le funzionalità della suite IaC in qualsiasi momento**. Ad esempio, i provisioners per l’esecuzione degli script rientrano tra i plug-in, così come le estensioni dei provider che forniscono alla CLI tutte le informazioni rilevanti sui servizi web supportati. Gli sviluppatori che padroneggiano il linguaggio di programmazione [Go(lang)](https://www.ionos.it/digitalguide/server/know-how/golang/) e hanno conoscenza delle API del provider corrispondente possono anche scrivere le proprie estensioni per collegare Terraform con servizi cloud non ufficialmente supportati. I plug-in appena rilasciati da HashiCorp vengono scaricati e inclusi automaticamente, mentre tutte le estensioni di terze parti richiedono un’installazione manuale.

## Casi d’uso: quali sono i tipici campi di applicazione di Terraform?

Grazie alla vasta gamma di fornitori di servizi cloud supportati, che HashiCorp continua ad aumentare e che può anche essere ampliata autonomamente con il relativo know-how, Terraform è adatto per un’ampia varietà di applicazioni. Tra i casi d’uso più popolari dello strumento Infrastructure as Code ci sono i seguenti tre:

### Configurazione dell’applicazione Heroku

[Heroku](https://www.heroku.com "Platform as a Service - Heroku") è uno dei più noti provider [PaaS](https://www.ionos.it/digitalguide/server/know-how/paas/) per **ospitare le proprie applicazioni web**. Tutti gli strumenti e i servizi necessari per l’applicazione possono essere inseriti sotto forma di componenti aggiuntivi e monitorati tramite la dashboard della piattaforma. Terraform vi alleggerisce il lavoro, non solo **scrivendo il codice per la configurazione della vostra applicazione**, ma anche assicurandosi che tutti i componenti aggiuntivi necessari siano sempre disponibili.

### Applicazioni a più livelli (Multi-Tier Applications)

L’architettura a livelli si è dimostrata un concetto di strutturazione per sistemi software (particolarmente popolare è l’architettura a due livelli con web server) e il livello subordinato di database. La possibilità di **scalare i livelli in modo indipendente** è vantaggiosa per molti progetti. Terraform si rivela uno strumento ideale: ogni livello può essere descritto come una raccolta di risorse. Inoltre, il software IaC regola le **dipendenze**, ad esempio, nel caso del modello citato assicura che il livello del database sia disponibile prima dell’avvio del server web.

### Rete definita dal software (SDN)

La [rete definita dal software](https://www.ionos.it/digitalguide/server/know-how/software-defined-networking/) (Software Defined Networking) sta diventando sempre più importante nei data center. La **gestione controllata da software delle risorse di rete virtualizzate** offre ad amministratori e sviluppatori un alto grado di controllo e flessibilità. Terraform consente di scrivere una **configurazione completa** per questi servizi SDN e di utilizzarla per impostare e personalizzare automaticamente le strutture di rete definite dal software. Tra le altre cose, Terraform supporta la famosissima soluzione SDN [Amazon Virtual Private Cloud (Amazon VPC)](https://aws.amazon.com/it/vpc/ "Risorse AWS nella propria rete virtuale: Amazon VPC").

Consiglio Con l’[Enterprise Cloud](https://cloud.ionos.it/compute "La soluzione cloud per la vostra azienda: Enterprise Cloud di IONOS") e il [Data Center Designer](https://cloud.ionos.it/data-center-designer "Data Center Designer: l'interfaccia grafica di Enterprise Cloud") anche IONOS offre una soluzione per le aziende di rete definita dal software!

### Approccio multi-cloud

Per molti manager, la distribuzione dell’infrastruttura su più cloud è un modello estremamente interessante. La distribuzione tra più provider aumenta la **tolleranza agli errori** e la **disponibilità**, oltre che rendere più facile recuperare le risorse perdute rispetto a quando ci si affida ad un unico fornitore. Grazie alla sua sintassi universale, Terraform semplifica la creazione di tali strutture multi-cloud. Inoltre, l’applicazione può gestire più provider con una singola configurazione e persino gestire le dipendenze cross-cloud.

[YouTube video](https://www.youtube.com/watch?v=bsl0TrQv9EY)## Terraform: vantaggi e svantaggi in sintesi

Infrastructure as Code vi aiuta a rimanere competitivi in un ambiente IT in costante cambiamento. Un **alto livello di automazione** vi aiuta a tenere traccia delle risorse di cui avete bisogno e ad apportare le modifiche infrastrutturali necessarie nel più breve tempo possibile. Terraform si dimostra uno strumento efficace sia per la creazione che per l’esecuzione di infrastrutture “programmabili”, anche grazie al **supporto di servizi cloud come AWS, Azure e Google Cloud**. Uno dei maggiori punti di forza del software IaC è la sua **sintassi uniforme per descrivere l’infrastruttura**. Tuttavia, avete sempre la scelta tra il linguaggio di configurazione HashiCorp HCL e il linguaggio di markup JSON.

N.B. Tra i diversi plug-in disponibili di Terraform rientra, tra gli altri, anche l’estensione [“IONOS Provider“](https://www.terraform.io/docs/providers/oneandone/index.html?Provider%22%22 "Plug-in di Terraform 1&amp;1"), che consente al tool IaC di **accedere** all’[API IONOS Cloud Server](https://cloudpanel-api.ionos.com/documentation/ "Pagina informativa sull'API di Cloud Server di IONOS"), permettendo così anche la configurazione e la gestione delle risorse del cloud server nei data center di IONOS.

Un ulteriore vantaggio di Terraform è la **struttura basata su plug-in**, che consente sia al produttore che a fornitori terzi di ampliare le funzionalità del software in qualsiasi momento. Nel caso di estensioni del produttore, Terraform le scarica automaticamente senza che sia necessario avviare l’aggiornamento. Inoltre, la soluzione open source convince con caratteristiche come la **funzione di archiviazione**, grazie alla quale è possibile richiamare e adattare comodamente, in qualsiasi momento, la configurazione dell’infrastruttura una volta che è stata impostata, così come la possibilità di generare un **grafico di dipendenza** per tutte le fasi di creazione ed esecuzione di IaC.

Anche in termini di **costi**, Terraform fa una buona figura grazie all’approccio open source: l’uso del software IaC è fondamentalmente gratuito. Tuttavia, se avete bisogno di **funzionalità di collaborazione** come il collegamento alla gestione della versione di vostra scelta o la possibilità di gestire le risorse con Terraform tramite accesso remoto, dipendete dai piani aziendali relativamente costosi. In questo caso le piccole imprese possono raggiungere rapidamente i loro limiti finanziari. Inoltre, indipendentemente dall’edizione che scegliete, dovete essere preparati per un **inizio impegnativo e dispendioso**. Una volta che avete familiarizzato con il funzionamento di Terraform e con il suo linguaggio HCL, potete usare questo strumento lasciandovi alle spalle il noioso lavoro di routine e la laboriosa gestione delle risorse interservizi.

<table>
  <thead>
    <tr>
      <th>Vantaggi di Terraform</th>
      <th>Svantaggi di Terraform</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Open source</td>
      <td>Fase iniziale impegnativa</td>
    </tr>
    <tr>
      <td>Sintassi uniforme per Infrastructure as Code</td>
      <td>Nessuna funzione automatica di rollback per modifiche errate sulle risorse</td>
    </tr>
    <tr>
      <td>Supporto di diverse soluzioni cloud</td>
      <td>Funzioni di collaborazione e sicurezza disponibili solo in piani aziendali costosi</td>
    </tr>
    <tr>
      <td>Ampliabile per gradi</td>
      <td></td>
    </tr>
    <tr>
      <td>Funzione di memorizzazione e importazione per architetture esistenti</td>
      <td></td>
    </tr>
    <tr>
      <td>Possibilità di generare grafici di dipendenza</td>
      <td></td>
    </tr>
  </tbody>
</table>


This is a markdown version of: [https://www.ionos.it/digitalguide/server/tools-o-strumenti/cose-terraform/](https://www.ionos.it/digitalguide/server/tools-o-strumenti/cose-terraform/) for AI/LLM consumption.