Esporta le tue risorse Google Cloud nel formato Terraform

Hai eseguito il deployment delle risorse in Google Cloud e ora devi gestire Infrastructure as Code (IaC) con Terraform. Google fornisce uno strumento che puoi utilizzare per generare codice Terraform per le risorse in un progetto, una cartella o un'organizzazione.

Prima di iniziare

  • Preparare Cloud Shell.

    Avvia Cloud Shell e imposta il progetto Google Cloud predefinito in cui vuoi generare il codice Terraform per le risorse di cui è stato eseguito il deployment.

    Devi eseguire questo comando una sola volta per progetto e puoi farlo in qualsiasi directory.

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    Le variabili di ambiente vengono sostituite se imposti valori espliciti in una di configurazione Terraform.

  • In Cloud Shell, installa l'interfaccia a riga di comando (CLI) per Config Connector.

    gcloud components install config-connector
    

    Config Connector ti consente di utilizzare lo strumento di esportazione collettiva Terraform di Google Cloud.

    Se viene visualizzato ERROR: (gcloud.components.install) You cannot perform this action because the Google Cloud CLI component manager is disabled for this installation, esegui invece il seguente comando:

    sudo apt-get install google-cloud-sdk-config-connector
    
  • Abilita l'API Cloud Asset.

    gcloud services enable cloudasset.googleapis.com
    
  • Crea un account di servizio da utilizzare per questa esportazione:

    gcloud beta services identity create --service=cloudasset.googleapis.com
    
  • Assicurati che il servizio Cloud Asset Service Agente (gcp-sa-cloudasset.iam.gserviceaccount.com) ha Ruolo roles/servicenetworking.serviceAgent:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-cloudasset.iam.gserviceaccount.com \
      --role=roles/servicenetworking.serviceAgent
    
  • Assicurati che il servizio Cloud Asset Service Agente (gcp-sa-cloudasset.iam.gserviceaccount.com) ha Ruolo roles/storage.objectAdmin:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-cloudasset.iam.gserviceaccount.com \
      --role=roles/storage.objectAdmin
    

Limitazioni

Alcuni tipi di risorse non sono supportati per l'esportazione in formato Terraform anche se sono supportati dal provider Google Terraform. Per un elenco dei tipi di risorse supportati per l'esportazione in formato Terraform, esegui il comando gcloud beta resource-config list-resource-types.

Esportare l'intera configurazione del progetto in codice HCL Terraform

Il comando gcloud beta resource-config bulk-export --resource-format=terraform esporta le risorse configurate nel progetto, nella cartella o nell'organizzazione e le stampa sullo schermo in formato di codice HCL.

gcloud beta resource-config bulk-export \
  --project=PROJECT_ID \
  --resource-format=terraform

Scrivere l'output in una struttura di directory

  1. Se non l'hai ancora fatto, crea la directory in cui vuoi genera la configurazione del progetto:

    mkdir OUTPUT_DIRECTORY
    
  2. Esporta l'intera configurazione del progetto nella directory:

    gcloud beta resource-config bulk-export \
     --path=OUTPUT_DIRECTORY \
     --project=PROJECT_ID \
     --resource-format=terraform
    

    Il flag --path specifica la posizione in cui restituire il codice HCL.

Dopo aver eseguito il comando, il codice HCL per ogni risorsa viene visualizzato in un file .tf separato nella seguente struttura di directory:

OUTPUT_DIRECTORY/projects/PROJECT_ID/RESOURCE_TYPE

Scrivi l'output in un singolo file

Se non desideri stampare l'output sullo schermo o crea .tf puoi scrivere tutto l'output in un singolo file, come mostrato in esempio:

gcloud beta resource-config bulk-export \
  --resource-format=terraform \
  --project=PROJECT_ID \
  >> gcp_resources.tf

Filtrare l'output

Filtra l'output del comando di esportazione collettiva specificando i tipi di risorse.

Elenca i tipi di risorse supportati in base ai quali applicare il filtro

Per un elenco dei tipi di risorse supportati per l'esportazione in formato Terraform, esegui il comando gcloud beta resource-config list-resource-types:

gcloud beta resource-config list-resource-types

(Facoltativo) Scrivi l'output in un file:

gcloud beta resource-config list-resource-types >> strings.txt

Nell'output, il tipo di risorsa per le VM Compute Engine è indicato come:

KRM KIND: ComputeInstance

Puoi ignorare il prefisso KRM KIND:.

Esportare un singolo tipo di risorsa

Usa una stringa, ad esempio ComputeInstance, per esportare tipi di risorse specifici per del tuo progetto nel formato di codice HCL:

gcloud beta resource-config bulk-export \
  --resource-types=RESOURCE_TYPE \
  --project=PROJECT_ID \
  --resource-format=terraform

Il flag --resource-types specifica il tipo di risorsa da restituire.

Esportare più tipi di risorse

Esporta le istanze VM e le regole del firewall in formato di codice HCL:

gcloud beta resource-config bulk-export \
  --resource-types=ComputeFirewall,ComputeInstance \
  --project=PROJECT_ID \
  --resource-format=terraform

Utilizzare un file per specificare i tipi di risorse da esportare

  1. Crea una directory denominata tf-output.

    cd && mkdir tf-output && cd tf-output
    
  2. Crea un file denominato types.txt e aggiungi un elenco di tipi di risorse. Ad esempio:

    ComputeBackendBucket
    ComputeBackendService
    ComputeForwardingRule
    
  3. Esegui il comando gcloud beta resource-config bulk-export con Flag --resource-types-file:

    gcloud beta resource-config bulk-export \
     --resource-types-file=types.txt \
     --path=tf-output \
     --project=PROJECT_ID \
     --resource-format=terraform
    

Se il progetto non contiene un determinato tipo di risorsa, il comando riesce, ma non viene generato alcun output per quel tipo di risorsa.

Risoluzione dei problemi

Se ricevi il seguente errore:

"Autorizzazione negata durante l'esportazione. Assicurati che l'API Cloud Asset Inventory attivata."

Assicurati di aver seguito le istruzioni riportate nella sezione Prima di iniziare.

Passaggi successivi