Hai eseguito il deployment delle risorse in Google Cloud e ora devi gestire Infrastructure as Code (IaC) con Terraform. Google offre uno strumento che che puoi utilizzare per generare codice Terraform per le risorse in un progetto, in una cartella dell'organizzazione.
Prima di iniziare
Preparare Cloud Shell.
Avvia Cloud Shell e imposta il progetto Google Cloud predefinito in cui vuoi generare il codice Terraform di cui è stato eseguito il deployment.
Devi eseguire questo comando una sola volta per progetto e puoi eseguirlo in qualsiasi .
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Le variabili di ambiente vengono sostituite se imposti valori espliciti in una di configurazione di 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 vedi
ERROR: (gcloud.components.install) You cannot perform this action because the Google Cloud CLI component manager is disabled for this installation
, esegui questo comando:sudo apt-get install google-cloud-sdk-config-connector
Abilita l'API Cloud Asset.
gcloud services enable cloudasset.googleapis.com
Assicurati che il servizio Cloud Asset Service Agente (
gcp-sa-cloudasset.iam.gserviceaccount.com
) ha Ruoloroles/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 Ruoloroles/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
dei tipi di risorse supportati per l'esportazione in formato Terraform, esegui
il comando gcloud beta resource-config list-resource-types
.
Esporta l'intera configurazione del progetto nel codice Terraform HCL
Il comando gcloud beta resource-config bulk-export --resource-format=terraform
consente di esportare
di risorse configurate nel progetto, nella cartella
dell'organizzazione e li stampa sullo schermo in formato codiceHCL.
gcloud beta resource-config bulk-export \ --project=PROJECT_ID \ --resource-format=terraform
Scrivi l'output in una struttura di directory
Se non l'hai ancora fatto, crea la directory in cui vuoi genera la configurazione del progetto:
mkdir OUTPUT_DIRECTORY
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 restituito
separato .tf
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 >> gcp_resources.tf
Filtra l'output
Filtra l'output del comando di esportazione collettiva specificando i tipi di risorse.
Elenca i tipi di risorse supportati per cui 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
Facoltativamente, scrivi l'output in un file:
gcloud beta resource-config list-resource-types >> strings.txt
Nell'output, il tipo di risorsa per le VM di Compute Engine è elencato come:
KRM KIND: ComputeInstance
Puoi ignorare il prefisso KRM KIND:
.
Esporta 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.
Esporta più tipi di risorse
Esporta istanze VM e regole firewall nel formato di codice HCL:
gcloud beta resource-config bulk-export \ --resource-types=ComputeFirewall,ComputeInstance \ --project=PROJECT_ID \ --resource-format=terraform
Utilizza un file per specificare i tipi di risorse da esportare
Crea una directory denominata
tf-output
.cd && mkdir tf-output && cd tf-output
Crea un file denominato
types.txt
e aggiungi un elenco di tipi di risorse. Per esempio:ComputeBackendBucket ComputeBackendService ComputeForwardingRule
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 alcun tipo di risorsa particolare, il comando riesce ma non viene restituito nulla 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 nella Sezione Prima di iniziare.