Con Terraform 1.5 e versioni successive, puoi utilizzare il blocco import
per gestire l’importazione delle risorse direttamente nella tua configurazione. Questa funzionalità semplifica il processo di importazione dell’infrastruttura esistente nello stato di Terraform, eliminando la necessità di un comando CLI separato terraform import
.
In questo articolo, spieghiamo il blocco di importazione e come utilizzarlo per importare risorse diverse.
Cosa è un Blocco di Importazione di Terraform?
Il blocco di import
di Terraform introdotto in Terraform v1.5.0 fornisce un approccio dichiarativo per importare risorse di infrastruttura esistenti in un file di stato di Terraform. Consente alle importazioni di risorse di diventare parte integrante del processo di pianificazione di Terraform, simile ad altre risorse gestite, piuttosto che essere trattate come un’operazione diretta sullo stato.
Come risultato, il blocco import
migliora la trasparenza e allinea le importazioni di risorse con i principi fondamentali dell’infrastruttura come codice (IaC), consentendo agli utenti di gestire la propria infrastruttura in modo più efficace e prevedibile.
La sintassi per un blocco di import
in Terraform è la seguente:
import {
to = <resource_address>
id = <resource_identifier>
}
to
: Specifica l’indirizzo della risorsa nella tua configurazione dove la risorsa importata sarà mappata.id
: Definisce l’identificatore univoco della risorsa esistente nell’API del fornitore. Assicurati che il tuo fornitore Terraform sia configurato correttamente per accedere alla risorsa da importare.
Nota che alcuni tipi di risorse potrebbero avere requisiti o vincoli aggiuntivi per l’importazione.
Blocco di Importazione vs Comando di Importazione di Terraform
Un blocco import
in Terraform ti permette di definire risorse direttamente nel tuo file di configurazione, semplificando la gestione dell’infrastruttura esistente.
Al contrario, quando viene utilizzato il comando terraform import
senza un blocco import
, collega una risorsa esistente allo stato di Terraform senza generare automaticamente la configurazione corrispondente nel tuo codice. Dovrai aggiungere manualmente questa configurazione in seguito. Il comando di importazione è particolarmente utile per importazioni occasionali o per la transizione dell’infrastruttura nella gestione di Terraform.
Entrambi i metodi richiedono una gestione attenta per garantire coerenza tra lo stato di Terraform e l’infrastruttura effettiva. I blocchi di import
sono generalmente più adatti per la gestione continua delle risorse, mentre il comando autonomo funziona bene per importazioni occasionali.
Esempio 1: Utilizzo del blocco di importazione Terraform per importare un Bucket S3
Supponiamo di avere un bucket AWS S3 esistente (my-existing-bucket
) che si desidera gestire con Terraform.
Il blocco resource
specifica il bucket S3 (aws_s3_bucket.example
) e l’attributo bucket
definisce il nome del bucket esistente:
resource "aws_s3_bucket" "example" {
bucket = "my-existing-bucket"
}
import {
to = aws_s3_bucket.example
id = "my-existing-bucket"
}
Il blocco import
collega il bucket S3 esistente alla risorsa Terraform.
to
: Mappa la risorsa importata all’indirizzo del bloccoresource
(aws_s3_bucket.example
)id
: Specifica l’ID univoco del bucket (my-existing-bucket
).
Quando si esegue terraform plan
, Terraform legge il blocco import
, controlla lo stato del bucket S3 esistente e mostra un’anteprima delle modifiche che apporterà al file di stato. Quindi, dopo aver eseguito terraform apply
, Terraform aggiorna il file di stato per includere il bucket esistente, mappandolo alla risorsa aws_s3_bucket.example
.
Dopo aver eseguito terraform apply
ed importato con successo la risorsa, è una pratica consigliata rimuovere il blocco import
. Mantenerlo non causerà alcun danno, ma rimuoverlo aiuta a mantenere una configurazione pulita e riduce al minimo la confusione potenziale durante la gestione dello stato futuro.
Esempio 2: Utilizzo del Blocco di Importazione Terraform per Importare un’istanza EC2
Consideriamo un altro esempio: abbiamo un’istanza EC2 esistente con l’ID i-1234567890abcdef0
e vogliamo portarla sotto la gestione di Terraform.
Definiamo la risorsa aws_instance
che vogliamo che Terraform gestisca nel blocco resource
. Assicurati che gli attributi (ad esempio, ami
, instance_type
) corrispondano alla configurazione dell’istanza esistente:
resource "aws_instance" "example" {
ami = "ami-0abcdef1234567890" # Replace with the actual AMI ID
instance_type = "t2.micro"
}
import {
to = aws_instance.example
id = "i-1234567890abcdef0"
}
Nel blocco import
:
to
: Mappa la risorsa nella tua configurazione (aws_instance.example
) alla risorsa esistente.id
: Specifica l’ID univoco dell’istanza EC2 che stai importando.
Una volta aggiunto il blocco della risorsa e l’istruzione di importazione al file di configurazione di Terraform, esegui terraform plan
per visualizzare le modifiche in anteprima. Successivamente, esegui terraform apply
per importare la risorsa nel file di stato di Terraform.
Dopo l’importazione, Terraform gestirà l’istanza EC2 esistente, garantendo che la sua configurazione rimanga dichiarativa.
Esempio 3: Utilizzo del blocco di importazione di Terraform per importare un Azure Resource Group
Nell’esempio successivo, importeremo un gruppo di risorse Azure.
Abbiamo un gruppo di risorse Azure esistente chiamato esempio-gruppo-risorse
nella regione East US
, e vogliamo gestirlo con Terraform.
Prima, nel blocco resource
, definiamo la risorsa azurerm_resource_group
che Terraform gestirà:
resource "azurerm_resource_group" "example" {
name = "example-resource-group"
location = "East US"
}
import {
to = azurerm_resource_group.example
id = "/subscriptions/<subscription_id>/resourceGroups/example-resource-group"
}
Il blocco di importazione:
to
: Mappa la risorsa nella tua configurazione (azurerm_resource_group.esempio
) alla risorsa Azure esistente.id
: Specifica l’ID della risorsa Azure completamente qualificato del gruppo di risorse. Ricorda di sostituire<subscription_id>
con il tuo ID di sottoscrizione effettivo.
Aggiungi la risorsa e il blocco di importazione al tuo file di configurazione Terraform. Successivamente, esegui il comando terraform plan
per visualizzare le modifiche ed esegui terraform apply
per applicare le modifiche e importare la risorsa nel file di stato di Terraform.
Puoi utilizzare il blocco di importazione di Terraform in modo condizionale?
Il blocco di importazione di Terraform è progettato per essere dichiarativo e richiede valori specifici noti al momento della pianificazione. Pertanto, non può essere utilizzato condizionalmente all’interno del tuo codice Terraform.
Il blocco di importazione non supporta espressioni dinamiche o variabili per determinare l’ID di importazione in base alle condizioni. Tentativi di utilizzare costrutti come count o variabili all’interno del blocco di importazione causeranno errori, poiché Terraform non permette tali argomenti in questo contesto.
Punti Chiave
L’introduzione del blocco di importazione in Terraform 1.5+ semplifica la gestione delle risorse consentendo l’importazione diretta e la definizione delle risorse all’interno dei file di configurazione. Si allinea con i principi di IaC riducendo la complessità e facilitando l’integrazione dell’infrastruttura esistente nelle configurazioni di Terraform.
Source:
https://dzone.com/articles/how-to-use-terraform-import-block