Pourquoi vous devriez toujours consulter le plan avant d'exécuter Terraform

Vous venez de terminer une configuration Terraform pour un nouveau serveur et une base de données. Le fichier a l'air correct. Vous lancez terraform apply et attendez. Quelques secondes plus tard, vous réalisez que le serveur est deux fois plus gros que nécessaire et que la base de données se trouve dans la mauvaise région. Vous devez maintenant tout démonter et recommencer.

Ce scénario se répète constamment dans les équipes qui débutent avec l'Infrastructure as Code. L'envie de sauter des étapes et d'appliquer directement les changements est forte. Pourtant, il existe une étape qui fait gagner du temps, de l'argent et évite bien des frustrations : consulter le plan avant d'exécuter.

Ce qui se passe quand vous sautez le plan

Quand vous exécutez terraform apply directement, Terraform commence immédiatement à créer, modifier ou supprimer des ressources en fonction de votre configuration. Si quelque chose ne va pas, vous ne le découvrez qu'après que les modifications aient été appliquées. Revenir en arrière peut être simple pour certaines ressources, mais pour d'autres, cela peut impliquer un nettoyage manuel, des tickets de support auprès des fournisseurs cloud, ou une interruption de service pour les utilisateurs.

Le problème ne vient pas seulement des erreurs de configuration. Même lorsque votre configuration est techniquement correcte, les changements peuvent avoir des effets secondaires que vous n'aviez pas anticipés. Une modification de configuration réseau pourrait interrompre la connectivité entre les services. Une réduction de la taille du stockage pourrait entraîner une perte de données. Une mise à jour d'un groupe de sécurité pourrait exposer accidentellement des ressources internes à Internet.

Vous avez besoin d'un moyen de prévisualiser ce que Terraform va faire avant qu'il ne le fasse.

Comment fonctionne Terraform Plan

La commande terraform plan génère ce qu'on appelle un plan d'exécution. Elle lit vos fichiers de configuration et les compare à l'état actuel de votre infrastructure, stocké dans le fichier d'état Terraform. La sortie montre exactement quelles ressources seront créées, modifiées ou supprimées, ainsi que les détails de chaque changement.

La différence cruciale est que terraform plan n'applique aucun changement. Elle ne fait que lire et comparer. Aucune ressource n'est créée, mise à jour ou détruite. Vous pouvez l'exécuter autant de fois que vous le souhaitez sans affecter votre infrastructure.

Voici ce qui se passe quand vous l'exécutez :

terraform plan

Terraform se connecte à votre fournisseur, lit votre configuration, vérifie l'état actuel et affiche un résumé des actions prévues. Pour la configuration du serveur et de la base de données évoquée plus tôt, la sortie pourrait ressembler à ceci :

  • Un serveur virtuel sera créé avec 2 cœurs CPU et 8 Go de RAM
  • Une base de données sera créée avec 100 Go de stockage
  • Les deux ressources seront connectées via un réseau interne

Si vous avez déjà un serveur en cours d'exécution et que vous modifiez sa configuration, le plan montrera que le serveur existant sera mis à jour sur place, et non détruit puis recréé. Cette distinction est importante car les mises à jour sur place sont généralement plus sûres et plus rapides qu'un remplacement.

Pourquoi le plan est important pour votre workflow

Le plan d'exécution vous apporte trois choses difficiles à obtenir autrement.

Premièrement, vous pouvez vérifier que vos changements correspondent à ce que vous vouliez. Avant de vous engager à appliquer les modifications, vous avez la possibilité d'en examiner les détails. Avez-vous accidentellement défini le mauvais type d'instance ? La version du moteur de base de données est-elle correcte ? Le plan affiche ces détails clairement.

Deuxièmement, vous pouvez détecter les effets secondaires auxquels vous n'aviez pas pensé. Peut-être avez-vous modifié une variable qui affecte plusieurs ressources. Peut-être qu'un petit ajustement de configuration déclenche un remplacement de ressource au lieu d'une mise à jour. Le plan révèle ces dépendances cachées.

Troisièmement, vous pouvez partager le plan avec d'autres personnes. Dans un contexte d'équipe, tout le monde n'a pas besoin de comprendre la syntaxe Terraform. Mais la plupart des ingénieurs peuvent lire une sortie de plan et repérer des problèmes potentiels. Un administrateur de base de données peut vérifier que la configuration du stockage est appropriée. Un ingénieur sécurité peut s'assurer que les règles réseau ne sont pas trop permissives.

