Oggi, sempre più aziende uti­liz­za­no il cloud per im­ple­men­ta­re ambienti di lavoro o anche strutture IT complete. In­fra­struc­tu­re as a Service (IaaS) è in molti casi il modo semplice ed economico per creare la base per i progetti pia­ni­fi­ca­ti. Le soluzioni cloud con­sen­to­no inoltre di reagire con pre­ci­sio­ne alle esigenze attuali: mentre i com­po­nen­ti sot­to­stan­ti come server, firewall o load balancer sono statici nel data center del provider, le soluzioni cloud possono essere mo­di­fi­ca­te di­na­mi­ca­men­te in un ambiente cloud vir­tua­liz­za­to, dando ai clienti la pos­si­bi­li­tà di aumentare o diminuire le risorse in qualsiasi momento.

Per garantire questa fles­si­bi­li­tà, i provider for­ni­sco­no API che per­met­to­no di scalare in qualsiasi momento l'am­bien­te IaaS no­leg­gia­to con il software ap­pro­pria­to; libertà in­te­res­san­ti, ma che com­por­ta­no anche un elevato impegno am­mi­ni­stra­ti­vo. Con il software Terraform l'azienda sta­tu­ni­ten­se HashiCorp dà la risposta giusta per fa­ci­li­ta­re il lavoro nel lungo periodo. Di che cosa si occupa questo strumento In­fra­struc­tu­re as Code (IaC) è spiegato di seguito.

Compute Engine
La soluzione IaaS ideale per i tuoi carichi di lavoro
  • vCPU estre­ma­men­te van­tag­gio­se e potenti core dedicati
  • Massima fles­si­bi­li­tà senza periodo con­trat­tua­le minimo
  • Servizio di as­si­sten­za tecnica 24 ore su 24, 7 giorni su 7

Che cos'è Terraform?

Quando si tratta del­l'in­fra­strut­tu­ra di base dello sviluppo del software, gli am­mi­ni­stra­to­ri sono sempre in dif­fi­col­tà: la tendenza allo sviluppo agile porta a cicli di sviluppo sempre più brevi e a un'im­ple­men­ta­zio­ne ancora più veloce dei cam­bia­men­ti. Per sod­di­sfa­re le elevate esigenze di questo ritmo veloce, i re­spon­sa­bi­li IT devono au­to­ma­tiz­za­re il più possibile la gestione delle risorse. Ciò comporta la scrittura di un codice di con­fi­gu­ra­zio­ne leggibile dal computer, noto anche come In­fra­struc­tu­re as Code (IaC, in italiano: "In­fra­strut­tu­ra come codice").

Per sem­pli­fi­ca­re questo processo, i re­spon­sa­bi­li IT possono ricorrere ai servizi del software Terraform, che da un lato permette una de­scri­zio­ne uniforme del­l'in­fra­strut­tu­ra target e dal­l'al­tro ga­ran­ti­sce che questa sia im­ple­men­ta­ta come de­si­de­ra­to dai provider IaaS sup­por­ta­ti. Inoltre, il software consente di me­mo­riz­za­re i setup del­l'in­fra­strut­tu­ra fornita in modo che possano essere riu­ti­liz­za­ti suc­ces­si­va­men­te, ampliati o adattati in qualsiasi modo.

Terraform è fon­da­men­tal­men­te un software open source (Mozilla Public License 2.0) e può quindi essere scaricato e uti­liz­za­to gra­tui­ta­men­te. Tuttavia, diverse funzioni per la col­la­bo­ra­zio­ne in team così come per le isti­tu­zio­ni e le or­ga­niz­za­zio­ni pubbliche sono di­spo­ni­bi­li solo nelle edizioni a pagamento "En­ter­pri­se Pro" e "En­ter­pri­se Premium". Il servizio IaC Service 2012 è stato svi­lup­pa­to dalla HashiCorp di San Francisco.

