Accueil > Terraform : importer des ressources avec les Import Blocks
David Frappart
7 décembre 2023

Terraform : importer des ressources avec les Import Blocks

Terraform : importer des ressources avec les Import Blocks

Dans un précédent article, nous avons discuté d’import de ressources Azure dans Terraform à travers l’outil aztfexport.

En parallèle de cette possibilité, Terraform, depuis la version 1.5.0, permet d’importer facilement des ressources à travers les Imports Blocks. Cette possibilité d’import en mode as code s’accompagne en plus d’une option pour générer automatiquement le code Terraform.

C’est ce que nous allons regarder dans ce nouvel article.

 

Prérequis à l’utilisation des

 

Avant de pouvoir utiliser les Imports Blocks, il est nécessaire de valider votre version de Terraform. En effet, comme spécifié précédemment, cette fonctionnalité n’est disponible que depuis la version 1.5.0 de Terraform.

Un moyen de nous assurer de cette version est l’usage du statement bien connu « required_version » :

 

L’autre prérequis, évidemment, est de connaitre les resource ids des ressources à importer. Rien de très nouveau par rapport à l’import via Terraform CLI pour le moment.

Cela étant spécifié, attachons-nous à présent à quelques concepts.

 

Concepts des import blocks

 

Cette fonctionnalité, qui est arrivée avec la version 1.5.0 de Terraform, apporte un nouveau type de bloc : le bloc d’import.

 

Pour utiliser ce bloc, il faut avoir à disposition l’ID de la ressource que l’on veut importer, ainsi que le nom de la ressource cible côté Terraform.

On peut l’utiliser basiquement, c’est-à-dire sans génération de code automatique. Dans ce cas, il nous faut écrire au préalable les configurations associées dans un fichier « .tf ».

L’approche est ici similaire à un import via CLI, dans le sens où nous avons toujours des étapes manuelles. Malgré tout, on peut intégrer une gestion « as code » de l’import, et en garder la trace dans le source control. De ce point de vue, l’apport est énorme.

Maintenant, d’un point de vue moins basique, nous avons à notre disposition le paramètre « –generate-config-out » qui, comme son nom le sous-entend, nous permet de générer automatiquement la configuration Terraform au moment du plan :

 

Le plan va générer la configuration Terraform dans le fichier spécifié, et indiquer dans l’output le nombre de ressources qui vont être importées.

Si l’on schématise le workflow, cela ressemble à ceci :

Concepts des import blocks

 

Ce qui, on peut en convenir, est bien plus simple qu’un processus complètement manuel.

Je vous propose maintenant une application pratique.

 

Générer la configuration Terraform

 

Pour illustrer l’autogénération de configuration, prenons un groupe de ressources Azure.

L'autogénération de configuration

 

Comme nous l’avons déjà dit, nous avons besoin des IDs de ressources. Utilisons un peu d’Azure CLI.

 

Nous pouvons à présent écrire nos blocs d’imports. Nous écrirons tout dans un fichier import.tf :

 

Petit point d’attention sur la casse lors de l’import. Il peut arriver que l’output d’Azure CLI ne respecte pas les caractères majuscules ou minuscules.

Par exemple, ici, pour la zone DNS, nous avons eu l’ID  « /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rg-dns/providers/Microsoft.Network/dnszones/lab.teknews.cloud » alors que Terraform s’attend à avoir « dnsZones ».

Nous avons préparé les ressources que nous souhaitons importer. Nous pouvons générer la configuration avec l’argument « -generate-config-out » dans notre Terraform plan.

 

Sans le parametre  « –generated-config-ou  », Terraform aurait généré une erreur, stipulant que la configuration n’existe pas pour les ressources à importer.

Avec le paramètre, nous obtenons le fichier « generatedresources.tf ». Le fichier, dans le cas présent, ressemble à ceci :

 

Nous pouvons à présent décider si nous voulons déplacer les ressources dans un autre fichier. Ce n’est pas une étape obligatoire, mais qui devrait être considérée si l’on envisage d’autres imports avec génération automatique.

Ce qui est obligatoire, en revanche, c’est d’exécuter l’étape de l’apply, qui permettra de réaliser l’import de manière effective.

À ce stade, le state ne contient aucune des ressources à importer.

 

Maintenant que notre apply a été complété, nos ressources sont visibles dans le state :

 

Et… c’est tout !

 

Ce qu’il faut retenir sur les blocs d’import Terraform

 

Hashicorp et Terraform ont beaucoup évolué depuis les premières versions du produit.

La fonctionnalité longuement attendue pour la génération automatique de configuration de ressource est à présent bien disponible nativement, quel que soit le provider, et simplifie de manière drastique les opérations d’imports.

Pendant ce temps, l’écosystème de Terraform s’est développé et de nombreux produits sont apparus pour combler ce manque.

C’est le cas par exemple d’aztfexport dont nous avons parlé dans un précédent article.

À ce sujet, il est intéressant de noter qu’aztfexport est en mesure de détecter des ressources que l’on ne récupère pas forcément avec la commande « az resource list » que nous avons utilisée ici.

Enfin, relevons que dans les deux cas, la génération automatique ne saurait se passer d’une étape de refactoring de la configuration Terraform.

Dans une autre approche, si les configurations sont déjà standardisées, on peut envisager le bloc d’import sans génération automatique.

 

Vous souhaitez être accompagné par nos experts dans vos projets de transformation numérique ? Contactez-nous !

Nos autres articles
Commentaires
Laisser un commentaire

Restez au courant des dernières actualités !
Le meilleur de l’actualité sur le Cloud, le DevOps, l’IT directement dans votre boîte mail.