Fermer

mai 29, 2025

Pratiques de terraform moderne: supprimer les ressources en toute sécurité de l’État

Pratiques de terraform moderne: supprimer les ressources en toute sécurité de l’État


Introduction et usecase

Il y a des moments où nous voulons que TerraForm cesse de gérer une ressource, mais ne veulent pas le supprimer de l’infrastructure.

Dans ce bref blog, je vais discuter de la suppression des ressources des fichiers de configuration Terraform tout en les gardant dans une infrastructure réelle. Mais pourquoi voudriez-vous faire cela en premier lieu? Voyons quelques raisons possibles:

  1. Une raison possible est que vous remettez la ressource à une autre équipe qui préfère le gérer différemment.
  2. Il pourrait y avoir une fenêtre de maintenance planifiée et vous souhaitez supprimer certaines ressources de la gestion par Terraform pendant cette période.
  3. Ou peut-être que vous divisez les modules Terraform et souhaitez restructurer vos fichiers de configuration.
    Dans ce blog, je vais montrer différentes façons de supprimer une ressource de Terraform sans la supprimer de votre environnement Cloud AWS, en utilisant une instance EC2 simple comme exemple.
Supprimer les ressources de la gestion de Terraform

Supprimer les ressources de la gestion de Terraform

Il y a deux façons d’y aller. Le premier est la voie rapide, et la seconde consiste à laisser une trace dans votre fichier de configuration afin que d’autres personnes sachent que vous avez supprimé la ressource. Explorons dans les deux sens et voyons comment ils fonctionnent.

Installation

Disons que vous avez déjà une configuration comme celle-ci:

resource "aws_instance" "web" {
  ami           = "ami-04999cd8f2624f834"
  instance_type = "t2.micro"
  tags = {
    Name = "my-ec2-instance"
  }
}

Vous pouvez vérifier avec quoi Terraform gére:

terraform state list
Liste d'état Terraform

Liste d’état Terraform

Solutions possibles

Solution 1: Utilisation de Terraform RM (Way traditionnel)

Donc, avec notre première approche, ce que je vais faire est d’exécuter Terraform State RM et de spécifier la ressource que je veux supprimer. Une fois que je clique sur Entrée, mon instance EC2 a maintenant été supprimée de l’état.

Terraform State RM

Terraform State RM

Donc, si je fais maintenant Terraform State List, Terraform ne gère plus ma ressource et elle a été supprimée du fichier d’État.

Liste d'état Terraform

Liste d’état Terraform

Si je fais un plan Terraform maintenant, Terraform ne l’a plus dans le fichier d’État, il essaierait donc de recréer la ressource.

Plan de terre

Plan de terre

Plan de terre

Plan de terre

Puisque nous essayons de le supprimer, nous l’avons supprimé du fichier d’état. L’étape suivante serait de le supprimer du fichier de configuration. Je vais commenter cela pour que Terraform ne le lise plus et ne crée plus la ressource.

Code de commentaire

Code de commentaire

D’accord, donc maintenant si je fais un plan Terraform, il a été supprimé de ma configuration. Si je fais un plan Terraform maintenant, nous ne devons pas voir de modifications et la ressource a été supprimée.

Plan de terre

Plan de terre

Il s’agit d’un moyen acceptable de supprimer les ressources du fichier d’état, mais toujours de les garder dans un véritable environnement cloud – vous l’avez supprimé de l’état, puis vous l’avez supprimé de la configuration. Mais, vous savez, personne ne sait que vous l’avez fait, et c’est là que la deuxième façon de faire ce genre de choses arrive. Explorons comment.

Solution 2: Bloc supprimé Terraform

Remarque: Terraform v1.7 ou ultérieure est tenu d’utiliser le bloc «supprimé».

Examinons maintenant la deuxième approche – en utilisant le bloc supprimé, qui est un moyen plus avancé et traçable de supprimer les ressources de l’état Terraform sans les détruire dans l’infrastructure réelle.

Avant de le faire, je veux que la ressource soit créée dans mon infrastructure. Donc, ce que je vais faire, c’est ramener la configuration et faire une application Terraform, ce qui créera à nouveau mon instance EC2.

Dans la configuration précédente, je l’avais retiré du fichier d’État, mais il était toujours assis dans ma console AWS. Assurez-vous donc que si vous suivez et détruisez les ressources en utilisant Terraform, que vous les supprimez également de la console si nécessaire.

Pour celui-ci, je vais juste dire «oui» ici. Cela créera mon instance EC2.

