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:
- Une raison possible est que vous remettez la ressource à une autre équipe qui préfère le gérer différemment.
- 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.
- 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
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
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
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
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
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
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
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
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
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
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
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
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
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 RM | Terraform supprimé Block (Terraform V1.7 +) |
But | Supprime 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 configuration | Hidden – Rien dans le code montre que la ressource a été supprimée | Visible dans la configuration Terraform – laisse une trace |
Version Contrôle amical | Non trackable dans le contrôle de version | Oui, dans le cadre des fichiers .tf |
Auditaire / collaboratif | Non | Oui – visible et suivi par les équipes |
Version Terraform requise | Fonctionne avec toutes les versions de Terraform | Nécessite Terraform v1.7 ou plus récent |
Sécurité de l’exécution | Manuel – Ordure sujet si mal utilisé | Plus sûr – explicite et intentionnel avec un bloc de cycle de vie |
Automatisation amical | Moins adapté à l’automatisation (CLI uniquement) | Fonctionne facilement dans les pipelines CI / CD |
Idéal pour | Élimination rapide des ressources ad hoc | Flux 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
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