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 :
import {
to = <resource_address>
id = <resource_identifier>
}
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 :
resource "aws_s3_bucket" "example" {
bucket = "my-existing-bucket"
}
import {
to = aws_s3_bucket.example
id = "my-existing-bucket"
}
Le bloc import
lie le bucket S3 existant à la ressource Terraform.
to
: Mappe la ressource importée à l’adresse du blocresource
(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 :
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"
}
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 :
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"
}
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