Plan de terre

Plan de terre

D’accord, donc mon instance EC2 a été créée à nouveau, et elle fait partie de l’État maintenant. Si je fais juste la liste d’état Terraform, cette instance fait désormais partie de l’état et une partie de la configuration Terraform.

Liste d'état Terraform

Liste d’état Terraform

Mais gardez à l’esprit une chose: nous avons créé une nouvelle instance EC2. Celui que nous avons supprimé du fichier de configuration – c’est celui que vous devriez supprimer de la console. Maintenant, nous allons examiner la deuxième façon de le retirer, qui utilise le bloc supprimé Terraform, qui a été publié dans Terraform v1.7. Lisez ici: https://github.com/hashicorp/terraform/blob/v1.7/changelog.md

Supprimer ou commenter la ressource AWS_instance existante et ajouter ce nouveau bloc supprimé, où vous spécifiez la ressource et la ressource que vous allez supprimer, puis vous utilisez le bloc de cycle de vie, qui est requis pour que Terraform ne détruise pas votre ressource.

Bloc supprimé Terraform

Bloc supprimé Terraform

Cela raconte Terraform:

from = aws_instance.web: This is the resource being removed from the state.
lifecycle { destroy = false }: Ensures Terraform doesn’t attempt to destroy the actual resource in AWS, just forgets about it in state.

Une fois que vous avez commenté la ressource et spécifié ce nouveau bloc supprimé, vous pouvez enregistrer votre configuration, revenir ici et simplement faire du plan Terraform. Cela vous dirait que certains objets ne seront plus gérés par Terraform.

Bloc supprimé Terraform

Bloc supprimé Terraform

Pour que cela prenne effet, nous devons faire une application Terraform. Donc, mon fichier d’état le sait. Dès que je ferai une application Terraform, je n’ai qu’à le confirmer, et une fois l’application terminée, mon instance EC2 n’est plus gérée par Terraform.

Terraform s'applique

Terraform s’applique

Si je vais sur ma liste d’État avec Terraform State List, cette instance EC2 n’est plus gérée par Terraform.

Liste d'état Terraform

Liste d’état Terraform

Et avec cela, nous avons supprimé en toute sécurité une ressource gérée par Terraform de l’état sans la détruire, en utilisant l’approche de bloc supprimée appropriée et suivi.

Comparaison

FonctionnalitéTerraform State RMTerraform supprimé Block (Terraform V1.7 +)
ButSupprime une ressource du fichier d’état à l’aide de la commande impérative.Supprime de manière déclarative une ressource de l’état via le code
Visibilité de la configurationHidden – Rien dans le code montre que la ressource a été suppriméeVisible dans la configuration Terraform – laisse une trace
Version Contrôle amicalNon trackable dans le contrôle de versionOui, dans le cadre des fichiers .tf
Auditaire / collaboratifNonOui – visible et suivi par les équipes
Version Terraform requiseFonctionne avec toutes les versions de TerraformNécessite Terraform v1.7 ou plus récent
Sécurité de l’exécutionManuel – Ordure sujet si mal utiliséPlus sûr – explicite et intentionnel avec un bloc de cycle de vie
Automatisation amicalMoins adapté à l’automatisation (CLI uniquement)Fonctionne facilement dans les pipelines CI / CD
Idéal pourÉlimination rapide des ressources ad hocFlux de travail structurés et en équipe

Conclusion

Avec l’introduction du bloc supprimé dans Terraform v1.7, le processus de suppression des ressources gérées en toute sécurité de Terraform sans avoir un impact sur les infrastructures en direct est devenue plus transparente, auditée, versée et adaptée à la collaboration. Cela peut être très utile lors du refactorisation de code, des transitions d’équipe ou des migrations complexes.

À Au nouveaunous nous spécialisons dans la résolution des défis des DevOps du monde réel, de la gestion de l’État aux transformations d’infrastructure à grande échelle sur AWS, Azure, GCP et d’autres fournisseurs de cloud. Que vous modernisez les pratiques Terraform ou que vous planifiiez une migration en temps de renversement, nos ingénieurs AWS et DevOps Certified Architects et DevOps sont là pour vous assurer que votre voyage en cloud est efficace, fiable et à l’épreuve du futur.

Aux nouvelles solutions DevOps

Aux nouvelles solutions DevOps

Restez connecté pour des informations plus pratiques alors que nous continuons à simplifier les opérations cloud et à permettre des décisions d’infrastructure plus intelligentes.






Source link