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.
Préparer l'environnement
Clonez le dépôt GitHub contenant les exemples Terraform :
git clone https://github.com/terraform-google-modules/terraform-docs-samples.git --single-branch
Accédez au répertoire de travail :
cd terraform-docs-samples/storage/remote_terraform_backend_template
Examiner les fichiers Terraform
Examinez le fichier
main.tf
:cat main.tf
Le résultat ressemble à ce qui suit :
Ce fichier décrit les ressources suivantes :
random_id
: cette valeur est ajoutée au nom du bucket Cloud Storage pour garantir un nom unique.google_storage_bucket
: bucket Cloud Storage permettant de stocker le fichier d'état. Ce bucket est configuré avec les propriétés suivantes :force_destroy
est défini surfalse
pour s'assurer que le bucket n'est pas supprimé s'il contient des objets. Cela permet de s'assurer que les informations sur l'état du bucket ne sont pas supprimées accidentellement.public_access_prevention
est défini surenforced
pour s'assurer que le contenu du bucket n'est pas accidentellement exposé au public.uniform_bucket_level_access
est défini surtrue
pour permettre de contrôler l'accès au bucket et à son contenu à l'aide des autorisations IAM au lieu des listes de contrôle des accès d'accès.versioning
est activé pour s'assurer que les versions antérieures de l'état sont conservées dans le bucket.
local_file
: fichier local. Le contenu de ce fichier indique à Terraform d'utiliser le bucket Cloud Storage comme backend distant une fois le bucket créé.
Provisionner le bucket Cloud Storage
Initialisez Terraform :
terraform init
Lorsque vous exécutez
terraform init
pour la première fois, le bucket Cloud Storage que vous avez spécifié dans le fichiermain.tf
n'existe pas encore. Terraform initialise donc un backend local pour stocker l'état dans le système de fichiers local.Appliquez la configuration pour provisionner les ressources décrites dans le fichier
main.tf
:terraform apply
Lorsque vous y êtes invité, saisissez
yes
.Lorsque vous exécutez
terraform apply
pour la première fois, Terraform provisionne le bucket Cloud Storage pour stocker l'état. Il crée également un fichier local dont le contenu indique à Terraform d'utiliser le bucket Cloud Storage comme backend distant pour stocker l'état.
Migrer l'état vers un bucket Cloud Storage
Migrez l'état Terraform vers le backend Cloud Storage distant :
terraform init -migrate-state
Terraform détecte que vous disposez déjà d'un fichier d'état local et vous invite à migrer l'état vers le nouveau bucket Cloud Storage. Lorsque vous y êtes invité, 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.