In questo tutorial imparerai ad archiviare lo stato di Terraform in un bucket Cloud Storage.
Per impostazione predefinita, Terraform archivia lo state 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 una propria conoscenza dell'infrastruttura attuale.
Per aiutarti a evitare questi problemi, questa pagina mostra come configurare uno stato remoto che punti a un bucket Cloud Storage. Lo stato remoto è una funzionalità dei backend Terraform.
Costi
Cloud Storage prevede dei costi per operazioni di archiviazione, lettura e scrittura, traffico in uscita dalla rete e replica.
Il bucket Cloud Storage in questo tutorial ha il controllo delle versioni degli oggetti abilitato per conservare la cronologia dei deployment. L'abilitazione del controllo delle versioni degli oggetti aumenta i costi di archiviazione, che puoi mitigare configurando Gestione del ciclo di vita degli oggetti per eliminare le versioni precedenti dello stato.
Prima di iniziare
-
Assicurati di disporre delle
autorizzazioni Cloud Storage necessarie sul tuo account utente:
storage.buckets.create
storage.buckets.list
storage.objects.get
storage.objects.create
storage.objects.delete
storage.objects.update
Scopri di più su ruoli e autorizzazioni.
Come best practice, consigliamo di controllare l'accesso al bucket e ai file di stato archiviati al suo interno. Solo un piccolo gruppo di utenti (ad esempio, l'amministratore cloud principale e la persona che agisce come amministratore alternativo o di backup) deve disporre delle autorizzazioni di amministratore per il bucket. Gli altri sviluppatori dovrebbero avere le autorizzazioni necessarie solo per scrivere e leggere oggetti nel bucket.
- Avviare Cloud Shell
Cloud Shell è una macchina virtuale Compute Engine. Le credenziali di servizio associate a questa macchina virtuale sono automatiche, quindi non è necessario configurare o scaricare una chiave dell'account di servizio.
- Abilita l'API Cloud Storage:
gcloud services enable storage.googleapis.com
Configura Terraform per archiviare lo stato in un bucket Cloud Storage
Nei passaggi successivi, creerai un bucket Cloud Storage e modificherai la configurazione del backend nel tuo nuovo bucket e nel tuo progetto Google Cloud.
Crea il bucket
Aggiungi la seguente risorsa Terraform
google_storage_bucket
a un file di configurazione Terraform, ad esempiomain.tf
.Nello snippet di codice, il campo
location
è hardcoded inUS
(il che significa che viene creato un bucket multiregionale negli Stati Uniti). Puoi modificare questo campo con una località di tua scelta.Esegui
terraform apply
per creare il bucket di archiviazione.
Modifica la configurazione del backend
Aggiungi il testo seguente a un nuovo file di configurazione di Terraform denominato
backend.tf
.terraform { backend "gcs" { bucket = "BUCKET_NAME" prefix = "terraform/state" } }
Assicurati di aggiornare BUCKET_NAME in modo che corrisponda al nome del nuovo bucket Cloud Storage.
Esegui
terraform init
per configurare il tuo backend Terraform.Terraform rileva che un file di stato è già in locale e ti chiede di copiarlo nel nuovo bucket Cloud Storage. Inserisci
yes
.
Dopo aver eseguito questo comando, il tuo stato di Terraform viene archiviato nel bucket Cloud Storage. Terraform esegue il pull dello stato più recente da questo bucket prima di eseguire un comando ed esegue il push dello stato più recente al bucket dopo aver eseguito un comando.