N.B.
Terraform collabora con oltre 160 partner dif­fe­ren­ti. Tra questi si an­no­ve­ra­no Amazon Web Services (AWS), Atlassian, Clou­d­fla­re, Google, Microsoft e Oracle. Trovate un elenco completo di tutti i partner sul sito ufficiale di HashiCorp.

In che modo Terraform supporta gli utenti nella con­ce­zio­ne del­l'In­fra­struc­tu­re as Code (IaC)?

Poiché di solito per im­ple­men­ta­re l'in­fra­strut­tu­ra IT o le risorse ne­ces­sa­rie per lo sviluppo del software vengono uti­liz­za­ti non solo uno, ma diversi servizi cloud, il re­spon­sa­bi­le deve adattarsi di default a diverse in­ter­fac­ce (API) e fa­mi­lia­riz­za­re con le pe­cu­lia­ri­tà della ri­spet­ti­va piat­ta­for­ma. Questo vale in­di­pen­den­te­men­te dal fatto che si vogliano con­trol­la­re ma­nual­men­te queste API nel momento in cui si apportano modifiche al­l'in­fra­strut­tu­ra o che si vogliano scrivere le proprie istru­zio­ni IaC per l'accesso au­to­ma­ti­co.

Gli utenti di Terraform non hanno questo problema: invece dei linguaggi di in­ter­fac­cia, si può usare il lin­guag­gio di markup Ja­va­Script sem­pli­fi­ca­to, JSON, o il lin­guag­gio di con­fi­gu­ra­zio­ne HashiCorp Con­fi­gu­ra­tion Language (HCL), basato su JSON, per de­scri­ve­re l'in­fra­strut­tu­ra di de­sti­na­zio­ne de­si­de­ra­ta. Que­st'ul­ti­ma è l'opzione rac­co­man­da­ta da HashiCorp in quanto rende ancora più facile scrivere e leggere il codice at­tra­ver­so commenti e altre funzioni. Terraform si aspetta i ri­spet­ti­vi file di con­fi­gu­ra­zio­ne come normali file di testo, anche se lo strumento IaC utilizza l'e­sten­sio­ne .tf. Uti­liz­zan­do uno strumento ap­pro­pria­to come Git o SVN, è possibile risalire fa­cil­men­te alle diverse versioni di questi file, se lo si desidera.

N.B.
Anche se le istru­zio­ni non devono essere re­gi­stra­te nelle forme tipiche standard delle in­ter­fac­ce, Terraform ha bisogno delle chiavi API per co­mu­ni­ca­re con i ri­spet­ti­vi servizi e per poter adattare o im­ple­men­ta­re l'in­fra­strut­tu­ra così come definita nel file di con­fi­gu­ra­zio­ne .tf.

I più im­por­tan­ti com­po­nen­ti Terraform in sintesi

Il compito prin­ci­pa­le di Terraform è la con­fi­gu­ra­zio­ne user-friendly delle risorse in­fra­strut­tu­ra­li, in cui il markup in HCL o JSON gioca un ruolo centrale. Tuttavia, la sem­pli­ci­tà lin­gui­sti­ca non è as­so­lu­ta­men­te l'unica cosa che distingue lo strumento IaC: solo grazie alla col­la­bo­ra­zio­ne con tutti i prin­ci­pa­li fornitori di software e hardware e in com­bi­na­zio­ne con l'ar­chi­tet­tu­ra di base am­plia­bi­le in­di­vi­dual­men­te e l'in­ter­fac­cia a riga di comando facile da usare i file di con­fi­gu­ra­zio­ne creati possono ottenere l'effetto de­si­de­ra­to. Le sezioni seguenti for­ni­sco­no una breve pa­no­ra­mi­ca dei vari com­po­nen­ti Terraform per il­lu­stra­re le fun­zio­na­li­tà del software IaC.

Lin­guag­gio di con­fi­gu­ra­zio­ne HCL

