In questo tutorial, imparerai come archiviare lo stato di Terraform in un bucket Cloud Storage.
Per impostazione predefinita, Terraform archivia lo stato
localmente in un file denominato terraform.tfstate
. Questa configurazione predefinita può
rendere difficile l'utilizzo di Terraform per i team quando più utenti eseguono Terraform contemporaneamente e ogni macchina ha la propria comprensione dell'infrastruttura attuale.
Per aiutarti a evitare questi problemi, questa pagina mostra come configurare uno stato remoto che punta a un bucket Cloud Storage. Lo stato remoto è una funzionalità dei backend Terraform.
Prepara l'ambiente
Clona il repository GitHub contenente gli esempi di Terraform:
git clone https://github.com/terraform-google-modules/terraform-docs-samples.git --single-branch
Passa alla directory di lavoro:
cd terraform-docs-samples/storage/remote_terraform_backend_template
Esamina i file Terraform
Esamina il file
main.tf
:cat main.tf
L'output è simile al seguente:
Questo file descrive le seguenti risorse:
random_id
: questo valore viene aggiunto al nome del bucket Cloud Storage per garantire un nome univoco per il bucket Cloud Storage.google_storage_bucket
: il bucket Cloud Storage in cui archiviare il file di stato. Questo bucket è configurato per avere le seguenti proprietà:force_destroy
è impostato sufalse
per garantire che il bucket non venga eliminato se contiene oggetti. In questo modo, le informazioni sullo stato nel bucket non vengono eliminate accidentalmente.public_access_prevention
è impostato suenforced
per assicurarsi che i contenuti del bucket non vengano esposti accidentalmente al pubblico.uniform_bucket_level_access
è impostato sutrue
per consentire il controllo dell'accesso al bucket e ai relativi contenuti utilizzando le autorizzazioni IAM anziché controllo dell'accesso dell'accesso.versioning
è attivato per garantire che le versioni precedenti dello stato vengano conservate nel bucket.
local_file
: un file locale. Il contenuto di questo file indica a Terraform di utilizzare il bucket Cloud Storage come backend remoto una volta creato il bucket.
Esegui il provisioning del bucket Cloud Storage
Inizializza Terraform:
terraform init
Quando esegui
terraform init
per la prima volta, il bucket Cloud Storage specificato nel filemain.tf
non esiste ancora, quindi Terraform inizializza un backend locale per archiviare lo stato nel file system locale.Applica la configurazione per eseguire il provisioning delle risorse descritte nel file
main.tf
:terraform apply
Quando richiesto, inserisci
yes
.Quando esegui
terraform apply
per la prima volta, Terraform esegue il provisioning del bucket Cloud Storage per l'archiviazione dello stato. Crea anche un file locale; i contenuti di questo file indicano a Terraform di utilizzare il bucket Cloud Storage come backend remoto per archiviare lo stato.
Migrazione dello stato al bucket Cloud Storage
Esegui la migrazione dello stato di Terraform al backend Cloud Storage remoto:
terraform init -migrate-state
Terraform rileva che hai già un file di stato localmente e ti chiede di eseguire la migrazione dello stato al nuovo bucket Cloud Storage. Quando richiesto, inserisci
yes
.
Dopo aver eseguito questo comando, lo stato di Terraform viene archiviato nel bucket Cloud Storage. Terraform estrae l'ultimo stato da questo bucket prima di eseguire un comando e lo inserisce nel bucket dopo l'esecuzione di un comando.