Stocker l'état Terraform dans un bucket Cloud Storage

Dans ce tutoriel, vous allez apprendre à stocker l'état Terraform dans un bucket Cloud Storage.

Par défaut, Terraform stocke l'état localement dans un fichier nommé terraform.tfstate. Cette configuration par défaut peut rendre l'utilisation de Terraform difficile pour les équipes lorsque de multiples utilisateurs exécutent Terraform en même temps et que chaque ordinateur possède sa propre compréhension de l'infrastructure actuelle.

Pour vous aider à éviter de tels problèmes, cette page vous explique comment configurer un état distant qui pointe vers un bucket Cloud Storage. Un état distant est une fonctionnalité des backends Terraform.

Coûts

Cloud Storage entraîne des coûts liés au stockage, aux opérations de lecture et d'écriture, à la sortie réseau et à la réplication.

Dans le bucket Cloud Storage de ce tutoriel, la gestion des versions des objets est activée pour conserver l'historique de vos déploiements. L'activation de la gestion des versions des objets augmente les coûts de stockage. Vous pouvez limiter cette augmentation des coûts en configurant la gestion du cycle de vie des objets afin de supprimer les anciennes versions d'état.

Avant de commencer

  1. Assurez-vous de disposer des autorisations Cloud Storage nécessaires sur votre compte utilisateur :
    • storage.buckets.create
    • storage.buckets.list
    • storage.objects.get
    • storage.objects.create
    • storage.objects.delete
    • storage.objects.update

    Accéder à la page IAM

    En savoir plus sur les rôles et les autorisations.

    Nous vous recommandons de contrôler les accès au bucket et aux fichiers d'état qui y sont stockés. Seul un petit groupe d'utilisateurs (par exemple, l'administrateur cloud principal et la personne agissant en tant qu'administrateur alternatif ou de secours) doit disposer des autorisations d'administrateur pour le bucket. Les autres développeurs doivent être uniquement autorisés à écrire et à lire des objets dans le bucket.

  2. Démarrez Cloud Shell.

    Cloud Shell est une machine virtuelle Compute Engine. Les identifiants de service associés à cette machine virtuelle sont automatiques. Vous n'avez donc pas besoin de configurer ni de télécharger une clé de compte de service.

  3. Activez l'API Cloud Storage :

    gcloud services enable storage.googleapis.com
    

Configurer Terraform pour stocker l'état dans un bucket Cloud Storage

Dans les étapes suivantes, vous allez créer un bucket Cloud Storage et modifier la configuration du backend pour votre nouveau bucket et votre projet Google Cloud.

Créer le bucket

  1. Ajoutez la ressource Terraform google_storage_bucket suivante à un fichier de configuration Terraform, tel que main.tf.

    resource "random_id" "bucket_prefix" {
      byte_length = 8
    }
    
    resource "google_storage_bucket" "default" {
      name          = "${random_id.bucket_prefix.hex}-bucket-tfstate"
      force_destroy = false
      location      = "US"
      storage_class = "STANDARD"
      versioning {
        enabled = true
      }
      encryption {
        default_kms_key_name = google_kms_crypto_key.terraform_state_bucket.id
      }
      depends_on = [
        google_project_iam_member.default
      ]
    }

    Dans l'extrait de code, le champ location est codé en dur sur US (ce qui signifie qu'un bucket multirégional aux États-Unis est créé). Vous pouvez remplacer ce champ par l'emplacement de votre choix.

  2. Exécutez terraform apply pour créer le bucket de stockage.

Modifier la configuration du backend

  1. Ajoutez le texte suivant à un nouveau fichier de configuration Terraform appelé backend.tf.

    terraform {
     backend "gcs" {
       bucket  = "BUCKET_NAME"
       prefix  = "terraform/state"
     }
    }
    

    Veillez à mettre à jour la variable BUCKET_NAME pour qu'elle corresponde au nom de votre nouveau bucket Cloud Storage.

  2. Exécutez terraform init pour configurer votre backend Terraform.

    Terraform détecte que vous disposez déjà d'un fichier d'état et vous invite à le copier dans le nouveau bucket Cloud Storage. Saisissez yes.

Une fois cette commande exécutée, votre état Terraform est stocké dans le bucket Cloud Storage. Terraform extrait le dernier état de ce bucket avant d'exécuter une commande et transfère le dernier état vers le bucket après l'exécution d'une commande.

Étapes suivantes