Domande frequenti su Terraform su Google Cloud

Questa pagina fornisce risposte alle domande più comuni che si incontrano quando si utilizza Terraform per gestire le risorse su Google Cloud, in particolare per quanto riguarda le interazioni con le API e l'inizio.

Iniziare a utilizzare Terraform

Questa sezione tratta i concetti fondamentali e i passaggi iniziali per i nuovi utenti di Terraform.

Che cos'è Infrastructure as Code (IaC) e perché dovrei utilizzare Terraform?

Infrastructure as Code (IaC) è la pratica di gestire ed eseguire il provisioning dell'infrastruttura di computing tramite file di definizione leggibili dalla macchina. Per una panoramica completa dei concetti e dei vantaggi di IaC, consulta Che cos'è Infrastructure as Code?.

Terraform è uno strumento IaC open source utilizzato per definire, eseguire il provisioning e gestire le risorse cloud e on-premise. Per scoprire i vantaggi dell'utilizzo di Terraform per il flusso di lavoro IaC, consulta i Vantaggi dell'utilizzo di Terraform.

Come faccio a installare Terraform ed eseguire la mia prima configurazione?

Per iniziare a utilizzare Terraform, devi prima scaricare e installare Terraform CLI sulla tua macchina locale. Le istruzioni sono disponibili sul sito web di HashiCorp Terraform. Dopo l'installazione, puoi creare un file di configurazione Terraform, definire una risorsa (ad esempio un bucket Cloud Storage), quindi utilizzare terraform init per inizializzare la directory di lavoro, terraform plan per visualizzare l'anteprima delle modifiche e terraform apply per applicarle.

Che cos'è HashiCorp Configuration Language (HCL) e dove posso imparare la sua sintassi?

HashiCorp Configuration Language (HCL) è il linguaggio di configurazione utilizzato da Terraform. È progettato per essere leggibile dalle persone e dalle macchine, per una scrittura e una comprensione chiare ed efficienti delle definizioni dell'infrastruttura. HCL supporta varie funzionalità come variabili, espressioni, funzioni e moduli. Puoi imparare la sintassi HCL tramite la documentazione ufficiale di HashiCorp Terraform , che fornisce guide ed esempi completi.

Dove posso trovare esempi di configurazioni Terraform per le Google Cloud risorse?

Puoi trovare numerosi esempi di configurazioni Terraform per Google Cloud:

  • HashiCorp Terraform Registry: il registro Terraform ufficiale per il Google Cloud provider contiene documentazione ed esempi per ogni risorsa e origine dati.

  • Google Cloud Esempi di Terraform: Google fornisce una varietà di esempi di Terraform che mostrano come eseguire il deployment e gestire le risorse comuni Google Cloud

  • Repository GitHub: molti repository open source, inclusa l'organizzazione GitHub terraform-google-modules, offrono esempi e moduli riutilizzabili.

Come posso gestire e testare configurazioni Terraform complesse, soprattutto quando si tratta di molte risorse?

Per le configurazioni complesse, valuta la possibilità di utilizzare le funzionalità di Terraform progettate per la scalabilità e la manutenibilità:

  • Moduli: incapsula e riutilizza i pattern di infrastruttura comuni.

  • Workspace: gestisci più istanze distinte di una singola configurazione.

  • terraform plan e terraform validate: utilizza spesso questi comandi per convalidare la sintassi e visualizzare l'anteprima delle modifiche senza il deployment effettivo.

  • Targeting delle risorse (da utilizzare con cautela): per testare parti specifiche, puoi utilizzare temporaneamente -target con terraform apply o terraform destroy, anche se in genere questa operazione è sconsigliata per le operazioni di routine a causa della complessità della gestione dello stato.

  • Ambienti dedicati: esegui il deployment negli ambienti di sviluppo o di gestione temporanea per i test prima della produzione.

Google Cloud Domande sull'API

Queste domande riguardano le richieste comuni relative all'interazione di Terraform con Google Cloud le API, incluse le API pubbliche e private.

Posso utilizzare Terraform per gestire o importare API interne o private Google Cloud come dataproc-control.googleapis.com?

No. Le API interne o private Google Cloud fanno parte della Service Infrastructure gestita di Google e non sono esposte per la gestione, l'abilitazione, o l'importazione dirette dei clienti tramite Terraform. Queste API vengono gestite automaticamente da Google Cloud. Se tenti di gestirle direttamente con Terraform, si verificheranno errori.

Per una spiegazione completa, consulta la guida Comprendere Google Cloud le API e Terraform.

Qual è la differenza tra abilitare un'API e importare una risorsa in Terraform?

  • Abilitare un'API: significa attivare un servizio specifico Google Cloud per il tuo progetto e concedere a quest'ultimo le autorizzazioni necessarie per utilizzare il servizio. Quando utilizzi Terraform su Google Cloud, questa operazione viene in genere eseguita utilizzando la risorsa google_project_service. Questo è un prerequisito per la creazione di risorse che si basano su questa API.

  • Importare una risorsa: si riferisce all'inserimento di una risorsa Google Cloud esistente (ad esempio, un'istanza Compute Engine, un bucket Cloud Storage) creata al di fuori di Terraform nella gestione di Terraform. Importi risorse, non le API stesse.

