Table of Contents

Introduzione all’uso di TeraForm per le applicazioni Infrastructure as code

Man mano che un numero sempre maggiore di organizzazioni trasferisce la propria infrastruttura nel cloud, la necessità di gestirla in modo efficace diventa fondamentale. È qui che entra in gioco l’Infrastructure as Code (IaC). L’IaC è il processo di gestione e provisioning dell’infrastruttura attraverso il codice, anziché attraverso processi manuali. Ciò consente una maggiore coerenza, velocità e affidabilità nella gestione dell’infrastruttura. Uno degli strumenti più diffusi per l’IaC è Teraform.

Che cos’è Teraform?

Teraform è uno strumento software open-source di infrastructure as code che consente agli utenti di scrivere, pianificare e creare infrastrutture come codice. Sviluppato da HashiCorp, Teraform consente agli utenti di gestire l’infrastruttura su vari provider cloud, tra cui AWS, Azure e Google Cloud Platform. Con Teraform, gli utenti possono definire la loro infrastruttura come codice in file di configurazione, applicare il codice per creare o aggiornare l’infrastruttura e quindi distruggere l’infrastruttura quando non è più necessaria.

Vantaggi dell’uso di Teraform

L’uso di Teraform per le applicazioni infrastructure as code offre diversi vantaggi, tra cui:

  • Efficienza e velocità: Teraform consente una gestione dell’infrastruttura più rapida ed efficiente, eliminando la necessità di processi manuali.

  • Consistenza: Utilizzando il codice per definire l’infrastruttura, Teraform garantisce la coerenza tra gli ambienti.

  • Scalabilità:** Teraform consente di scalare facilmente l’infrastruttura per soddisfare le esigenze crescenti.

  • Collaborazione:** I file di configurazione di Teraform possono essere controllati in versione e condivisi tra i membri del team, facilitando la collaborazione.

  • Risparmio sui costi: La capacità di Teraform di effettuare facilmente il provisioning e il deprovisioning delle risorse può portare a un risparmio sui costi.

Iniziare con Teraform

Per iniziare con Teraform, è necessario:

  1. Scaricare Teraform: Teraform può essere scaricato dal sito web official website

  2. **Teraform utilizza file di configurazione scritti in HashiCorp Configuration Language (HCL) o JSON. Il file di configurazione definisce l’infrastruttura che si desidera creare, aggiornare o cancellare.

Per utilizzare Terraform, è necessario creare un file di configurazione per definire l’infrastruttura desiderata. Il file di configurazione specifica le risorse da creare, le loro proprietà e le loro dipendenze.

I file di configurazione possono essere scritti in HashiCorp Configuration Language (HCL), un linguaggio progettato per essere leggibile dall’uomo e facile da imparare, o in formato JSON. La sintassi di HCL è simile a quella di altri linguaggi di programmazione, con blocchi, attributi e valori.

Ecco un esempio di un file di configurazione Terraform di base in formato HCL che crea un’istanza AWS EC2:

provider "aws" {
  region = "us-west-2"
}

resource "aws_instance" "example" {
  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = "t2.micro"
}

In questo esempio, il file di configurazione specifica il provider aws e crea una risorsa aws_instance con una Amazon Machine Image (AMI) e un tipo di istanza.

Per un esempio più avanzato, si veda il seguente esempio di utilizzo di Terraform per configurare sistemi con VMWare:

provider "vsphere" {
  user           = "[email protected]"
  password       = "password"
  vsphere_server = "vcenter.example.com"
}

data "vsphere_datacenter" "dc" {
  name = "Datacenter"
}

data "vsphere_datastore" "ds" {
  name          = "Datastore"
  datacenter_id = data.vsphere_datacenter.dc.id
}

data "vsphere_network_interface" "nic" {
  label          = "Network adapter 1"
  datacenter_id  = data.vsphere_datacenter.dc.id
  network_id     = "VM Network"
}

