Terraform
Oggi, sempre più aziende utilizzano il cloud per implementare ambienti di lavoro o anche strutture IT complete. Infrastructure as a Service (IaaS) è 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, firewall o load balancer 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 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.
- vCPU estremamente vantaggiose e potenti core dedicati
- Massima flessibilità senza periodo contrattuale minimo
- Servizio di assistenza tecnica 24 ore su 24, 7 giorni su 7
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 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").
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.
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.
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.
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, è possibile risalire facilmente alle diverse versioni di questi file, se lo si desidera.
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.
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.
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, 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.
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) 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 è uno dei più noti provider 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.
- Pieno controllo sui tuoi dati
- Aggiornamenti automatici
- Espandibile con app e strumenti di collaborazione
Rete definita dal software (SDN)
La rete definita dal software (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).
Con l'Enterprise 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 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.
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.
Tra i diversi plug-in disponibili di Terraform rientra, tra gli altri, anche l'estensione "IONOS Provider", che consente al tool IaC di accedere all'API IONOS Cloud Server, 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.
Vantaggi di Terraform | Svantaggi di Terraform |
---|---|
Open source | Fase iniziale impegnativa |
Sintassi uniforme per Infrastructure as Code | Nessuna funzione automatica di rollback per modifiche errate sulle risorse |
Supporto di diverse soluzioni cloud | Funzioni di collaborazione e sicurezza disponibili solo in piani aziendali costosi |
Ampliabile per gradi | |
Funzione di memorizzazione e importazione per architetture esistenti | |
Possibilità di generare grafici di dipendenza |