Terraform est un super outil d’IAC. Sa force majeure, mais également sa faiblesse est son modèle stateful.
Ce modèle permit d’avoir une idempotence claire à chaque changement. L’état est un fichier stocké quelque part. De ce fait, le perdre va immédiatement déclencher un problème d’idempotence au prochain run terraform. Le fichier d’état local n’est clairement pas recommandé, pouvant contenir des secrets, il n’est donc pas fait pour être poussé sur un repository git. Il vaut mieux utiliser une solution à base de backend de type S3 ou consul, permettant de répliquer de manière consistente, et de versionner ces fichiers critiques.
Néanmoins, malgré toutes ces précautions, vous pourriez perdre votre état, par exemple sur une erreur humaine.
Si vos providers terraforms sont correctement développés, vous pouvez importer n’importe quelle ressource existante afin de retrouver votre état au complet.
Imaginons que votre état est fait d’ACL consul. Voici le moyen de réimporter l’une de ces ressources:
terraform import -var-file=../../global.tfvars consul_acl_policy.prometheus b901a93a-cccc-bbbb-aaaa-8e10dad1efff
Cette commande va se connecter au cluster consul mentionné dans les tfvars et retrouver l’object d’ID
b901a93a-cccc-bbbb-aaaa-8e10dad1efff
pour le relier à la policy consul nommée prometheus
dans votre code.