Hello !
Comme vous le savez probablement tous, la v0.12 tant attendue de Terraform est sortie ! \o/
Sur mon projet, nous avons migré de la version Terraform 0.11.13 vers la version 0.12.2.
Je pense que chaque projet rencontrera des blocages différents en fonction de son code, et votre expérience sera peut-être très différente de la mienne, mais voici un petit REX sur la migration appliquée à mon projet.
Contexte
Technos du projet :
Architecture du projet :
Etape 1 : la commande terraform 0.12checklist est plutôt décevante
J'ai tout d'abord voulu suivre la doc Terraform qui explique comment procéder pour la migration, mais cela n'a pas été très concluant.
On vous conseille de passer d'abord en v0.11.14, et d'utiliser la commande terraform 0.12checklist. La commande n'a jamais fonctionné chez moi, et je tombais sans cesse sur ce message :
- [ ] Terraform couldn't reach the Terraform Registry (at 'http://registry.terraform.io/') to determine whether current provider plugins are v0.12-compatible.
Un de mes collègues, qui a testé cette commande il y a quelques temps déjà, dit qu'elle lui indiquait surtout si la version du provider était compatible avec notre version de Terraform... Un peu décevant vu le temps que j’y ai consacré...
J'ai donc finalement sauté cette étape.
Etape 2 : quelques erreurs "aléatoires" au terraform init
Le reste de la doc est assez simple et de manière générale plutôt logique. Il y a des explications sur quelques changements majeurs de la nouvelle version. Ils ne nous concernaient cependant pas particulièrement.
J’ai eu par la suite des soucis sur le terraform init de certains de mes dossiers, et le message d'erreur n'était pas clair : "Error: registry service is unreachable, check https://status.hashicorp.com/ for status updates".
J’ai fini par réaliser que le soucis était la syntaxe de ma variable dans mon fichier de config : j'ai écrit "${var.aws_region}" alors qu'il attendait var.aws_region. Je n'ai eu le soucis que sur certains dossiers, je ne sais pas vraiment pourquoi...
Le terraform plan s'est déroulé sans encombre. J'ai corrigé les syntaxes lorsque c'était demandé, à savoir essentiellement :
Je n'ai eu aucun gros blocage, si ce n'est que la façon d’ignorer les changements sur un tag spécifique avait changé et que je n’ai pas trouvé où cela était documenté.
Etape 3 : la commande terraform 0.12upgrade fonctionne vraiment bien !
Comme je disais, le terraform plan s'est déroulé sans encombre. Mais cela me paraissait curieux car je n'avais rien changé à mon code (à part la config qui fige la version terraform), et qu'il me semblait qu'il y avait de gros changements au niveau des variables (documenté ici). J'ai donc tenté une nouvelle commande de la v.0.12.2 : terraform 0.12upgrade.
La commande m'a réécrit toutes mes variables avec la nouvelle nomenclature ! C'est très pratique, ça m'aurait pris beaucoup de temps à la main ! Et le terraform plan suivant m'a bien affiché que rien n'avait changé, donc nickel =)
A savoir :
CONCLUSION
Une fois de plus, basé sur mon expérience personnelle, voici ce que j’en retiens :
Je me permets de finir sur un gros RAPPEL : Si vous changez le tfstate d'un dossier en testant la v0.12, vous le rendez inaccessible pour tous ceux en v0.11 !
Donc si vous êtes plusieurs à travailler sur le Terraform :
Au final, cela n'a pas été une mauvaise expérience ! Sans le context-switching et les interruptions constantes, ça aurait été plié en même pas une journée je pense.
J'espère que ça vous sera utile =)