Utiliser le plan dans les pipelines CI/CD

Dans les environnements d'équipe, terraform plan est généralement automatisé dans le pipeline CI/CD. Lorsque quelqu'un ouvre une pull request qui modifie la configuration de l'infrastructure, le pipeline exécute terraform plan automatiquement et publie le résultat sous forme de commentaire sur la pull request.

Ce workflow permet à toute l'équipe de voir ce qui va changer avant que le code ne soit fusionné. La discussion se fait autour de la sortie du plan, et non autour de descriptions abstraites de ce que le code pourrait faire. Des questions comme « Pourquoi cette ressource est-elle remplacée ? » ou « Ce groupe de sécurité devrait-il être ouvert à Internet ? » trouvent une réponse avant que les changements ne soient appliqués.

Le diagramme suivant illustre le cycle typique de planification, révision et application utilisé dans les pipelines CI/CD :

flowchart TD A[Modification du code] --> B[Plan Terraform] B --> C{Révision du plan} C -->|Approuvé| D[Apply Terraform] C -->|Non approuvé| E[Correction du code] E --> A D --> F[Infrastructure mise à jour]

Certaines équipes vont plus loin en exigeant une approbation sur la sortie du plan avant que l'étape d'application puisse se poursuivre. Le plan devient un point de contrôle qui verrouille les modifications apportées à l'infrastructure de production.

Une erreur courante : les plans obsolètes

Il y a une limitation importante à comprendre. Le plan d'exécution est un instantané de ce que Terraform ferait au moment où vous avez exécuté la commande. Si quelqu'un d'autre modifie l'infrastructure entre le moment où vous exécutez terraform plan et celui où vous exécutez terraform apply, le plan pourrait ne plus être exact.

Par exemple, supposons que vous exécutiez terraform plan et voyiez qu'un serveur sera créé. Avant que vous n'exécutiez terraform apply, un collègue crée ce même serveur manuellement via la console cloud. Lorsque vous exécutez terraform apply, Terraform détectera le conflit et échouera, ou pire, il pourrait créer une ressource en double selon la façon dont votre configuration est écrite.

C'est pourquoi les bons workflows maintiennent les étapes de planification et d'application proches l'une de l'autre. Dans les pipelines CI/CD, la même exécution de pipeline effectue généralement les deux étapes séquentiellement. Pour le développement local, vous devez exécuter le plan immédiatement avant l'application, et non des heures ou des jours plus tard.

Certaines équipes utilisent également le verrouillage d'état pour empêcher les modifications simultanées. Lorsqu'une personne ou un pipeline exécute un plan ou une application, les autres sont bloqués et ne peuvent pas apporter de modifications tant que l'opération n'est pas terminée.

Liste de contrôle pratique pour utiliser Terraform Plan

  • Exécutez terraform plan avant chaque terraform apply, même pour les petites modifications
  • Examinez la sortie du plan pour détecter les remplacements ou suppressions de ressources inattendus
  • Vérifiez que le nombre de ressources créées correspond à vos attentes
  • Recherchez les modifications apportées aux groupes de sécurité, aux règles réseau et aux politiques IAM
  • Partagez la sortie du plan avec les membres concernés de l'équipe pour révision
  • Dans le CI/CD, publiez le plan sous forme de commentaire sur les pull requests
  • Gardez les étapes de planification et d'application proches dans le temps
  • Utilisez le verrouillage d'état pour éviter les conflits dans les environnements d'équipe

Ce que vous gagnez avec cette habitude

L'habitude d'exécuter terraform plan avant chaque changement transforme votre workflow de réactif à délibéré. Au lieu de découvrir les problèmes après la création des ressources, vous les détectez alors qu'ils ne sont encore que du texte sur un écran. Le coût de la correction d'une erreur dans un plan est nul. Le coût de sa correction après l'application peut représenter des heures de débogage, de nettoyage manuel et de coordination avec votre équipe.

La prochaine fois que vous écrirez une configuration Terraform, exécutez d'abord le plan. Lisez attentivement la sortie. Ensuite, décidez si vous devez appliquer. Cette étape supplémentaire fait la différence entre les équipes qui gèrent leur infrastructure avec confiance et celles qui passent leur temps à nettoyer les dégâts.