Terraform est un outil puissant pour la gestion de l’infrastructure en tant que code (IaC). Il permet aux équipes de provisionner et de gérer des ressources infonuagiques de manière reproductible et efficace. Cependant, derrière la magie de Terraform se cache un élément essentiel : le fichier state (état).
Le fichier state de Terraform est le cerveau de votre infrastructure. Il s’agit d’un fichier JSON qui stocke l’état actuel de votre infrastructure dans Terraform. Il contient des informations cruciales comme :
- L’état courant de chaque ressource : cela signifie qu’il conserve des informations telles que les ID, les adresses IP, les noms et d’autres attributs de chaque ressource que Terraform gère.
- Les dépendances entre les ressources : ce qui permet à Terraform de gérer l’ordre dans lequel les ressources sont créées, mises à jour ou détruites pour garantir la cohérence de votre infrastructure.
Toute ressource qui doit donc être gérée par Terraform doit avoir son état dans le fichier State de Terraform. Ce fichier est essentiel pour que l’outil fonctionne correctement. Il permet à Terraform de comprendre l’état actuel de votre infrastructure par rapport à la configuration souhaitée, ce qui lui permet de déterminer quelles actions (création, mise à jour, suppression) doivent être entreprises pour atteindre l’état souhaité.
Le fichier state doit être géré avec précaution et les mécanismes doivent être mis en place sur sécuriser et stocker ce dernier, car une perte peut être lourde de conséquences pour une entreprise.
Les inconvénients du fichier state
Lorsque j’ai commencé à utiliser Terraform, je me suis heurté rapidement aux inconvénients du fichier state, dont je vais vous lister quelques-uns ici :
1 – La perte du fichier State
Le premier élément qui m’a poussé à vouloir en savoir plus sur le fichier state a été la suppression accidentelle de mon fichier state. Cela n’était pas grave, car il s’agissait d’un environnement à des fins personnelles. Mais, j’ai constaté que Terraform voulait procéder à la destruction et la création à nouveaux de toutes mes ressources sur la base du nouveau fichier state qui a été créé. Pour l’outil, la trace de mes ressources n’existe plus et il suppose donc qu’il s’agit d’un déploiement initial. La suppression accidentelle du fichier state peut entraîner des incohérences graves dans votre infrastructure.
2 – prise en charge des ressources existantes
Terraform est conçu pour provisionner des ressources à partir de zéro. Si vous avez déjà des ressources existantes dans votre infrastructure, les importer dans le fichier state peut être complexe et risqué. À la suite de la perte de mon fichier state, j’ai été obligé d’importer individuellement chacune de mes ressources dans le fichier state de Terraform ce qui n’est pas évident et produit parfois des inconsistances.
3 – Enjeux de sécurité
La perte de mon fichier state m’a poussé à regarder le contenu de ce dernier. J’ai remarqué qu’il contenait des données sensibles comme des chaînes de connexion à des bases de données ou des clés d’API. Il ne s’agit donc pas uniquement des métadonnées sur votre infrastructure qui sont sauvegardées dans le fichier, mais également des informations qui peuvent compromettre votre infrastructure en cas d’accès non autorisé. Dès lors que vous avez des ressources comme des bases de données ou des comptes de stockages, songez à chiffrer votre fichier state.
4 – Difficulté de Collaboration
Partager un fichier state entre plusieurs membres de l’équipe peut être compliqué. Les modifications simultanées peuvent entraîner des conflits difficiles à résoudre.
Comment gérer le fichier state correctement ?
Pour éviter les pièges du fichier state, suivez ces bonnes pratiques et recommandations :
- Utilisez une plateforme de stockage distant : Stocker votre fichier state dans un backend distant, tel qu’AWS S3 ou encore Azure Storage permet une meilleure gestion et une résilience accrue.
- Utilisez des Workspaces : si vous travaillez en équipe, utilisez des workspaces pour isoler les environnements de chaque membre de l’équipe. Les workspaces permettent de gérer plusieurs environnements ou configurations avec une seule définition Terraform. Grâce à cette fonctionnalité, chaque collaborateur peut avoir son propre état.
- Chiffrez les données sensibles : si vous avez des données sensibles dans le fichier state, utilisez des fonctionnalités de chiffrement pour les protéger.
- Contrôlez l’accès au backend distant : si votre fichier state est stocké dans un backend distant comme Azure Blob Storage, vous devez vous assurer qu’il est accessible uniquement aux personnes autorisées.
- Effectuez des sauvegardes régulières : sauvegardez régulièrement votre fichier state et conservez ces sauvegardes dans un endroit sûr. Si vous utilisez un compte de stockage azure, songez à activer la suppression réversible pour vos blobs.
Le fichier state de Terraform est un élément fondamental de la gestion de l’infrastructure en tant que code, mais il doit être géré avec soin pour éviter les écueils potentiels. En comprenant ses avantages et ses inconvénients, ainsi qu’en adoptant de bonnes pratiques de gestion, vous pouvez profiter pleinement de la puissance de Terraform tout en minimisant les risques.