Domande frequenti su Terraform su Google Cloud

Questa pagina fornisce risposte alle domande comuni riscontrate durante l'utilizzo di Terraform per gestire le risorse su Google Cloud, in particolare per quanto riguarda le interazioni API e le operazioni preliminari.

Introduzione a Terraform

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

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

Infrastructure as Code (IaC) è la pratica di gestione e 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 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 l'interfaccia a riga di comando Terraform 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) e poi 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 e comprensibile sia per gli esseri umani che per le 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 consultando la documentazione ufficiale di HashiCorp Terraform, che fornisce guide ed esempi completi.

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

Puoi trovare numerosi esempi di configurazioni Terraform per Google Cloud:

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

  • Google Cloud Esempi di Terraform: Google fornisce una serie di esempi di Terraform che mostrano come eseguire il deployment e gestire 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 ho a che fare con molte risorse?

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

  • Moduli:incapsulano e riutilizzano pattern di infrastruttura comuni.

  • Spazi di lavoro: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.

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

  • Ambienti dedicati:esegui il deployment negli ambienti di sviluppo o 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 le APIGoogle Cloud , incluse quelle pubbliche e private.

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

No. Le API interne o private Google Cloud fanno parte dell'Service Infrastructure gestita di Google e non sono esposte per la gestione, l'attivazione o l'importazione dirette da parte dei clienti utilizzando Terraform. Queste API vengono gestite automaticamente da Google Cloud. Se provi a gestirli direttamente con Terraform, si verificheranno errori.

Per una spiegazione completa, consulta la guida Understanding Google Cloud APIs and Terraform.

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

  • Abilitazione di 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.

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

Per maggiori dettagli, consulta la Guida all'utilizzo delle API Google Cloud e di Terraform.

Cosa succede se non gestisco o importo esplicitamente dataproc-control.googleapis.com? Influenzerà la mia capacità di utilizzare Dataproc?

No, non influirà sulla tua capacità di utilizzare Dataproc. dataproc-control.googleapis.com è un'API interna utilizzata da Dataproc per il proprio controllo operativo. La sua funzionalità è gestita automaticamente da Google Cloude non richiede l'attivazione, l'importazione o la gestione esplicita da parte tua utilizzando Terraform. I tuoi cluster e job Dataproc funzioneranno correttamente senza alcun intervento manuale in merito a questa API interna.

Come faccio a risolvere gli errori 403 Permission Denied in Terraform?

Gli errori 403 Permission Denied 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 risorsa Google Cloud specifica. Per risolvere il problema:

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

  2. Controlla i ruoli IAM:verifica che al principal (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 nella console Google Cloud .

  3. Verifica l'abilitazione del servizio:conferma che il servizio API Google Cloud 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 alcune policy dell'organizzazione limitano l'azione.

Gli errori di quota si verificano quando il tuo progetto tenta di utilizzare più risorse o effettuare più richieste API di quanto consentito 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 console Google Cloud 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. Considera user_project_override: per alcune risorse, se il progetto delle credenziali è diverso dal progetto delle risorse, le richieste API potrebbero essere fatturate in base alla quota del progetto delle credenziali. L'utilizzo di user_project_override (vedi Riferimento del fornitore) 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 servizi Google Cloud creano automaticamente service account gestiti dall'utente (spesso chiamati service account predefiniti) quando viene creato un progetto o viene abilitato un servizio. In genere, questi hanno autorizzazioni ampie. Sebbene siano gestiti dall'utente, vengono creati da Google. Puoi gestire le autorizzazioni utilizzando risorse IAM come google_project_iam_member per modificare i ruoli. Se vuoi intervenire sugli account di servizio predefiniti, 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 account di servizio predefiniti.

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

Gli account di servizio gestiti da Google vengono creati e gestiti interamente da Google per determinati servizi. Esistono al di fuori dei progetti utente e non sono direttamente configurabili dagli utenti nello stesso modo in cui lo sono i service account gestiti dall'utente. Tuttavia, potresti dover concedere loro le autorizzazioni IAM per interagire con le tue risorse. Puoi fare riferimento all'indirizzo email di un account di servizio gestito da Google per un servizio specifico utilizzando l'origine dati o la risorsa google_project_service_identity in Terraform per poi applicare i criteri IAM. Ad esempio, questo è comune per servizi come Cloud Build o Cloud Composer.

Cosa succede quando terraform destroy una risorsa per cui è stato configurato disable_on_destroy?

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

  • Se disable_on_destroy è true (o non è impostato, come spesso accade per impostazione predefinita), terraform destroy tenterà di disattivare (per le API) o eliminare (per i bucket) la risorsa cloud corrispondente.

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