- 2026-03-12
- 11 minuti
Usare Terraform import

Dopo l’ennesimo bucket creato a mano, hai convinto il tuo manager. Finalmente comincerete a utilizzare Terraform per il provisioning e la gestione dell’infrastruttura cloud.
Tutto tranquillo: c’è un team dedicato, avete già installato in locale e creato lo stato remoto… perfetto!
E mentre sembra che vada tutto fin troppo liscio, proprio in questo momento ti assale il dubbio: come faccio a portarmi dietro ciò che ho già creato a mano?
Fortunatamente, ci pensa terraform import.
Perché importare risorse esistenti nel Terraform state
Lasciare risorse fuori da Terraform crea un ambiente ibrido difficile da gestire.
Migrando le risorse all’interno dello .tfstate otteniamo invece diversi vantaggi:
Single Source of Truth (SSOT): Se metà infrastruttura è su Terraform e l’altra metà è nella testa di chi l’ha creata (o persa tra mille click sulla console AWS), non hai mai una visione reale dello stato del sistema. Importare tutto ti dà un unico punto di verità.
Rilevamento del Drift: Una volta importata la risorsa, Terraform sa come dovrebbe essere. Se qualcuno modifica manualmente quel bucket S3 domani, al prossimo
terraform planvedrai immediatamente la discrepanza (Drift).Riproducibilità e Disaster Recovery: Se cancelli per sbaglio una risorsa manuale, auguri a ricrearla identica (ricordi quel flag specifico che avevi attivato 6 mesi fa?). Se è in Terraform, basta un
terraform apply.
Come importare: ieri vs. oggi
Fino a poco tempo fa, l’importazione era un tedioso processo a due step che poteva spaventare a prima vista:
Scrivere manualmente il codice HCL della risorsa (sperando di azzeccare i parametri).
Lanciare il comando CLI
terraform importper mappare l’ID reale alla risorsa nel codice.
La buona notizia? Dalla versione 1.5, Terraform ha reso tutto tremendamente più semplice.
Il blocco import (non il comando!)
Invece di usare comandi imperativi nella CLI, definiamo l’intenzione di importare direttamente nel codice.
Ora possiamo utilizzare un approccio dichiarativo.
Per questa dimostrazione prendiamo come esempio un bucket creato dalla console, chiamato s3-creato-a-mano.
Ecco come ce lo portiamo a casa:
![]/(/images/blog/9h3L8aK.png)
Definiamo il blocco import
In un file .tf dedicato (oppure ovunque vuoi, siccome è un’azione una-tantum), aggiungi questo blocco:
import {
to = aws_s3_bucket.s3-creato-a-mano
id = "s3-creato-a-mano" # arn-senza-boilerplate arn:aws:s3:::s3-creato-a-mano
}
to: È il nome che vuoi dare alla risorsa dentro Terraform.
id: È l’identificativo univoco della risorsa sul cloud (per S3 è il nome del bucket, per una EC2 è l’instance-id, ecc.).
Generiamo il codice terraform per la risorsa
Non lanciamo terraform plan a manetta aggiungendo man mano ciò che manca, come si faceva prima.
Una volta definito il blocco import, lancia questo comando:
terraform plan -generate-config-out=s3-creato-a-mano.tf
Terraform si connetterà ad AWS, leggerà la configurazione attuale del bucket e scriverà automaticamente il codice HCL necessario nel file s3-creato-a-mano.tf.

Aprendo il file appena generato, troviamo la definizione completa della risorsa aws_s3_bucket.
resource "aws_s3_bucket" "s3-creato-a-mano" {
bucket = "s3-creato-a-mano"
force_destroy = false
object_lock_enabled = false
region = "eu-west-1"
tags = {}
tags_all = {}
}
Mi raccomando, controlla sempre che tutto abbia senso, ripulendo eventuali attributi deprecati o non necessari prima di rendere tutto ufficiale.
Applichiamo le modifiche, aggiungendo effettivamente la risorsa nello stato
terraform apply

Ed è fatta! Il bucket “artigianale” è ora ufficialmente sotto la gestione di Terraform.
Il blocco import può essere rimosso una volta completata l’operazione, poiché lo stato è ormai aggiornato.
terraform state list
> aws_s3_bucket.s3-creato-a-mano
Conclusioni: meglio tardi che mai, in entrambi i casi
Quando Terraform genera il codice per noi importa tutto pari-pari, incluse configurazioni sporche, tag obsoleti o impostazioni di sicurezza precarie impostate ’temporaneamente’ mesi fa.
Il processo di importazione è l’occasione perfetta per chiedersi: ‘Mi serve davvero questo permesso pubblico su S3?’
Possiamo usare la fase di review del codice generato non soltanto per validarlo ma per fare refactoring, cogliendo l’occasione per migliorarlo.
Non lasciare che il debito tecnico dell’infrastruttura manuale ti spaventi.
Con i nuovi strumenti a disposizione, migrare risorse dentro lo stato di Terraform è diventato esponenzialmente più semplice.












