Come utilizzare il blocco di importazione di Terraform per l’importazione delle risorse

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:

Plain Text

 

  • 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:

Plain Text

 

Il blocco import collega il bucket S3 esistente alla risorsa Terraform. 

  • to: Mappa la risorsa importata all’indirizzo del blocco resource (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:

Plain Text

 

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à:

Plain Text

 

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