Il già men­zio­na­to lin­guag­gio di con­fi­gu­ra­zio­ne HashiCorp ha lo scopo prin­ci­pa­le di de­scri­ve­re il risultato de­si­de­ra­to e non i passaggi necessari per rag­giun­ger­lo. L'e­le­men­to più im­por­tan­te del lin­guag­gio Terraform sono le risorse, perché de­scri­vo­no i com­po­nen­ti in­fra­strut­tu­ra­li la cui gestione deve essere au­to­ma­tiz­za­ta con Terraform. Tutte le altre funzioni di questo lin­guag­gio esistono esclu­si­va­men­te per spe­ci­fi­ca­re le ri­spet­ti­ve risorse. I seguenti tre elementi di base svolgono un ruolo im­por­tan­te:

  • Blocchi: i blocchi sono con­te­ni­to­ri per il contenuto. In questa funzione for­ni­sco­no spazio per le con­fi­gu­ra­zio­ni di qualsiasi oggetto, spe­cial­men­te per le risorse con­fi­gu­ra­te. Ogni blocco ha un tipo di blocco, una o più etichette e un'area del corpo. Que­st'ul­ti­mo contiene un numero il­li­mi­ta­to di argomenti e sot­to­bloc­chi.
  • Argomenti: per assegnare un valore a un nome, uti­liz­za­te argomenti in HCL. Questi sono sempre di­chia­ra­ti al­l'in­ter­no di blocchi.
  • Espres­sio­ni: le espres­sio­ni rap­pre­sen­ta­no un valore. Questo può essere un valore concreto o un ri­fe­ri­men­to a uno o più valori. Un'e­spres­sio­ne si verifica come valore per un argomento o al­l'in­ter­no di altri argomenti.

L'HCL è un lin­guag­gio di­chia­ra­ti­vo, in cui la sequenza dei singoli blocchi non è rilevante. Terraform elabora au­to­ma­ti­ca­men­te le risorse descritte nella corretta sequenza basata su relazioni pre­de­fi­ni­te. Solo nei co­sid­det­ti blocchi del fornitore (in inglese "Pro­vi­sio­ner blocks"), necessari per l'e­se­cu­zio­ne degli script, la sequenza è im­por­tan­te.

Terraform CLI (in­ter­fac­cia a riga di comando)

Terraform fornisce una propria in­ter­fac­cia a riga di comando in modo che i file di con­fi­gu­ra­zio­ne creati possano essere valutati e uti­liz­za­ti. Questa in­ter­fac­cia definisce la sintassi e la struttura com­ples­si­va del lin­guag­gio Terraform e coordina tutte le fasi di modifica ne­ces­sa­rie per im­ple­men­ta­re l'in­fra­strut­tu­ra con­fi­gu­ra­ta. La stessa CLI non ha alcuna co­no­scen­za di tipi specifici di risorse in­fra­strut­tu­ra­li, ma ottiene queste in­for­ma­zio­ni at­tra­ver­so speciali esten­sio­ni "provider". In questo modo, l'in­ter­fac­cia sa come definire e gestire i singoli tipi di risorse presso i fornitori di cloud sup­por­ta­ti e quindi anche come tra­smet­te­re le istru­zio­ni formulate uni­ver­sal­men­te nei file di con­fi­gu­ra­zio­ne Terraform alle varie API del cloud.

N.B.
Un'in­ter­fac­cia testuale prende il nome di CLI (Command Line Interface) quando le persone tra­smet­to­no istru­zio­ni al computer tramite im­mis­sio­ne di comandi. Questo concetto si dif­fe­ren­zia dal­l'u­ti­liz­zo dei computer at­tra­ver­so elementi di controllo grafici come icone, menu o pulsanti. Per que­st'ul­ti­mo tipo di na­vi­ga­zio­ne si parla di un'in­ter­fac­cia grafica o di una GUI (Graphical User Interface).

Funzione di me­mo­riz­za­zio­ne e im­por­ta­zio­ne

