Archivia lo stato di Terraform in un bucket Cloud Storage

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

  1. 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

    Vai alla pagina IAM

    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.

  2. 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.

  3. 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

  1. Aggiungi la seguente risorsa Terraform google_storage_bucket a un file di configurazione Terraform, ad esempio 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
      ]
    }

    Nello snippet di codice, il campo location è hardcoded in US (il che significa che viene creato un bucket multiregionale negli Stati Uniti). Puoi modificare questo campo con una località di tua scelta.

  2. Esegui terraform apply per creare il bucket di archiviazione.

Modifica la configurazione del backend

  1. 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.

  2. 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.

Passaggi successivi