web-dev-qa-db-fra.com

Que fait vraiment Terraform Refresh?

Lors de l'utilisation de terraform pour déployer une infrastructure assez grande dans AWS, notre tfstate distant a été corrompu et a été supprimé.

D'après la documentation, je suppose que terraform refresh devrait interroger AWS pour obtenir l'état réel de l'infrastructure et mettre à jour l'accord tfstate, mais cela ne se produit pas: mon tfstate est intact et planifier + appliquer donne beaucoup de Already existing les erreurs.

Qu'est-ce que terraform refresh vraiment?

16
Bruno9779

terraform refresh tente de trouver toutes les ressources contenues dans le fichier d'état et de mettre à jour avec toute dérive qui s'est produite dans le fournisseur en dehors de Terraform depuis sa dernière exécution.

Par exemple, supposons que votre fichier d'état contient 3 instances EC2 avec des ID d'instance de i-abc123, i-abc124, i-abc125 puis vous supprimez i-abc124 en dehors de Terraform. Après avoir exécuté terraform refresh, un plan montrerait qu'il doit créer la deuxième instance tandis qu'un plan de destruction montrerait qu'il n'a besoin que de détruire les première et troisième instances (et ne manquera pas de détruire la deuxième instance manquante).

Terraform prend une décision très précise de ne pas interférer avec les choses qui ne sont pas gérées par Terraform. Cela signifie que si la ressource n'existe pas dans son fichier d'état, elle ne la touchera absolument pas. Cela vous permet d'exécuter Terraform avec d'autres outils et d'effectuer des modifications manuelles dans la console AWS. Cela signifie également que vous pouvez exécuter Terraform dans différents contextes simplement en fournissant un fichier d'état différent à utiliser, ce qui vous permet de diviser votre infrastructure en plusieurs fichiers d'état et de vous éviter une corruption catastrophique des fichiers d'état.

Pour vous sortir de votre trou actuel, je vous suggère d'utiliser terraform import généreusement pour remettre les choses dans votre fichier d'état ou, si possible, tout détruire manuellement en dehors de Terraform et recommencer à zéro.

À l'avenir, je suggérerais à la fois de fractionner les fichiers d'état pour postuler à des contextes plus granulaires et également de stocker votre état distant dans un compartiment S3 avec la gestion des versions activée. Vous pouvez également rechercher des outils tels que Terragrunt pour verrouiller votre fichier d'état pour éviter la corruption ou attendre le verrouillage du fichier d'état natif dans la prochaine version 0.9 de Terraform.

21
ydaetskcoR