Comment utiliser le bloc d’importation Terraform pour importer des ressources

Avec Terraform 1.5 et versions ultérieures, vous pouvez utiliser le bloc import pour gérer l’importation des ressources directement dans votre configuration. Cette fonctionnalité simplifie le processus d’importation d’une infrastructure existante dans l’état de Terraform, éliminant ainsi le besoin d’une commande CLI terraform import distincte.

Dans cet article, nous expliquons le bloc d’importation et comment l’utiliser pour importer différentes ressources.

Qu’est-ce qu’un bloc d’importation Terraform ?

Le bloc import de Terraform introduit dans Terraform v1.5.0 offre une approche déclarative pour importer des ressources d’infrastructure existantes dans un fichier d’état Terraform. Il permet aux importations de ressources de devenir une partie intégrante du processus de planification de Terraform — similaire à d’autres ressources gérées — plutôt que d’être traitées comme une opération d’état directe.

En conséquence, le bloc import améliore la transparence et aligne les importations de ressources avec les principes fondamentaux de l’infrastructure en tant que code (IaC), permettant aux utilisateurs de gérer leur infrastructure de manière plus efficace et prévisible.

La syntaxe pour un bloc import dans Terraform est la suivante :

Plain Text

 

  • to : Spécifie l’adresse de la ressource dans votre configuration où la ressource importée sera mappée.
  • id : Définit l’identifiant unique de la ressource existante dans l’API du fournisseur. Assurez-vous que votre fournisseur Terraform est correctement configuré pour accéder à la ressource à importer.

Notez que certains types de ressources peuvent avoir des exigences ou des contraintes supplémentaires pour l’importation.

Bloc d’importation vs. Commande d’importation Terraform

Un bloc import dans Terraform vous permet de définir des ressources directement dans votre fichier de configuration, simplifiant ainsi la gestion de l’infrastructure existante.

En revanche, lorsque la commande terraform import est utilisée sans un bloc import, elle relie une ressource existante à l’état Terraform mais ne génère pas automatiquement la configuration correspondante dans votre code. Vous devez ajouter manuellement cette configuration par la suite. La commande d’importation est particulièrement utile pour des importations ponctuelles ou pour transférer l’infrastructure vers la gestion Terraform.

Les deux méthodes nécessitent une manipulation soigneuse pour garantir la cohérence entre l’état Terraform et l’infrastructure réelle. Les blocs Import sont généralement mieux adaptés à la gestion continue des ressources, tandis que la commande autonome fonctionne bien pour des importations occasionnelles.

Exemple 1 : Utilisation du bloc d’importation Terraform pour importer un bucket S3

Supposons que nous ayons un bucket AWS S3 existant (my-existing-bucket) que vous souhaitez gérer avec Terraform.

Le bloc resource spécifie le bucket S3 (aws_s3_bucket.example) et l’attribut bucket définit le nom du bucket existant :

Plain Text

 

Le bloc import lie le bucket S3 existant à la ressource Terraform.

  • to : Mappe la ressource importée à l’adresse du bloc resource (aws_s3_bucket.example)
  • id : Spécifie l’ID unique du bucket (my-existing-bucket).

Lorsque vous exécutez terraform plan, Terraform lit le bloc import, vérifie l’état du bucket S3 existant et montre un aperçu des modifications qu’il apportera au fichier d’état. Ensuite, après avoir exécuté terraform apply, Terraform met à jour le fichier d’état pour inclure le bucket existant, le mappant à la ressource aws_s3_bucket.example.

Après avoir exécuté terraform apply et importé avec succès la ressource, il est recommandé de supprimer le bloc import. Le conserver ne causera aucun dommage, mais le supprimer aide à maintenir une configuration propre et minimise les risques de confusion lors de la gestion future de l’état.

Exemple 2 : Utilisation du Bloc d’Importation Terraform pour Importer une Instance EC2

Considérons un autre exemple : Nous avons une instance EC2 existante avec l’ID i-1234567890abcdef0 et souhaitons la prendre en charge avec Terraform.

Nous définissons la ressource aws_instance que nous voulons que Terraform gère dans le bloc resource. Assurez-vous que les attributs (par exemple, ami, instance_type) correspondent à la configuration de l’instance existante :

Plain Text

 

Dans le bloc import :

  • to : Associe la ressource de votre configuration (aws_instance.example) à la ressource existante.
  • id : Spécifie l’ID unique de l’instance EC2 que vous importez.

Une fois que vous avez ajouté le bloc de ressource et l’instruction d’importation à votre fichier de configuration Terraform, exécutez terraform plan pour prévisualiser les modifications. Ensuite, exécutez terraform apply pour importer la ressource dans le fichier d’état de Terraform.

Après l’importation, Terraform gérera l’instance EC2 existante, en veillant à ce que sa configuration reste déclarative.

Exemple 3 : Utilisation du bloc d’importation Terraform pour importer un groupe de ressources Azure

Dans l’exemple suivant, nous allons importer un groupe de ressources Azure.

Nous avons un groupe de ressources Azure existant nommé example-resource-group dans la région East US, et nous souhaitons le gérer avec Terraform.

Tout d’abord, dans le bloc resource, nous définissons la ressource azurerm_resource_group que Terraform va gérer :

Plain Text

 

Le bloc d’importation :

  • to : Mappe la ressource dans votre configuration (azurerm_resource_group.example) à la ressource Azure existante.
  • id : Spécifie l’ID de ressource Azure entièrement qualifié du groupe de ressources. N’oubliez pas de remplacer <subscription_id> par votre ID d’abonnement réel.

Ajoutez la ressource et le bloc d’importation à votre fichier de configuration Terraform. Ensuite, exécutez la commande terraform plan pour prévisualiser les modifications et exécutez terraform apply pour appliquer les modifications et importer la ressource dans le fichier d’état de Terraform.

Pouvez-vous utiliser le bloc d’importation Terraform de manière conditionnelle ?

Le bloc d’importation Terraform est conçu pour être déclaratif et nécessite des valeurs spécifiques connues au moment de la planification. Par conséquent, il ne peut pas être utilisé de manière conditionnelle dans votre code Terraform.

Le bloc d’importation ne prend pas en charge les expressions dynamiques ou les variables pour déterminer l’ID d’importation en fonction des conditions. Les tentatives d’utilisation de constructions telles que count ou des variables dans le bloc d’importation entraîneront des erreurs, car Terraform n’autorise pas de tels arguments dans ce contexte.

Points clés

L’introduction du bloc d’importation dans Terraform 1.5+ simplifie la gestion des ressources en permettant l’importation directe et la définition des ressources dans les fichiers de configuration. Cela s’aligne avec les principes IaC en réduisant la complexité et en facilitant l’intégration de l’infrastructure existante dans les configurations Terraform.

Source:
https://dzone.com/articles/how-to-use-terraform-import-block