Hai eseguito il deployment delle risorse in Google Cloud, e ora devi gestire la tua infrastruttura come codice (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.
Ruoli
Per ottenere le autorizzazioni necessarie per esportare gli asset in Terraform, chiedi all'amministratore di concederti i seguenti ruoli IAM nell'organizzazione, nella cartella o nel progetto:
-
Consumer Service Usage (
roles/serviceusage.serviceUsageConsumer) -
Se scrivi lo stato in un bucket esistente (
--storage-path=BUCKET):-
Creatore oggetti Storage (
roles/storage.objectCreator) -
Storage Object Viewer (
roles/storage.objectViewer)
-
Creatore oggetti Storage (
-
Se scrivi lo stato in un nuovo bucket:
Storage Object Viewer (
roles/storage.objectViewer)
Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.
Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.
Prima di iniziare
Prepara Cloud Shell.
Avvia Cloud Shell e imposta il progetto Google Cloud predefinito in cui vuoi generare il codice Terraform per le risorse di cui hai eseguito il deployment.
Devi eseguire questo comando una sola volta per progetto e puoi eseguirlo in qualsiasi directory.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Le variabili di ambiente vengono sostituite se imposti valori espliciti in un file 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 di Terraform di Google Cloud.
Se visualizzi
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 service agent Cloud Asset (
gcp-sa-cloudasset.iam.gserviceaccount.com) abbia ilroles/servicenetworking.serviceAgentruolo: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 service agent Cloud Asset (
gcp-sa-cloudasset.iam.gserviceaccount.com) abbia ilroles/storage.objectAdminruolo: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 Terraform Google. Per un
elenco dei tipi di risorse supportati per l'esportazione in formato Terraform, esegui
il gcloud beta resource-config list-resource-types comando.
Esporta l'intera configurazione del progetto nel codice HCL di 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
Scrivi l'output in una struttura di directory
Se non l'hai ancora fatto, crea la directory in cui vuoi generare l'output della 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
--pathspecifica la posizione in cui generare l'output del codice HCL.
Dopo aver eseguito il comando, il codice HCL per ogni risorsa viene generato 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 vuoi stampare l'output sullo schermo o creare file .tf separati, puoi scrivere tutto l'output in un singolo file, come mostrato in questo esempio:
gcloud beta resource-config bulk-export \ --resource-format=terraform \ --project=PROJECT_ID \ >> 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 su cui filtrare
Per un elenco dei tipi di risorse supportati per l'esportazione in formato Terraform,
esegui il gcloud beta resource-config list-resource-types comando:
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 è elencato come:
KRM KIND: ComputeInstance
Puoi ignorare il prefisso KRM KIND:.
Esporta un singolo tipo di risorsa
Utilizza una stringa, ad esempio ComputeInstance, per esportare tipi di risorse specifici per il tuo progetto in 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 di cui generare l'output.
Esporta più tipi di risorse
Esporta le istanze VM e le regole firewall in 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.txte aggiungi un elenco di tipi di risorse. Ad esempio:ComputeBackendBucket ComputeBackendService ComputeForwardingRule
Esegui il comando
gcloud beta resource-config bulk-exportcon il 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 viene eseguito correttamente, ma non viene generato alcun output per quel tipo di risorsa.
Risoluzione dei problemi
Se visualizzi il seguente errore:
"Permission denied during export. Please ensure the Cloud Asset Inventory API is enabled.
Assicurati di aver seguito le istruzioni nella sezione Prima di iniziare.