Al fine di allocare risorse reali per la con­fi­gu­ra­zio­ne, tenere traccia dei metadati e mi­glio­ra­re con­ti­nua­men­te le pre­sta­zio­ni delle in­fra­strut­tu­re più grandi, Terraform memorizza lo stato delle risorse e la con­fi­gu­ra­zio­ne di IaC creata. Per im­po­sta­zio­ne pre­de­fi­ni­ta, il software memorizza il file terraform.tfstate in una directory locale; in al­ter­na­ti­va, è possibile se­le­zio­na­re una posizione diversa, par­ti­co­lar­men­te indicata per il lavoro di squadra. Per con­fron­ta­re ogni volta lo stato con l'in­fra­strut­tu­ra corrente, Terraform aggiorna au­to­ma­ti­ca­men­te la CLI prima di ogni ope­ra­zio­ne di programma.

N.B.
Per la me­mo­riz­za­zio­ne dello stato non in locale e per l'e­se­cu­zio­ne delle ope­ra­zio­ni (possibile solo con le versioni "En­ter­pri­se Pro" e "En­ter­pri­se Premium"), Terraform utilizza back end specifici al posto dei back end locali pre­de­fi­ni­ti. Per essere uti­liz­za­ti questi livelli par­ti­co­la­ri di astra­zio­ne devono essere definiti di­ret­ta­men­te nel file di con­fi­gu­ra­zio­ne e ini­zia­liz­za­ti tramite la CLI.

Se avete creato un'in­fra­strut­tu­ra con altri mezzi, potete importare questa con­fi­gu­ra­zio­ne esistente grazie alla funzione integrata per gestire in futuro le risorse cor­ri­spon­den­ti con Terraform. At­tual­men­te solo le risorse, ma non la loro con­fi­gu­ra­zio­ne, vengono aggiunte allo stato attuale. Que­st'ul­ti­mo, tuttavia, dovrebbe essere possibile nelle future versioni dello strumento IaC.

Grafico di di­pen­den­za

Terraform consente di creare un grafico delle di­pen­den­ze della con­fi­gu­ra­zio­ne del­l'in­fra­strut­tu­ra definita o del piano di ese­cu­zio­ne. Basta usare il comando CLI "grafico terraform" e definire il tipo di grafico de­si­de­ra­to, e Terraform genererà au­to­ma­ti­ca­men­te un cor­ri­spon­den­te file di output in formato DOT. Questo può essere ri­pro­dot­to uti­liz­zan­do il software di vi­sua­liz­za­zio­ne Graphviz, che HashiCorp rac­co­man­da anche nella do­cu­men­ta­zio­ne ufficiale online. La riga di comando può anche essere usata per con­ver­ti­re fa­cil­men­te il file in un formato immagine come SVG.

Plug-in di Terraform

Terraform si basa su un'ar­chi­tet­tu­ra basata su plug-in che consente di ampliare le fun­zio­na­li­tà della suite IaC in qualsiasi momento. Ad esempio, i pro­vi­sio­ners per l'e­se­cu­zio­ne degli script rientrano tra i plug-in, così come le esten­sio­ni dei provider che for­ni­sco­no alla CLI tutte le in­for­ma­zio­ni rilevanti sui servizi web sup­por­ta­ti. Gli svi­lup­pa­to­ri che pa­dro­neg­gia­no il lin­guag­gio di pro­gram­ma­zio­ne Go(lang) e hanno co­no­scen­za delle API del provider cor­ri­spon­den­te possono anche scrivere le proprie esten­sio­ni per collegare Terraform con servizi cloud non uf­fi­cial­men­te sup­por­ta­ti. I plug-in appena ri­la­scia­ti da HashiCorp vengono scaricati e inclusi au­to­ma­ti­ca­men­te, mentre tutte le esten­sio­ni di terze parti ri­chie­do­no un'in­stal­la­zio­ne manuale.

Casi d'uso: quali sono i tipici campi di ap­pli­ca­zio­ne di Terraform?

