Gestisci il file di stato Terraform

Per qualsiasi deployment, potresti voler esaminare o modificare il file di stato. Ad esempio, potresti voler importare o rimuovere risorse dal deployment, operazione che esegui modificando il file di stato.

Questa pagina descrive come utilizzare il file di stato di Terraform che viene creato per ogni deployment e revisione. Per scoprire di più sul file di stato, consulta Stato.

Le istruzioni riportate in questa pagina presuppongono che tu abbia familiarità con Terraform.

Prima di iniziare

  1. Assicurati di disporre delle autorizzazioni necessarie per lavorare con il file di stato. Il ruolo config.admin include le autorizzazioni richieste. Le autorizzazioni specifiche necessarie sono:

    • config.deployments.lock
    • config.revisions.getState
    • config.deployments.updateState
    • config.deployments.unlock
    • config.deployments.getLock
    • config.deployments.getState
  2. Assicurati di avere una copia locale della configurazione Terraform. Questa è la configurazione che corrisponde al file di stato con cui stai lavorando.

    La copia locale della configurazione ti consente di eseguire comandi come terraform refresh o terraform plan localmente mentre modifichi il file di stato.

  3. Installa Terraform per utilizzare Terraform CLI sulla tua macchina locale.

Modificare o esaminare il file di stato

Per modificare o ispezionare il file di stato, devi bloccare il deployment e scaricare il file di stato. A questo punto, puoi modificare o esaminare il file di stato.

Dopo aver modificato il file di stato, caricalo in Infra Manager per utilizzarlo nel deployment.

Bloccare il deployment

  1. Blocca il deployment per impedire modifiche durante la mutazione del file di stato. Il deployment deve essere bloccato per poter scaricare il file di stato.

    gcloud infra-manager deployments lock DEPLOYMENT_ID --project PROJECT_ID --location LOCATION
    

    Sostituisci:

    • DEPLOYMENT_ID con l'identificatore del deployment.
    • PROJECT_ID con il progetto in cui viene eseguito il deployment.
    • LOCATION con la località in cui viene eseguito il deployment.

    L'output di questo comando contiene un lock ID utilizzato per caricare e sbloccare il file di stato.

  2. Per recuperare l'ID blocco in qualsiasi momento, utilizza il comando:

    gcloud infra-manager deployments export-lock DEPLOYMENT_ID --project PROJECT_ID --location LOCATION
    

Scarica il file di stato

Per scaricare il file di stato, utilizza un URL Cloud Storage firmato:

SIGNED_STATE_DOWNLOAD_URL=$(gcloud infra-manager deployments export-statefile DEPLOYMENT_ID --project PROJECT_ID --location LOCATION --format="get(signedUri)")

curl -s -X GET --output terraform.tfstate ${SIGNED_STATE_DOWNLOAD_URL}

Modificare il file di stato localmente

  1. Verifica che la configurazione (file *.tf) si trovi nella stessa directory del file di stato scaricato (terraform.tfstate).

  2. Inizializza Terraform:

    terraform init
    
  3. Se hai già inizializzato Terraform, potrebbe essere necessario inizializzarlo con il flag di riconfigurazione:

    terraform init -reconfigure
    
  4. Lavora con il file di stato come preferisci. Ad esempio, puoi eseguire operazioni di ispezione dello stato o mutazione. Per maggiori dettagli sull'utilizzo del file di stato, vedi Manipolazione dello stato di Terraform.

  5. Se apporti modifiche ai file di configurazione Terraform in locale, carica la configurazione modificata. Carica questa configurazione nel bucket di archiviazione o nel repository Git pubblico che utilizzi come origine per il deployment della configurazione.

Carica il file di stato

Utilizza un URL firmato di Cloud Storage per caricare il file di stato:

  1. Recupera l'ID serratura:

    LOCK_ID=$(gcloud infra-manager deployments export-lock DEPLOYMENT_ID --project PROJECT_ID --location LOCATION --format="get(lockId)")
    
  2. Ottieni l'URL di caricamento:

    SIGNED_STATE_UPLOAD_URL=$(gcloud infra-manager deployments import-statefile DEPLOYMENT_ID --project PROJECT_ID --location LOCATION --lock-id ${LOCK_ID} --format="get(signedUri)")
    
    curl -s -X PUT --upload-file terraform.tfstate ${SIGNED_STATE_UPLOAD_URL}
    

Sblocca il deployment

  1. Recupera l'ID serratura:

    LOCK_ID=$(gcloud infra-manager deployments export-lock DEPLOYMENT_ID --project PROJECT_ID --location LOCATION --format="get(lockId)")
    
  2. Sblocca il deployment:

    gcloud infra-manager deployments unlock DEPLOYMENT_ID --project PROJECT_ID --location LOCATION --lock-id ${LOCK_ID}
    

Passaggi successivi