Importer des ressources existantes
L'import permet de prendre le controle de ressources creees manuellement ou par un autre outil.
Import classique (CLI)
# 1. Ecrire la configuration de la ressource
resource "aws_instance" "web" {
# Configuration a completer apres import
}
# 2. Importer la ressource
terraform import aws_instance.web i-1234567890abcdef0
# 3. Completer la configuration pour correspondre a l'etat
# Utiliser terraform state show aws_instance.web pour voir les attributs
Import declaratif (Terraform 1.5+)
# Bloc import dans la configuration
import {
to = aws_instance.web
id = "i-1234567890abcdef0"
}
# Generer automatiquement la configuration
terraform plan -generate-config-out=generated.tf
Migration de state entre backends
# 1. Modifier le bloc backend dans la configuration
terraform {
backend "s3" {
bucket = "nouveau-bucket-tfstate"
key = "production/terraform.tfstate"
region = "eu-west-1"
}
}
# 2. Reinitialiser (Terraform propose la migration)
terraform init -migrate-state
# 3. Verifier le state
terraform state list
Refactoring avec moved
# Renommer une ressource sans la recreer
moved {
from = aws_instance.old_name
to = aws_instance.new_name
}
# Deplacer dans un module
moved {
from = aws_instance.web
to = module.compute.aws_instance.web
}
# Deplacer d'un for_each a un autre
moved {
from = aws_instance.web["alpha"]
to = aws_instance.web["production"]
}
Strategie d'import a grande echelle
- Inventorier les ressources existantes (AWS CLI, console)
- Generer les blocs import
- Utiliser -generate-config-out pour creer le code HCL
- Nettoyer et organiser le code genere
- Valider avec terraform plan (pas de diff = succes)
Bonne pratique : Apres un import, lancez terraform plan pour verifier qu'il n'y a aucune difference. Un plan vide confirme que la configuration correspond au reel.