Per maggiori dettagli, consulta la guida Comprendere Google Cloud le API e Terraform Guide.

Cosa succede se non gestisco o importo esplicitamente dataproc-control.googleapis.com? Influirà sulla mia capacità di utilizzare Managed Service for Apache Spark?

No, non influirà sulla tua capacità di utilizzare Managed Service for Apache Spark. dataproc-control.googleapis.com è un'API interna utilizzata da Managed Service for Apache Spark per il proprio controllo operativo. La sua funzionalità viene gestita automaticamente da Google Cloude non richiede l'abilitazione, l'importazione o la gestione esplicita da parte tua tramite Terraform. I cluster e i job di Managed Service for Apache Spark funzioneranno correttamente senza alcun intervento manuale per quanto riguarda questa API interna.

Come faccio a risolvere gli errori 403 Autorizzazione negata in Terraform?

403 Permission Denied errori in genere indicano che il account di servizio o le credenziali utente utilizzate da Terraform non dispongono delle autorizzazioni IAM necessarie per eseguire un'azione richiesta su una Google Cloud risorsa specifica. Per risolvere il problema:

  1. Identifica la risorsa e il metodo API interessati: il messaggio di errore in genere specifica il tipo di risorsa e la chiamata API non riuscita.

  2. Controlla i ruoli IAM: verifica che all'entità (account di servizio o utente) siano assegnati i ruoli IAM corretti al livello appropriato (progetto, cartella, organizzazione o risorsa). Utilizza lo strumento per la risoluzione dei problemi IAM in the Google Cloud console.

  3. Verifica l'abilitazione del servizio: conferma che il servizio Google Cloud API richiesto sia abilitato per il tuo progetto (ad esempio, utilizzando gcloud services enable o google_project_service).

  4. Rivedi le policy dell'organizzazione: verifica se sono presenti policy dell'organizzazione che limitano l'azione.

Gli errori di quota si verificano quando il progetto tenta di utilizzare più risorse o di effettuare più richieste API di quelle consentite dalle quote attuali. Per risolvere questo problema:

  1. Identifica la quota specifica: il messaggio di errore in genere specifica l'API e il limite di quota superato.

  2. Controlla le quote attuali: visita la pagina Quote nella Google Cloud console per visualizzare l'utilizzo e i limiti attuali.

  3. Richiedi un aumento della quota: se hai bisogno di più capacità, puoi richiedere un aumento della quota direttamente dalla pagina Quote.

  4. Valuta la possibilità di utilizzare user_project_override: per alcune risorse, se il progetto delle credenziali è diverso dal progetto della risorsa, le richieste API potrebbero essere fatturate in base alla quota del progetto delle credenziali. L'utilizzo di user_project_override (vedi Riferimento del provider) a volte può risolvere il problema forzando la fatturazione della quota al progetto della risorsa.

Che cos'è un account di servizio predefinito gestito dall'utente e come posso gestirne le autorizzazioni con Terraform?

Alcuni Google Cloud servizi creano automaticamente service account gestiti dall'utente (spesso chiamati service account predefiniti) quando viene creato un progetto o viene abilitato un servizio. In genere hanno autorizzazioni ampie. Sebbene siano gestiti dall'utente, vengono creati da Google. Puoi gestirne le autorizzazioni utilizzando le risorse IAM come google_project_iam_member per modificarne i ruoli. Se vuoi intraprendere azioni sui service account predefiniti stessi, ad esempio rimuovere i ruoli predefiniti con privilegi elevati o eliminare completamente gli account, puoi utilizzare la risorsa google_project_default_service_accounts. Google fornisce anche indicazioni sui tipi di service account di servizio predefiniti.

Che cos'è un account di servizio gestito da Google e come faccio a farvi riferimento nelle configurazioni Terraform?

I service account gestiti da Google vengono creati e gestiti completamente da Google per determinati servizi. Esistono al di fuori dei progetti utente e non sono configurabili direttamente dagli utenti nello stesso modo dei service account gestiti dall'utente. Tuttavia, potrebbe essere necessario concedere loro le autorizzazioni IAM per interagire con le tue risorse. Puoi fare riferimento all'indirizzo email di un service account gestito da Google per un servizio specifico utilizzando l'origine dati o la risorsa google_project_service_identity in Terraform per applicare poi le policy IAM. Ad esempio, questa operazione è comune per servizi come Cloud Build o Managed Service for Apache Airflow.

Cosa succede quando eseguo terraform destroy su una risorsa con disable_on_destroy configurato?

L'argomento disable_on_destroy in google_project_service e in alcune altre risorse (ad esempio, google_storage_bucket) controlla se la risorsa cloud sottostante viene disabilitata o eliminata quando la risorsa Terraform viene eliminata.

  • Se disable_on_destroy è true (o non impostato, poiché spesso è il valore predefinito), terraform destroy tenterà di disabilitare (per le API) o eliminare (per i bucket) la risorsa cloud corrispondente.

  • Se disable_on_destroy è false, terraform destroy rimuoverà la risorsa dallo stato di Terraform, ma lascerà intatta la risorsa cloud effettiva (ad esempio, l'API abilitata o il bucket) nel tuo Google Cloud progetto. Questa opzione è spesso preferita per i servizi critici che non devono essere disabilitati o eliminati accidentalmente.