Tous les produits
Search
Centre de documentation

Terraform:Introduction to Terraform state

Dernière mise à jour :Aug 11, 2026

Lorsque vous gérez une infrastructure cloud avec Terraform, il est essentiel de suivre quels blocs de configuration correspondent à quelles ressources réelles afin de détecter précisément les modifications. L'état Terraform conserve cette correspondance, ce qui permet à Terraform de générer des plans d'exécution corrects et d'appliquer uniquement les changements nécessaires.

Qu'est-ce que l'état Terraform

L'état Terraform est un référentiel de métadonnées pour la configuration de votre infrastructure. Par défaut, Terraform enregistre l'état de chaque ressource qu'il gère dans un fichier d'état nommé terraform.tfstate, mais vous pouvez également stocker ce fichier à distance.

image

Chaque bloc de ressource dans une configuration Terraform est identifié dans l'état par son resource_name. Terraform utilise cet identifiant pour faire correspondre les objets distants, tels que les ressources cloud, aux instances de ressources déclarées dans votre configuration. Lorsque Terraform crée ou modifie un objet distant, il enregistre l'identité de cet objet dans le fichier d'état. Les futures modifications de configuration s'appuient sur cet enregistrement pour déterminer s'il faut mettre à jour ou supprimer l'objet.

Le flux de gestion des ressources fonctionne comme suit :

  • Lors du premier terraform apply, Terraform crée les ressources déclarées et génère un fichier d'état qui référence chaque ressource par son nom de bloc.

  • Lors des exécutions suivantes, Terraform compare le fichier de configuration, le fichier d'état et l'état réel de la ressource distante, puis génère un plan d'exécution en fonction des différences constatées.

  • Lors de l'exécution du plan, Terraform met à jour chaque ressource pour qu'elle corresponde à la configuration. Si une mise à jour sur place n'est pas possible en raison des limitations de l'API distante, Terraform détruit et recrée la ressource.

  • Une fois le plan exécuté, Terraform met à jour le fichier d'état pour refléter l'état actuel de l'infrastructure.

  • Si une ressource est supprimée de la configuration mais existe toujours dans le fichier d'état, Terraform détruit cette ressource.

Stockage de l'état Terraform

Par défaut, Terraform enregistre l'état localement dans le répertoire de travail actuel sous forme de fichier .tfstate. Cette approche convient parfaitement aux projets développés par une seule personne, sans configuration supplémentaire. Lorsque plusieurs développeurs exécutent Terraform simultanément, chacun avec son propre fichier d'état local, cette méthode pose problème.

L'utilisation d'un état local dans un environnement d'équipe présente trois limites :

  1. Absence d'accès partagé

    Chaque membre de l'équipe doit accéder au même fichier d'état. Le stocker sur une ressource partagée, telle qu'une instance ECS, ajoute une charge de gestion et crée un point de défaillance unique.

  2. Absence de verrouillage de l'état

    Si deux membres de l'équipe exécutent Terraform simultanément, ils peuvent provoquer une condition de concurrence. L'écriture simultanée de plusieurs processus Terraform dans le même fichier d'état risque d'entraîner des conflits, une perte de données et une corruption du fichier d'état.

  3. Exposition des données sensibles

    Le fichier d'état stocke les données en texte clair. Les valeurs sensibles, telles que les identifiants de base de données et les mots de passe SSH, sont visibles par toute personne ayant accès au fichier.

Stockez le fichier d'état dans un emplacement centralisé et distant lorsque plusieurs personnes gèrent conjointement l'infrastructure. Lors des modifications de l'infrastructure, le fichier d'état distant se met à jour automatiquement, garantissant que chaque membre de l'équipe dispose de la dernière version de l'état.

