Terraform cheatsheet - comandi utili ed esempi
L'elenco di tutti i comandi di terraform
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.
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"
- CLI:
- 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
oTF_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!
Link utili
- https://developer.hashicorp.com/terraform
- Guida rapida Docker
- Guida rapida Docker Compose - Comandi più utili con esempi
- Guida rapida Kubernetes
- Distribuisci un progetto Flutter con backend su AWS Amplify
- Distribuisci un sito generato da Hugo su AWS S3
- Prestazioni di AWS Lambda: JavaScript vs Python vs Golang
- Lambda stratificate con AWS SAM e Python
- AWS SAM + AWS SQS + Python PowerTools
- Minio come alternativa ad AWS S3. Panoramica e installazione di Minio