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

Costi

Cloud Storage prevede costi per archiviazione, operazioni di lettura e scrittura, traffico in uscita dalla rete e replica.

Nel bucket Cloud Storage in questo tutorial è abilitato il controllo delle versioni degli oggetti per conservare la cronologia dei deployment. L'abilitazione del controllo delle versioni degli oggetti aumenta i costi di archiviazione, che puoi attenuare configurando Gestione del ciclo di vita degli oggetti per eliminare le versioni dello stato precedente.

Prima di iniziare

  1. Assicurati di disporre delle autorizzazioni Cloud Storage necessarie per il 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 devono disporre delle autorizzazioni solo per scrivere e leggere gli 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 seguenti, creerai un bucket Cloud Storage e modificherai la configurazione del backend in base al nuovo bucket e al progetto Google Cloud.

crea il bucket

  1. Aggiungi la seguente risorsa google_storage_bucket Terraform 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 è codificato in US (il che significa che viene creato un bucket multiregionale negli Stati Uniti). Puoi modificare questo campo con una località a 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 hai già un file di stato 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 estrae lo stato più recente da questo bucket prima di eseguire un comando ed esegue il push dello stato più recente nel bucket dopo aver eseguito un comando.

Passaggi successivi