Terraform cheatsheet - comandi utili ed esempi

L'elenco di tutti i comandi di terraform

Indice

Ecco una completa guida rapida di Terraform
con comandi essenziali, elementi di configurazione, gestione delle risorse, moduli, variabili, gestione dello stato e best practice.

Terraform è uno strumento open source per l’infrastruttura come codice (IaC) sviluppato da
HashiCorp,
che consente agli utenti di definire e provvedere all’infrastruttura su diversi provider cloud (es. AWS, Azure, GCP) utilizzando file di configurazione dichiarativi.
Lo scopo principale è automatizzare la provisioning dell’infrastruttura, garantire la coerenza e ridurre gli errori manuali.
Terraform supporta multi-cloud, modulari e workflow basati sullo stato, rendendolo un pilastro delle moderne pratiche DevOps.

studente che utilizza terraform

Vantaggi principali di Terraform:

  • Sintassi dichiarativa: Definisci lo stato desiderato dell’infrastruttura nel codice.
  • Agnostico dei provider: Funziona con AWS, Azure, GCP, Kubernetes e altro.
  • Gestione dello stato: Traccia i cambiamenti dell’infrastruttura per evitare conflitti.

Guida all’installazione e configurazione

https://developer.hashicorp.com/terraform/tutorials#get-started

L’installazione di Terraform è abbastanza semplice.

  • Linux (Ubuntu/Debian):

    wget -O - https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
    echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(grep -oP '(?<=UBUNTU_CODENAME=).*' /etc/os-release || lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
    sudo apt update && sudo apt install terraform
    
  • Windows (WSL):

    wget -O terraform.zip https://releases.hashicorp.com/terraform/1.5.5/terraform_1.5.5_windows_amd64.zip
    unzip terraform.zip
    
  • macOS (Homebrew):

    brew install terraform
    

Verifica

terraform --version

Comandi della CLI di Terraform

Ecco l’elenco di tutti i comandi di Terraform:

Comando Descrizione
terraform init Inizializza una nuova o esistente directory di configurazione Terraform
terraform validate Verifica se la configurazione è valida
terraform plan Mostra il piano di esecuzione senza apportare modifiche
terraform apply Applica le modifiche necessarie per raggiungere lo stato desiderato
terraform destroy Distrugge l’infrastruttura gestita da Terraform
terraform fmt Ri-formatta i file di configurazione nello stile standard
terraform show Mostra lo stato corrente o il piano
terraform refresh Aggiorna lo stato con l’infrastruttura reale
terraform providers Mostra i provider utilizzati nella configurazione
terraform graph Visualizza le dipendenze delle risorse come un grafico
terraform workspace list Elenco di tutti gli spazi di lavoro disponibili
terraform workspace new Crea un nuovo spazio di lavoro
terraform workspace select Passa a uno spazio di lavoro specifico
terraform workspace show Mostra il nome dello spazio di lavoro corrente
terraform workspace delete Elimina uno spazio di lavoro specifico
terraform output Mostra i valori di output dal file di stato
terraform import Importa una risorsa esistente in Terraform
terraform taint Contrassegna una risorsa per la ricreazione durante l’applicazione
terraform untaint Rimuove il contrassegno da una risorsa come danneggiata
terraform state list Elenco delle risorse nel file di stato
terraform state show Mostra gli attributi di una singola risorsa nello stato

Elementi essenziali della configurazione

Estensioni dei file

  • .tf: File di configurazione principale (sintassi HCL)
  • .tfvars: Valori delle variabili

Tipi di blocchi Terraform

  • Esempio di provider
    provider "aws" {
      region = "us-east-1"
    }
    
  • Esempio di risorsa
    resource "aws_instance" "web" {
      ami           = "ami-0abcdef"
      instance_type = "t2.micro"
    }
    
  • Esempio di variabile
    variable "instance_count" {
      type    = number
      default = 2
    }
    
  • Esempio di output
    output "instance_ip" {
      value = aws_instance.web.public_ip
    }
    
  • Esempio di modulo
    module "vpc" {
      source = "./modules/vpc"
      cidr_block = var.vpc_cidr
    }
    

Lavorare con le variabili

  • Dichiarare variabili
    variable "region" {
      description = "Regione AWS"
      default     = "us-east-1"
    }
    
  • Assegnare valori
    • CLI: terraform apply -var="region=us-west-2"
    • file tfvars: terraform apply -var-file="prod.tfvars"
  • Tipi: string, number, bool, list, map, object

Gestione dello stato

  • File dello stato: terraform.tfstate
  • Stato remoto (esempio S3)
    backend "s3" {
      bucket = "my-tf-state"
      key    = "state.tfstate"
      region = "us-east-1"
    }
    
  • Visualizza lo stato:
    terraform show
    terraform state list

Cicli e condizionali

  • Count
    resource "aws_instance" "web" {
      count = 3
      ...
    }
    
  • For_each
    resource "aws_s3_bucket" "b" {
      for_each = var.bucket_names
      bucket   = each.value
    }
    
  • Condizionali
    instance_type = var.env == "prod" ? "t2.large" : "t2.micro"
    

Funzioni

  • Interpolazione di stringhe:
    resource "aws_s3_bucket" "example" { bucket = "my-bucket-${var.env}" }
  • Esempi di lista, mappa:
    locals {
      my_map = { a = 1, b = 2 }
    }
    

Provisioners

Utilizzati per l’installazione iniziale delle risorse. Esempio:

resource "aws_instance" "web" {
  ...
  provisioner "local-exec" {
    command = "echo Instance created"
  }
}

Best practice

  • Controllo versione di tutti i file .tf
  • Blocca le versioni dei provider per garantire distribuzioni coerenti
  • Backend remoto per la gestione dello stato (S3, Azure Blob, ecc.)
  • Cripta i file dello stato nei backend remoti
  • Modularizza l’infrastruttura utilizzando moduli riutilizzabili
  • Documenta le tue configurazioni
  • Testa in ambienti di staging prima della produzione

Riferimenti aggiuntivi

  • Aiuto: terraform --help o [comando] --help per l’aiuto specifico per comando
  • Debugging: Imposta TF_LOG=INFO o TF_LOG=DEBUG per i log dettagliati
  • Formattazione: terraform fmt

Questo foglio di riferimento fornisce un accesso rapido ai punti più comuni e avanzati dell’utilizzo di Terraform - dai comandi alle best practice - rendendolo pratico per gli utenti principianti e avanzati. Buona giornata!