Le stockage distant de l'état résout ces trois limitations :

  1. Mises à jour automatiques

    Après la configuration d'un backend distant, Terraform charge automatiquement l'état depuis l'emplacement distant à chaque exécution de plan ou de apply, puis renvoie l'état mis à jour après chaque apply. Cela élimine les erreurs liées à la gestion manuelle de l'état.

  2. Verrouillage de l'état

    Lorsqu'une commande Terraform s'exécute, le backend distant verrouille le fichier d'état. Cela empêche la corruption due à des exécutions concurrentes de terraform apply par plusieurs développeurs.

  3. Stockage sécurisé

    Les buckets OSS prennent en charge le chiffrement en transit et au repos, et offrent un contrôle d'accès granulaire qui vous permet de restreindre les utilisateurs autorisés à lire ou modifier le fichier d'état.

Configuration du stockage distant de l'état

Alibaba Cloud prend en charge le stockage distant de l'état à l'aide de buckets Object Storage Service (OSS), avec un verrouillage du fichier d'état fourni par Tablestore. Avant de configurer le stockage distant de l'état, créez un bucket OSS pour stocker le fichier d'état et une instance Tablestore pour gérer le verrouillage.

image
  1. Créez les ressources dépendantes

    Ajoutez les ressources alicloud_oss_bucket, alicloud_ots_instance et alicloud_ots_table à un fichier de configuration Terraform tel que main.tf. Définissez le nom du bucket, le nom de l'instance Tablestore, le type d'instance et le nom de la table selon vos besoins. Exécutez terraform apply pour créer les ressources.

  2. Configurez l'état distant

    Ajoutez la configuration du backend dans un nouveau fichier nommé backend.tf, puis exécutez terraform init. Terraform détecte le fichier d'état local existant et vous invite à le copier dans le bucket OSS ; saisissez yes. Une fois terraform init terminé, votre état Terraform est stocké dans le bucket OSS.

Pour simplifier cette configuration, utilisez le module Terraform Terraform module fourni par Alibaba Cloud.

Voici un extrait d'un fichier d'état stocké dans un bucket OSS :

{
  "version": 4,
  "terraform_version": "1.7.1",
  "serial": 9,
  "lineage": "5827f172-fc29-c293-cce7-7932f3537499",
  "outputs": {},
  "resources": [
    {
      "mode": "managed",
      "type": "alicloud_oss_bucket",
      "name": "this",
      "provider": "provider[\"registry.terraform.io/hashicorp/alicloud\"]",
      "instances": [
        {
          "schema_version": 0,
          "attributes": {
            "access_monitor": [
              {
                "status": "Disabled"
              }
            ],
            "acl": "private",
            "bucket": "tf-oss-backend-for-demo",

Le fichier d'état enregistre les métadonnées de chaque ressource gérée, y compris son type, son nom et son fournisseur.

Bonnes pratiques pour l'état Terraform

  1. Utilisez un état distant pour la collaboration en équipe

    Utilisez un état distant pour verrouiller et versionner le fichier d'état lorsque vous travaillez en équipe. Utilisez OSS comme backend de stockage distant de l'état et Tablestore pour le verrouillage de l'état. Restreignez l'accès au bucket de stockage d'état au système de build et aux administrateurs disposant de privilèges élevés. Ajoutez *.tfstate à votre fichier .gitignore afin d'éviter que les fichiers d'état locaux ne soient accidentellement validés dans des systèmes de contrôle de version tels que GitHub ou GitLab.

  2. Évitez de stocker des données sensibles dans l'état

    De nombreuses ressources et fournisseurs de données écrivent des valeurs sensibles, telles que les identifiants et les mots de passe, en texte clair dans le fichier d'état. Évitez de stocker des informations sensibles dans des ressources qui les exposent via l'état.

  3. Chiffrez l'état

    Chiffrez toujours le fichier d'état distant comme couche de sécurité supplémentaire. OSS prend en charge trois méthodes de chiffrement : KMS, AES256 et SM4. Utilisez une clé KMS personnalisée pour une protection accrue.

  4. Ne modifiez jamais manuellement le fichier d'état

    Le fichier d'état maintient la correspondance entre votre configuration Terraform et votre infrastructure Alibaba Cloud. Des modifications manuelles peuvent corrompre l'état et entraîner de graves pannes d'infrastructure.