Terraform cheatsheet - comandi utili ed esempi

L'elenco di tutti i comandi Terraform

Indice

Ecco un riepilogo completo di Terraform con comandi essenziali, elementi di configurazione, gestione delle risorse, moduli, variabili, gestione dello stato e migliori pratiche.

Terraform è uno strumento open-source per l’infrastruttura come codice (IaC) sviluppato da HashiCorp, che consente agli utenti di definire e provisionare infrastrutture su più provider cloud (ad esempio, AWS, Azure, GCP) utilizzando file di configurazione dichiarativi. Il suo scopo principale è automatizzare il provisioning dell’infrastruttura, garantire la coerenza e ridurre gli errori manuali. Terraform supporta flussi di lavoro multi-cloud, modulari e basati sullo stato, rendendolo un pilastro delle moderne pratiche DevOps.

Per ulteriori strumenti e flussi di lavoro per sviluppatori, consulta Strumenti per Sviluppatori: La Guida Completa ai Flussi di Lavoro Moderni.

studente che usa terraform

Vantaggi Chiave di Terraform:

  • Sintassi Dichiarativa: Definisce lo stato desiderato dell’infrastruttura nel codice.
  • Agnosticismo del Provider: Funziona con AWS, Azure, GCP, Kubernetes e altro.
  • Gestione dello Stato: Traccia le modifiche all’infrastruttura per evitare conflitti.

Guida all’Installazione e alla Configurazione

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

Il processo di installazione di Terraform è piuttosto 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
    

Per migliorare la produttività terminale durante il lavoro con Terraform, consulta Scorciatoie da Tastiera per Ubuntu: Riepilogo Completo.

Verifica

terraform --version

Comandi CLI di Terraform

Ecco l’elenco di tutti i comandi di Terraform:

Comando Descrizione
terraform init Inizializza una directory di configurazione Terraform nuova o esistente
terraform validate Controlla 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 Reformatta 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 Visualizza i provider utilizzati nella configurazione
terraform graph Visualizza le dipendenze delle risorse come un grafico
terraform workspace list Elenca tutti gli spazi di lavoro disponibili
terraform workspace new Crea un nuovo spazio di lavoro
terraform workspace select Passa a uno spazio di lavoro specificato
terraform workspace show Mostra il nome dello spazio di lavoro corrente
terraform workspace delete Elimina uno spazio di lavoro specificato
terraform output Mostra i valori di output dal file di stato
terraform import Importa risorse esistenti in Terraform
terraform taint Segna una risorsa per la ricreazione al prossimo apply
terraform untaint Rimuove la marcatura “tainted” da una risorsa
terraform state list Elenca le 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 principali (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
    }
    

Lavoro con le Variabili

  • Dichiarazione delle variabili
    variable "region" {
      description = "Regione AWS"
      default     = "us-east-1"
    }
    
  • Assegnazione dei 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 di stato: terraform.tfstate
  • Stato remoto (Esempio S3)
    backend "s3" {
      bucket = "my-tf-state"
      key    = "state.tfstate"
      region = "us-east-1"
    }
    
  • Visualizza 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 List e Map:
    locals {
      my_map = { a = 1, b = 2 }
    }
    

Provisioner

Utilizzati per il bootstrapping delle risorse. Esempio:

resource "aws_instance" "web" {
  ...
  provisioner "local-exec" {
    command = "echo Risorsa creata"
  }
}

Migliori Pratiche

  • Versionare tutti i file .tf
  • Bloccare le versioni dei provider per garantire deployment consistenti
  • Backend remoto per la gestione dello stato (S3, Azure Blob, ecc.)
  • Crittografare i file di stato nei backend remoti
  • Modularizzare l’infrastruttura utilizzando moduli riutilizzabili
  • Documentare le proprie configurazioni
  • Testare in staging prima della produzione

Riferimenti Aggiuntivi

  • Aiuto: terraform --help o [comando] --help per l’aiuto specifico del comando
  • Debugging: Imposta TF_LOG=INFO o TF_LOG=DEBUG per log verbosi
  • Formattazione: terraform fmt
  • Codifica: Per le operazioni di codifica/decodifica Base64, consulta Codifica - Decodifica Base64 su Windows, Linux e Mac

Questo riepilogo fornisce un riferimento rapido ai lati più comuni e avanzati dell’utilizzo di Terraform - dai comandi alle migliori pratiche - rendendolo pratico sia per i principianti che per gli utenti avanzati. Buon lavoro!