Le provisionnement et la gestion manuels de l’infrastructure peuvent être un processus complexe et sujet aux erreurs. Heureusement, des outils comme Terraform ont émergé pour rationaliser la gestion de l’infrastructure à l’aide de l’infrastructure en tant que code (IaC).
Cependant, pour exploiter tout le potentiel de Terraform, il est essentiel de comprendre l’état de Terraform. Cet état joue un rôle essentiel dans la cohérence des configurations de l’infrastructure et permet une collaboration efficace entre les équipes.
Cet article explique ce qu’est Terraform, son importance et comment gérer et manipuler efficacement les fichiers d’état.
Qu’est-ce que Terraform State ?
L’état Terraform est un composant essentiel de la fonctionnalité de Terraform. Il agit comme un enregistrement persistant de l’infrastructure que vous gérez à l’aide de Terraform, essentiellement une carte entre les ressources définies dans vos fichiers de configuration (.tf) et leurs homologues réels.
Fonctionnement de Terraform State
Terraform stocke les informations d’état dans un fichier, généralement appelé terraform.tfstate par défaut. Ce fichier est automatiquement mis à jour chaque fois que vous exécutez la commande d’application terraforme. Voici une description détaillée du processus :
- Capturer l’état actuel : Lors de l’application terraforme, Terraform lit l’infrastructure et capture son état actuel, y compris les attributs et les configurations des ressources.
- Comparer les états : Terraform compare cet état capturé à l’état souhaité défini dans vos fichiers de configuration Terraform.
- Identifier les changements : Terraform identifie les écarts entre l’état souhaité et l’état actuel d’après la comparaison de l’étape précédente.
- Appliquer les mises à jour : En cas de différences, Terraform applique les mises à jour nécessaires pour aligner l’infrastructure sur votre configuration définie.
Avantages et importance de l’utilisation de Terraform State
Pour garantir une gestion fiable de l’infrastructure, il est essentiel de maintenir un état Terraform cohérent et précis. Voici pourquoi :
- Dérive de configuration réduite : Au fil du temps, les configurations de l’infrastructure peuvent s’écarter de leur état prévu en raison de modifications manuelles ou de facteurs externes. Un état Terraform à jour agit comme une source unique de vérité, reflétant la configuration réelle de votre infrastructure.
- Planification et exécution fiables : Terraform s’appuie sur le fichier d’état pour planifier et appliquer les modifications d’infrastructure. Un état précis garantit que Terraform dispose d’une image claire de votre infrastructure existante. Cela lui permet de générer des plans d’exécution plus fiables et d’éviter les erreurs pendant l’application des modifications.
- Collaboration d’équipe : Terraform state facilite la collaboration sur les projets d’infrastructure. En stockant le fichier d’état dans un emplacement central, comme un backend distant comme le registre HashiCorp Cloud Terraform ou un service de stockage cloud, plusieurs membres de l’équipe peuvent travailler simultanément sur la même configuration d’infrastructure, favorisant ainsi une gestion centralisée de l’infrastructure.
- Évolutivité pour les grandes infrastructures : À mesure que votre infrastructure devient de plus en plus complexe, la gestion locale de l’état Terraform peut devenir fastidieuse. Le stockage de l’état dans un backend distant vous permet de faire évoluer Terraform plus efficacement. Les backends distants offrent des fonctionnalités telles que le contrôle de version et le contrôle d’accès, facilitant ainsi la gestion de l’état pour les grandes infrastructures distribuées géographiquement.
- Suivi des ressources amélioré : Terraform state conserve un enregistrement détaillé de toutes les ressources provisionnées et de leurs configurations. Ce journal complet facilite considérablement la gestion et la mise à jour de votre infrastructure. Imaginez à quel point il serait difficile de suivre manuellement des centaines de ressources et leurs configurations. Terraform state élimine ce fardeau en fournissant un référentiel central pour tous les détails de l’infrastructure.
- Détection efficace des changements : L’état Terraform permet à Terraform de détecter intelligemment les changements dans votre infrastructure. Lorsque vous exécutez terraform apply , il compare l’état souhaité à l’état enregistré et applique des mises à jour uniquement aux ressources qui ont réellement changé. Vous gagnez ainsi du temps et évitez les modifications inutiles de votre infrastructure.
- Gestion rationalisée des dépendances : Terraform state suit les dépendances entre les ressources. Cela est essentiel, car l’ordre dans lequel les ressources sont créées ou mises à jour peut parfois être important. Par exemple, un serveur Web peut dépendre d’une base de données créée en premier. L’état Terraform garantit que les mises à jour sont appliquées dans le bon ordre en tenant compte de ces dépendances.
Gestion de l’état de la plateforme
Terraform offre une grande flexibilité dans le stockage des fichiers d’état. Vous pouvez choisir entre un stockage local sur la machine du développeur ou utiliser des backends distants pour la collaboration et l’évolutivité.
- Backend local : Le backend local est l’option par défaut et ne nécessite aucune configuration supplémentaire. Le fichier d’état est stocké sur le système de fichiers local, généralement appelé terraform.tfstate dans le répertoire de travail. Cette approche est avantageuse pour sa facilité d’utilisation et convient aux petits projets personnels ou au développement individuel. Cependant, il n’est pas idéal pour la collaboration ou les grandes infrastructures.
- Backend distant : Les backends distants stockent le fichier d’état dans un emplacement centralisé, souvent un service de stockage cloud comme Amazon S3, Google Cloud Storage ou Azure Blob Storage. Le backend à distance permet à plusieurs membres de l’équipe d’accéder à la configuration de l’infrastructure et de la modifier simultanément. Il convient parfaitement aux grandes infrastructures distribuées géographiquement, avec des fonctionnalités telles que le contrôle de version et la reprise après sinistre.
Configuration de l’état de la plateforme
Les étapes de configuration spécifiques varient en fonction du fournisseur de backend distant choisi. Voici un exemple de configuration de Terraform pour utiliser AWS S3 comme backend distant :
# Configure Terraform to use S3 as the remote backend
terraform {
backend "s3" {
bucket = "my-terraform-state" # Name of the S3 bucket to store the state file
key = "path/to/my/statefile" # Path within the bucket to store the state file
region = "us-west-2" # AWS region where the S3 bucket is located
}
}
Bonnes pratiques d’organisation et de version des fichiers d’état
Voici les bonnes pratiques pour gérer facilement les fichiers d’état :
- Segmentation : La division des fichiers d’état par environnement (par exemple, développement, mise en scène, production) ou projet permet de maintenir l’organisation et d’éviter les conflits lorsque vous travaillez sur plusieurs environnements ou projets. Par exemple, considérez des fichiers d’état distincts nommés terraform.tfstate.dev et terraform.tfstate.prod pour les environnements de développement et de production.
- Versionnement avec les systèmes de contrôle de version (VCS) : Les systèmes de contrôle de version comme Git vous permettent de suivre les modifications apportées à vos fichiers d’état au fil du temps. Cela permet de revenir aux configurations précédentes si nécessaire et facilite la collaboration en fournissant une piste d’audit des modifications.
- Chiffrement : Le chiffrement des fichiers d’état, en particulier lors de l’utilisation de backends distants, protège les informations sensibles comme les clés d’accès ou les mots de passe en cas d’accès non autorisé. La plupart des fournisseurs de stockage cloud proposent un chiffrement côté serveur pour les données stockées. Vous pouvez également explorer les outils de chiffrement côté client pour chiffrer le fichier d’état avant de le télécharger sur le backend distant.
Manipulation de l’état de la plateforme
Terraform fournit des commandes puissantes pour interagir avec l’état Terraform. Ces commandes vous permettent de gérer l’infrastructure existante, de réorganiser votre fichier d’état pour une meilleure facilité de maintenance et de retirer les ressources du contrôle de Terraform.
Voici quelques-unes des commandes Terraform les plus couramment utilisées :
- importation terraforme : Cette commande est essentielle pour intégrer les éléments d’infrastructure existants (ressources) sous la direction de Terraform. Il indique à Terraform de reconnaître et de suivre une ressource physique qui existe déjà dans votre environnement cloud. Cela peut être utile pour migrer l’infrastructure existante vers Terraform ou gérer les ressources créées initialement en dehors de Terraform.
- état terraforme : Cette commande centrale fournit diverses sous-commandes pour manipuler votre fichier d’état. Voici quelques-unes :
- liste d’état terraforme : Répertorie toutes les ressources suivies dans le fichier d’état actuel. Cela est utile pour obtenir un aperçu des ressources gérées par Terraform.
- liste d’état terraforme : Répertorie toutes les ressources suivies dans le fichier d’état actuel. Cela est utile pour obtenir un aperçu des ressources gérées par Terraform.
- liste d’état terraforme : Répertorie toutes les ressources suivies dans le fichier d’état actuel. Cela est utile pour obtenir un aperçu des ressources gérées par Terraform.
- présentation terraforme <resource_name> : Affiche des informations détaillées sur une ressource spécifique stockée dans le fichier d’état, y compris ses attributs et sa configuration.
- terraform state rm <resource_name> : Supprime une ressource du fichier d’état. Cela ne détruit pas la ressource réelle de l’infrastructure dans le cloud, mais la supprime uniquement de la gestion de Terraform.
Scénarios courants pour la manipulation de l’état
Voici quelques scénarios pratiques dans lesquels vous devrez manipuler votre état Terraform et quelques exemples de commandes pour y parvenir :
- Ajout de ressources existantes : Utilisez l’importation terraforme pour mettre les ressources d’infrastructure existantes sous le contrôle de Terraform. Cela est particulièrement utile lors de la migration de l’infrastructure existante vers Terraform ou de la gestion initiale des ressources provisionnées en dehors de Terraform. Par exemple, la commande suivante importe une instance AWS EC2 existante avec l’ID i-1234567890abcdef0 dans Terraform et lui attribue l’exemple de nom logique :
terraform import aws_instance.example i-1234567890abcdef0
- Déplacement des ressources : Utilisez terraform state mv pour réorganiser votre fichier d’état afin d’améliorer la maintenance. Cela peut être utile lorsque vous souhaitez regrouper les ressources associées dans des modules ou simplement améliorer la structure globale de votre fichier d’état. Par exemple, la commande suivante déplace la ressource aws_instance.example vers un nouveau module nommé new_module :
terraform state mv aws_instance.example
module.new_module.aws_instance.example
Suppression des ressources : Utilisez terraform state rm pour supprimer les ressources de la direction de Terraform sans détruire les ressources réelles dans le cloud. Cela est utile dans les situations où vous souhaitez arrêter de gérer une ressource avec Terraform, mais conserver la ressource elle-même dans l’environnement cloud.
Conclusion
Terraform state est un composant fondamental des capacités de gestion de l’infrastructure de Terraform. En comprenant et en gérant efficacement l’état de Terraform, vous pouvez garantir une infrastructure cohérente, fiable et évolutive. Que vous utilisiez des backends locaux ou distants, Portworx® de Pure Storage offre la meilleure solution de stockage persistant pour vos charges de travail de conteneurs avec Kubernetes . En exploitant cette fonctionnalité avec vos configurations Terraform, vous avez la garantie de toujours stocker vos données, indépendamment des modifications apportées à vos fichiers d’état Terraform.