Grazie alla vasta gamma di fornitori di servizi cloud sup­por­ta­ti, che HashiCorp continua ad aumentare e che può anche essere ampliata au­to­no­ma­men­te con il relativo know-how, Terraform è adatto per un'ampia varietà di ap­pli­ca­zio­ni. Tra i casi d'uso più popolari dello strumento In­fra­struc­tu­re as Code ci sono i seguenti tre:

Con­fi­gu­ra­zio­ne del­l'ap­pli­ca­zio­ne Heroku

Heroku è uno dei più noti provider PaaS per ospitare le proprie ap­pli­ca­zio­ni web. Tutti gli strumenti e i servizi necessari per l'ap­pli­ca­zio­ne possono essere inseriti sotto forma di com­po­nen­ti ag­giun­ti­vi e mo­ni­to­ra­ti tramite la dashboard della piat­ta­for­ma. Terraform vi al­leg­ge­ri­sce il lavoro, non solo scrivendo il codice per la con­fi­gu­ra­zio­ne della vostra ap­pli­ca­zio­ne, ma anche as­si­cu­ran­do­si che tutti i com­po­nen­ti ag­giun­ti­vi necessari siano sempre di­spo­ni­bi­li.

Ap­pli­ca­zio­ni a più livelli (Multi-Tier Ap­pli­ca­tions)

L'ar­chi­tet­tu­ra a livelli si è di­mo­stra­ta un concetto di strut­tu­ra­zio­ne per sistemi software (par­ti­co­lar­men­te popolare è l'ar­chi­tet­tu­ra a due livelli con web server) e il livello su­bor­di­na­to di database. La pos­si­bi­li­tà di scalare i livelli in modo in­di­pen­den­te è van­tag­gio­sa 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 di­pen­den­ze, ad esempio, nel caso del modello citato assicura che il livello del database sia di­spo­ni­bi­le prima del­l'av­vio del server web.

Managed Nextcloud
La nuova soluzione di cloud storage
  • Pieno controllo sui tuoi dati
  • Ag­gior­na­men­ti au­to­ma­ti­ci
  • Espan­di­bi­le con app e strumenti di col­la­bo­ra­zio­ne

Rete definita dal software (SDN)

La rete definita dal software (Software Defined Net­wor­king) sta di­ven­tan­do sempre più im­por­tan­te nei data center. La gestione con­trol­la­ta da software delle risorse di rete vir­tua­liz­za­te offre ad am­mi­ni­stra­to­ri e svi­lup­pa­to­ri un alto grado di controllo e fles­si­bi­li­tà. Terraform consente di scrivere una con­fi­gu­ra­zio­ne completa per questi servizi SDN e di uti­liz­zar­la per impostare e per­so­na­liz­za­re au­to­ma­ti­ca­men­te le strutture di rete definite dal software. Tra le altre cose, Terraform supporta la fa­mo­sis­si­ma soluzione SDN Amazon Virtual Private Cloud (Amazon VPC).

Consiglio

Con l'En­ter­pri­se Cloud e il Data Center Designer anche IONOS offre una soluzione per le aziende di rete definita dal software!

Approccio multi-cloud

Per molti manager, la di­stri­bu­zio­ne del­l'in­fra­strut­tu­ra su più cloud è un modello estre­ma­men­te in­te­res­san­te. La di­stri­bu­zio­ne tra più provider aumenta la tol­le­ran­za agli errori e la di­spo­ni­bi­li­tà, oltre che rendere più facile re­cu­pe­ra­re le risorse perdute rispetto a quando ci si affida ad un unico fornitore. Grazie alla sua sintassi uni­ver­sa­le, Terraform sem­pli­fi­ca la creazione di tali strutture multi-cloud. Inoltre, l'ap­pli­ca­zio­ne può gestire più provider con una singola con­fi­gu­ra­zio­ne e persino gestire le di­pen­den­ze cross-cloud.