resource "vsphere_virtual_machine" "vm" {
  name             = "terraform-vm"
  folder           = "/terraform"
  num_cpus         = 2
  memory           = 2048
  guest_id         = "otherLinux64Guest"
  scsi_type        = "pvscsi"
  datastore_id     = data.vsphere_datastore.ds.id

  network_interface {
    network_id = data.vsphere_network_interface.nic.network_id
  }

  disk {
    label            = "disk0"
    size             = 20
    eagerly_scrub    = true
    thin_provisioned = true
  }

  clone {
    template_uuid = "template-uuid"
  }
}

In questo esempio, il file di configurazione specifica il provider vsphere e crea una risorsa vsphere_virtual_machine con un nome, una cartella, un numero di CPU, una quantità di memoria, un sistema operativo guest, un tipo SCSI e impostazioni del disco specificati. Inoltre, clona la macchina virtuale da un modello specificato.

Il file di configurazione utilizza anche blocchi di dati per interrogare l’infrastruttura vSphere per ottenere informazioni sul datacenter, sul datastore e sull’interfaccia di rete da utilizzare per la risorsa macchina virtuale.

Una volta creato, il file di configurazione può essere utilizzato per creare, aggiornare o eliminare le risorse dell’infrastruttura.

  1. **Una volta creato il file di configurazione, è possibile inizializzare Teraform eseguendo il comandoterraform init comando. Questo scaricherà tutti i plugin e i moduli necessari.

Per esempio, se si ha un file di configurazione chiamatomain.tf in una directory denominataterraform-example è possibile inizializzare Terraform eseguendo il seguente comando nella cartellaterraform-example directory:terraform init

Questo scaricherà tutti i plugin e i moduli necessari specificati nel file di configurazione.

  1. Pianificazione e applicazione dell’infrastruttura: dopo l’inizializzazione, è possibile eseguire il programmaterraform plan per vedere quali modifiche verranno apportate all’infrastruttura e quindi applicare le modifiche utilizzando il comandoterraform apply comando.

Dopo l’inizializzazione, è possibile pianificare le modifiche da apportare all’infrastruttura utilizzando il comandoterraform plan comando. Questo mostra quali risorse verranno create, aggiornate o eliminate. Per esempio, se si ha un file di configurazione chiamatomain.tf in una directory denominataterraform-example è possibile pianificare le modifiche all’infrastruttura eseguendo il seguente comando:

terraform plan

Questo mostra un’anteprima delle modifiche che verranno apportate all’infrastruttura.

Una volta soddisfatti delle modifiche, è possibile applicarle utilizzando il comandoterraform apply comando. Ad esempio, se si dispone di un file di configurazione denominatomain.tf in una directory denominataterraform-example è possibile applicare le modifiche all’infrastruttura eseguendo il seguente comando:

terraform apply

Questa operazione applicherà le modifiche all’infrastruttura. L’applicazione delle modifiche può richiedere del tempo, a seconda delle dimensioni e della complessità dell’infrastruttura.

Migliori pratiche per l’uso di Teraform

Per essere certi di utilizzare Teraform in modo efficace, si consiglia di seguire le seguenti best practice:

  • Usare il controllo della versione ** Memorizzare i file di configurazione di Teraform nel controllo della versione per consentire la collaborazione e garantire la tracciabilità delle modifiche.

  • Usare i moduli:** Usare i moduli di Teraform per organizzare e riutilizzare il codice.

  • Separare le configurazioni:** Separare le configurazioni per ambiente (ad esempio, dev, staging, prod) per garantire la coerenza ed evitare la deriva della configurazione.

  • Validare le modifiche: Prima di applicare le modifiche all’infrastruttura, convalidarle usando la funzioneterraform plan comando.

Conclusione

Teraform è un potente strumento di infrastructure as code che consente una gestione dell’infrastruttura più rapida, efficiente e coerente. Utilizzando Teraform, le organizzazioni possono risparmiare tempo e denaro, migliorando al contempo la collaborazione e la scalabilità. Seguendo le best practice e iniziando a lavorare con Teraform, potrete sfruttare questi vantaggi e gestire la vostra infrastruttura in modo più efficace.


Riferimenti:

- Teraform Official Website - Teraform Documentation - AWS Best Practices for Security, Identity, & Compliance