Terraform: vantaggi e svantaggi in sintesi

In­fra­struc­tu­re as Code vi aiuta a rimanere com­pe­ti­ti­vi in un ambiente IT in costante cam­bia­men­to. Un alto livello di au­to­ma­zio­ne vi aiuta a tenere traccia delle risorse di cui avete bisogno e ad apportare le modifiche in­fra­strut­tu­ra­li ne­ces­sa­rie nel più breve tempo possibile. Terraform si dimostra uno strumento efficace sia per la creazione che per l'e­se­cu­zio­ne di in­fra­strut­tu­re "pro­gram­ma­bi­li", 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 de­scri­ve­re l'in­fra­strut­tu­ra. Tuttavia, avete sempre la scelta tra il lin­guag­gio di con­fi­gu­ra­zio­ne HashiCorp HCL e il lin­guag­gio di markup JSON.

N.B.

Tra i diversi plug-in di­spo­ni­bi­li di Terraform rientra, tra gli altri, anche l'e­sten­sio­ne "IONOS Provider", che consente al tool IaC di accedere all'API IONOS Cloud Server, per­met­ten­do così anche la con­fi­gu­ra­zio­ne 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 pro­dut­to­re che a fornitori terzi di ampliare le fun­zio­na­li­tà del software in qualsiasi momento. Nel caso di esten­sio­ni del pro­dut­to­re, Terraform le scarica au­to­ma­ti­ca­men­te senza che sia ne­ces­sa­rio avviare l'ag­gior­na­men­to. Inoltre, la soluzione open source convince con ca­rat­te­ri­sti­che come la funzione di ar­chi­via­zio­ne, grazie alla quale è possibile ri­chia­ma­re e adattare co­mo­da­men­te, in qualsiasi momento, la con­fi­gu­ra­zio­ne del­l'in­fra­strut­tu­ra una volta che è stata impostata, così come la pos­si­bi­li­tà di generare un grafico di di­pen­den­za per tutte le fasi di creazione ed ese­cu­zio­ne di IaC.

Anche in termini di costi, Terraform fa una buona figura grazie al­l'ap­proc­cio open source: l'uso del software IaC è fon­da­men­tal­men­te gratuito. Tuttavia, se avete bisogno di fun­zio­na­li­tà di col­la­bo­ra­zio­ne come il col­le­ga­men­to alla gestione della versione di vostra scelta o la pos­si­bi­li­tà di gestire le risorse con Terraform tramite accesso remoto, dipendete dai piani aziendali re­la­ti­va­men­te costosi. In questo caso le piccole imprese possono rag­giun­ge­re ra­pi­da­men­te i loro limiti fi­nan­zia­ri. Inoltre, in­di­pen­den­te­men­te dal­l'e­di­zio­ne che scegliete, dovete essere preparati per un inizio im­pe­gna­ti­vo e di­spen­dio­so. Una volta che avete fa­mi­lia­riz­za­to con il fun­zio­na­men­to di Terraform e con il suo lin­guag­gio HCL, potete usare questo strumento la­scian­do­vi alle spalle il noioso lavoro di routine e la laboriosa gestione delle risorse in­ter­ser­vi­zi.

Vantaggi di Terraform Svantaggi di Terraform
Open source Fase iniziale im­pe­gna­ti­va
Sintassi uniforme per In­fra­struc­tu­re as Code Nessuna funzione au­to­ma­ti­ca di rollback per modifiche errate sulle risorse
Supporto di diverse soluzioni cloud Funzioni di col­la­bo­ra­zio­ne e sicurezza di­spo­ni­bi­li solo in piani aziendali costosi
Am­plia­bi­le per gradi  
Funzione di me­mo­riz­za­zio­ne e im­por­ta­zio­ne per ar­chi­tet­tu­re esistenti  
Pos­si­bi­li­tà di generare grafici di di­pen­den­za  
Vai al menu prin­ci­pa­le