arrow_back

Infrastructure as Code with Terraform

Partecipa Accedi

Infrastructure as Code with Terraform

1 ora 1 credito

Questo lab è stato sviluppato in collaborazione con il nostro partner Hashicorp. Le tue informazioni personali potrebbero essere condivise con Hashicorp, lo sponsor del lab, se hai acconsentito a ricevere aggiornamenti, annunci e offerte di prodotti nel profilo del tuo account.

GSP750

Laboratori autogestiti Google Cloud

Panoramica

Terraform è l'offerta Infrastructure as Code di HashiCorp. È uno strumento per creare, modificare e gestire l'infrastruttura in maniera sicura e ripetibile. I team Operators e Infrastructure possono utilizzare Terraform per gestire gli ambienti con il linguaggio di configurazione HashiCorp Configuration Language (HCL) per deployment automatizzati e leggibili.

Infrastructure as Code è il processo con cui l'infrastruttura viene gestita in uno o più file anziché tramite la configurazione manuale delle risorse in un'interfaccia utente. In questo caso, una risorsa è un elemento dell'infrastruttura in un dato ambiente, come una macchina virtuale, un gruppo di sicurezza, un'interfaccia di rete e così via. Ad alto livello, Terraform consente agli operatori di creare file in linguaggio HCL contenenti le definizioni delle risorse desiderate praticamente su qualsiasi provider (AWS, Google Cloud, GitHub, Docker, ecc.) e automatizza la creazione di tali risorse quando viene utilizzato il comando apply.

Un flusso di lavoro semplice per il deployment segue da vicino i passaggi riportati di seguito:

  • Definisci l'ambito - Conferma le risorse da creare per un dato progetto.

  • Crea - Crea il file di configurazione in HCL in base ai parametri nell'ambito.

  • Inizializza - Esegui terraform init nella directory del progetto contenente i file di configurazione. Vengono scaricati i plug-in dei provider corretti per il progetto.

  • Pianifica e applica - Esegui terraform plan per verificare il processo di creazione, seguito da terraform apply per creare le risorse reali e il file di stato che confronta le modifiche future nei file di configurazione con l'effettiva situazione dell'ambiente di deployment.

Obiettivi

In questo lab imparerai a eseguire le attività seguenti:

  • Creare, modificare ed eliminare l'infrastruttura con Terraform

  • Creare dipendenze delle risorse con Terraform

  • Eseguire il provisioning dell'infrastruttura con Terraform

Configurazione e requisiti

Prima di fare clic sul pulsante Avvia lab

Leggi le seguenti istruzioni. I lab sono a tempo e non possono essere messi in pausa. Il timer si avvia quando fai clic su Avvia lab e ti mostra per quanto tempo avrai a disposizione le risorse Google Cloud.

Con questo lab pratico Qwiklabs avrai la possibilità di completare le attività in prima persona, in un ambiente cloud reale e non di simulazione o demo. Riceverai delle nuove credenziali temporanee che potrai utilizzare per accedere a Google Cloud per la durata del lab.

Per completare il lab, avrai bisogno di:

  • Accesso a un browser Internet standard (Chrome è il browser consigliato).
  • Nota: utilizza una finestra di navigazione in incognito o privata per eseguire questo lab. Ciò previene qualsiasi conflitto tra il tuo account personale e l'account Studente, che potrebbe causare costi aggiuntivi sostenuti per il tuo account personale.

  • Tempo a disposizione per completare il lab.
  • Nota: se disponi già del tuo account o progetto Google Cloud personale, non utilizzarlo per questo lab per evitare costi aggiuntivi sul tuo account.

Come avviare il lab e accedere alla console Google Cloud

  1. Fai clic sul pulsante Avvia lab. Se devi effettuare il pagamento per il lab, si apre una finestra popup per permetterti di selezionare il metodo di pagamento. A sinistra, trovi il riquadro Dettagli lab con le seguenti informazioni:

    • Pulsante Apri console Google
    • Tempo rimanente
    • Credenziali temporanee da utilizzare per il lab
    • Altre informazioni per seguire questo lab, se necessario
  2. Fai clic su Apri console Google. Il lab avvia le risorse e apre un'altra scheda con la pagina di accesso.

    Suggerimento: disponi le schede in finestre separate posizionate fianco a fianco.

    Note: se visualizzi la finestra di dialogo Scegli un account, fai clic su Utilizza un altro account.
  3. Se necessario, copia il Nome utente dal riquadro Dettagli lab e incollalo nella finestra di dialogo di accesso. Fai clic su Avanti.

  4. Copia la Password dal riquadro Dettagli lab e incollala nella finestra di dialogo di benvenuto. Fai clic su Avanti.

    Importante: devi utilizzare le credenziali presenti nel riquadro di sinistra. Non utilizzare le tue credenziali Google Cloud Skills Boost. Nota: utilizzare il tuo account Google Cloud per questo lab potrebbe comportare addebiti aggiuntivi.
  5. Fai clic nelle pagine successive:

    • Accetta i termini e le condizioni.
    • Non inserire opzioni di recupero o l'autenticazione a due fattori, perché si tratta di un account temporaneo.
    • Non registrarti per le prove gratuite.

Dopo qualche istante, la console Google Cloud si apre in questa scheda.

Nota: puoi visualizzare il menu con un elenco di prodotti e servizi Google Cloud facendo clic sul menu di navigazione in alto a sinistra. Icona menu di navigazione

Attiva Cloud Shell

Cloud Shell è una macchina virtuale in cui sono caricati strumenti per sviluppatori. Offre una home directory permanente da 5 GB e viene eseguita su Google Cloud. Cloud Shell fornisce l'accesso da riga di comando alle risorse Google Cloud.

  1. Fai clic su Attiva Cloud Shell Attiva l'icona di Cloud Shell nella parte superiore della console di Google Cloud.

  2. Fai clic su Continua.

  3. Occorrono alcuni istanti per eseguire il provisioning e connettersi all'ambiente. Quando sei connesso, sei già autenticato e il progetto è impostato sul tuo PROJECT_ID. L'output contiene una riga che dichiara il PROJECT_ID per questa sessione:

    Your Cloud Platform project in this session is set to YOUR_PROJECT_ID

    gcloud è lo strumento a riga di comando di Google Cloud. È preinstallato su Cloud Shell e supporta il completamento tramite tasto Tab.

  4. (Opzionale) Puoi visualizzare il nome dell'account attivo con questo comando:

  5. gcloud auth list

    Output

    ACTIVE: * ACCOUNT: student-01-xxxxxxxxxxxx@qwiklabs.net To set the active account, run: $ gcloud config set account `ACCOUNT`
  6. (Opzionale) Puoi elencare l'ID progetto con questo comando:

gcloud config list project

Output

[core] project =

output di esempio

[core] project = qwiklabs-gcp-44776a13dea667a6

Crea l'infrastruttura

Terraform è preinstallato in Cloud Shell. Con Terraform già installato, puoi passare direttamente alla creazione dell'infrastruttura.

Inizia creando la tua configurazione di esempio in un file denominato main.tf. Terraform riconosce i file con estensione .tf o .tf.json come file di configurazione e li carica all'esecuzione.

  1. Crea il file main.tf:

touch main.tf
  1. Fai clic sul pulsante Apri editor sulla barra degli strumenti di Cloud Shell (puoi passare da Cloud Shell all'editor di codice o viceversa facendo clic sulle icone Apri editor e Apri terminale, a seconda del caso, oppure facendo clic su Apri in una nuova finestra per lasciare aperto l'editor in una scheda separata).

  2. Nell'editor, aggiungi il contenuto seguente al file main.tf. Assicurati di sostituire <PROJECT_ID> con l'ID progetto del lab:

terraform { required_providers { google = { source = "hashicorp/google" } } } provider "google" { version = "3.5.0" project = "<PROJECT_ID>" region = "us-central1" zone = "us-central1-c" } resource "google_compute_network" "vpc_network" { name = "terraform-network" } Suggerimento: per utilizzare questo snippet con Terraform 0.12, rimuovi il blocco terraform {}.

Il blocco Terraform

Il blocco terraform {} è richiesto per indicare a Terraform quale provider scaricare dal Terraform Registry. Nella configurazione riportata sopra, l'origine del provider google è definita come hashicorp/google, un'abbreviazione di registry.terraform.io/hashicorp/google.

Puoi anche assegnare una versione a ogni provider definito nel blocco required_providers. L'argomento version è facoltativo ma consigliato. Ha lo scopo di vincolare il provider a una versione specifica o a un intervallo di versioni per impedire il download di un nuovo provider che potrebbe contenere modifiche che provocano un errore. Se la versione non è specificata, Terraform scarica automaticamente il provider più recente durante l'inizializzazione.

Per saperne di più, consulta la documentazione sull'origine del provider.

Provider

Il blocco provider viene utilizzato per configurare il provider denominato, in questo caso google. Un provider è responsabile della creazione e gestione delle risorse. Se una configurazione Terraform gestisce risorse di diversi provider, possono esistere più blocchi provider.

Inizializzazione

Il primo comando da eseguire per una nuova configurazione, o dopo avere eseguito il check-out di una configurazione esistente dal controllo della versione, è terraform init, che inizializza varie impostazioni locali e dati che verranno utilizzati dai comandi successivi.

  1. Inizializza la tua nuova configurazione Terraform eseguendo il comando terraform init nella directory in cui si trova il file main.tf:

terraform init

Crea le risorse

  1. Ora applica la tua configurazione eseguendo il comando terraform apply:

terraform apply

Nell'output è presente un segno + accanto alla risorsa "google_compute_network" "vpc_network", a indicare che verrà creata da Terraform. Al di sotto sono visualizzati gli attributi che verranno impostati. Quando il valore visualizzato è (known after apply), significa che il valore non sarà noto fino a dopo la creazione della risorsa.

Se il piano è stato creato correttamente, ora Terraform interrompe le operazioni e attende l'approvazione prima di procedere. Se il piano presenta elementi che appaiono non corretti o pericolosi, è possibile interrompere l'operazione in sicurezza a questo punto, prima di qualsiasi modifica all'infrastruttura.

Se il comando terraform apply non riesce e restituisce un errore, leggi il messaggio e correggi l'errore.

  1. Qui il piano risulta accettabile, quindi digita yes alla richiesta di conferma per procedere.

L'esecuzione del piano richiede qualche minuto perché Terraform attende che la rete venga creata correttamente:

# ... Enter a value: yes google_compute_network.vpc_network: Creating... google_compute_network.vpc_network: Still creating... [10s elapsed] google_compute_network.vpc_network: Still creating... [20s elapsed] google_compute_network.vpc_network: Still creating... [30s elapsed] google_compute_network.vpc_network: Still creating... [40s elapsed] google_compute_network.vpc_network: Still creating... [50s elapsed] google_compute_network.vpc_network: Creation complete after 58s [id=terraform-network] Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

Alla fine di questa operazione, Terraform ha terminato. Puoi passare a Cloud Console per vedere la rete di cui hai eseguito il provisioning.

  1. Nel menu di navigazione della console, passa a Rete VPC. Vedrai che è stato eseguito il provisioning di terraform-network.

terraform-network.png

  1. In Cloud Shell, esegui il comando terraform show per ispezionare lo stato attuale.

terraform show

Questi valori possono essere utilizzati come riferimento per configurare ulteriori risorse o output, che saranno esaminati successivamente in questo lab.

Fai clic su Controlla i miei progressi per verificare l'obiettivo. Crea risorse in terraform

Modifica l'infrastruttura

Nella sezione precedente hai creato l'infrastruttura base con Terraform: una rete VPC. In questa sezione modificherai la configurazione e osserverai come Terraform gestisce il cambiamento.

L'infrastruttura è in continua evoluzione e Terraform è stato creato per aiutare a gestire e mettere in atto il cambiamento. Quando cambi le configurazioni, Terraform crea un piano di esecuzione che modifica solo gli elementi necessari per raggiungere lo stato desiderato.

L'uso di Terraform per cambiare l'infrastruttura ti consente di applicare il controllo della versione non solo alle tue configurazioni, ma anche allo stato, per poter vedere come l'infrastruttura evolve nel tempo.

Aggiungi risorse

Puoi aggiungere nuove risorse inserendole nella configurazione Terraform ed eseguendo il provisioning mediante terraform apply.

  1. Nell'editor, aggiungi un'istanza Compute come risorsa a main.tf:

resource "google_compute_instance" "vm_instance" { name = "terraform-instance" machine_type = "f1-micro" boot_disk { initialize_params { image = "debian-cloud/debian-11" } } network_interface { network = google_compute_network.vpc_network.name access_config { } } }

Questa risorsa include alcuni ulteriori argomenti. Nome e tipo di macchina sono stringhe semplici, ma boot_disk e network_interface sono blocchi più complessi. Per conoscere tutte le opzioni disponibili, consulta la documentazione.

Per questo esempio, l'istanza Compute utilizzerà un sistema operativo Debian e sarà connessa alla rete VPC che hai creato in precedenza. Nota il modo in cui la configurazione fa riferimento alla proprietà name della rete con google_compute_network.vpc_network.name: google_compute_network.vpc_network è l'ID, corrispondente ai valori nel blocco che definisce la rete, mentre name è una proprietà di questa risorsa.

La presenza del blocco access_config, anche senza argomenti, assicura che l'istanza sarà accessibile tramite Internet.

  1. Ora esegui terraform apply per creare l'istanza Compute:

terraform apply

Anche in questo caso, rispondi yes alla richiesta di conferma.

Questa modifica è abbastanza diretta: hai aggiunto una risorsa "google_compute_instance" denominata "vm_instance" alla tua configurazione e Terraform ha creato la risorsa in Google Cloud.

Modifica le risorse

Oltre a creare risorse, Terraform può anche modificarle.

  1. Aggiungi un argomento tags alla tua risorsa "vm_instance" in modo che risulti come la seguente:

resource "google_compute_instance" "vm_instance" { name = "terraform-instance" machine_type = "f1-micro" tags = ["web", "dev"] # ... }
  1. Esegui di nuovo terraform apply per aggiornare l'istanza.

terraform apply
  1. Il prefisso ~ significa che Terraform aggiornerà la risorsa esistente. Puoi applicare la modifica adesso rispondendo yes, Terraform aggiungerà i tag alla tua istanza.

Fai clic su Controlla i miei progressi per verificare l'obiettivo. Modifica l'infrastruttura

Modifiche distruttive

Una modifica distruttiva richiede che il provider sostituisca la risorsa esistente anziché aggiornarla. In genere questo avviene perché il cloud provider non supporta l'aggiornamento della risorsa nel modo descritto dalla tua configurazione.

La modifica dell'immagine disco della tua istanza è un esempio di modifica distruttiva.

  1. Modifica il blocco boot_disk all'interno della risorsa vm_instance nel file di configurazione come segue:

boot_disk { initialize_params { image = "cos-cloud/cos-stable" } }
  1. Ora esegui di nuovo terraform apply per vedere come Terraform applica questa modifica alle risorse esistenti:

terraform apply

Il prefisso -/+ significa che Terraform eliminerà e creerà di nuovo la risorsa, anziché aggiornare la risorsa esistente. Alcuni attributi (indicati dal prefisso ~) possono essere aggiornati nella risorsa esistente, tuttavia la modifica dell'immagine disco di avvio per un'istanza richiede la creazione di una nuova istanza. Terraform e il provider Google Cloud gestiscono questi dettagli per te e il piano di esecuzione chiarisce le operazioni eseguite da Terraform.

Inoltre, il piano di esecuzione mostra che la modifica dell'immagine disco è l'elemento che ha richiesto la sostituzione dell'istanza. Utilizzando queste informazioni, puoi regolare le modifiche e, dove possibile, evitare di eliminare/creare aggiornamenti se non sono accettabili in determinate situazioni.

  1. Di nuovo, Terraform richiede di approvare il piano di esecuzione prima di continuare. Rispondi yes per eseguire i passaggi pianificati.

Come indicato dal piano di esecuzione, Terraform ha innanzitutto eliminato l'istanza esistente, per poi crearne una nuova in sostituzione. Puoi utilizzare di nuovo terraform show per osservare i nuovi valori associati a questa istanza.

Elimina l'infrastruttura

Ora hai visto come creare e modificare l'infrastruttura. Prima di procedere alla creazione di risorse multiple e alla visualizzazione delle dipendenze delle risorse, vedrai come eliminare completamente la tua infrastruttura gestita da Terraform.

L'eliminazione dell'infrastruttura è un evento raro negli ambienti di produzione. Tuttavia, se utilizzi Terraform per preparare ambienti multipli, di sviluppo, di test e temporanei, l'eliminazione risulta spesso un'azione utile.

Puoi eliminare le risorse utilizzando il comando terraform destroy, simile a terraform apply ma con un comportamento che equivale alla rimozione di tutte le risorse dalla configurazione.

  1. Prova il comando terraform destroy. Rispondi yes per eseguire questo piano ed eliminare l'infrastruttura:

terraform destroy

Il prefisso - indica che l'istanza e la rete verranno eliminate. Come nel caso di apply, Terraform mostra il piano di esecuzione e attende l'approvazione prima di apportare modifiche.

Come nel caso di terraform apply, Terraform determina l'ordine in cui eliminare gli elementi. Google Cloud non consente di eliminare una rete VPC se al suo interno sono ancora presenti risorse, di conseguenza Terraform attende l'eliminazione dell'istanza prima di eliminare la rete. Durante l'esecuzione delle operazioni, Terraform crea un grafico delle dipendenze per determinare l'ordine delle operazioni corretto. Nei casi più complicati, che coinvolgono risorse multiple, Terraform esegue le operazioni in parallelo se è possibile farlo in sicurezza.

Fai clic su Controlla i miei progressi per verificare l'obiettivo. Modifiche distruttive

Crea dipendenze delle risorse

In questa sezione scoprirai di più sulle dipendenze delle risorse e sull'utilizzo dei parametri delle risorse per condividere le informazioni su una risorsa con le altre.

L'infrastruttura reale presenta un insieme diversificato di risorse e tipi di risorse. Le configurazioni Terraform possono contenere più risorse e più tipi di risorsa, che a loro volta possono anche comprendere più provider.

In questa sezione vedrai un esempio base di come configurare risorse multiple e utilizzare gli attributi di una risorsa per configurarne altre.

  1. Ricrea la rete e l'istanza. Quando rispondi yes alla richiesta, le risorse vengono create.

terraform apply

Assegna un indirizzo IP statico

  1. Ora aggiungi alla tua configurazione l'assegnazione di un IP statico all'istanza VM in main.tf.

resource "google_compute_address" "vm_static_ip" { name = "terraform-static-ip" }

Avrai notato la somiglianza con l'esempio precedente, relativo all'aggiunta di un'istanza VM come risorsa, con la differenza che questa volta stai creando un tipo di risorsa "google_compute_address". Questo tipo di risorsa alloca un indirizzo IP riservato al tuo progetto.

  1. Quindi, esegui terraform plan.

terraform plan

Con terraform plan puoi vedere quali elementi verranno creati:

$ terraform plan Refreshing Terraform state in-memory prior to plan... The refreshed state will be used to calculate this plan, but will not be persisted to local or remote state storage. google_compute_network.vpc_network: Refreshing state... [id=terraform-network] google_compute_instance.vm_instance: Refreshing state... [id=terraform-instance] ------------------------------------------------------------------------ An execution plan has been generated and is shown below. Resource actions are indicated with the following symbols: + create Terraform will perform the following actions: # google_compute_address.vm_static_ip will be created + resource "google_compute_address" "vm_static_ip" { + address = (known after apply) + address_type = "EXTERNAL" + creation_timestamp = (known after apply) + id = (known after apply) + name = "terraform-static-ip" + network_tier = (known after apply) + project = (known after apply) + region = (known after apply) + self_link = (known after apply) + subnetwork = (known after apply) + users = (known after apply) } Plan: 1 to add, 0 to change, 0 to destroy. ------------------------------------------------------------------------ Note: You didn't specify an "-out" parameter to save this plan, so Terraform can't guarantee that exactly these actions will be performed if "terraform apply" is subsequently run.

A differenza di terraform apply, il comando plan mostra solo gli elementi che verrebbero modificati, senza mai applicare le modifiche direttamente. Nota che l'unica modifica apportata finora è l'aggiunta di un IP statico. Il prossimo passo è associare l'indirizzo IP all'istanza.

  1. Aggiorna la configurazione network_interface per l'istanza in questo modo:

network_interface { network = google_compute_network.vpc_network.self_link access_config { nat_ip = google_compute_address.vm_static_ip.address } }

Il blocco access_config prevede vari argomenti facoltativi, in questo caso imposterai nat_ip con l'indirizzo IP statico. Quando Terraform legge questa configurazione, procede in questo modo:

  • Verifica che la risorsa vm_static_ip venga creata prima di vm_instance

  • Salva le proprietà di vm_static_ip nello stato

  • Imposta nat_ip con il valore della proprietà vm_static_ip.address

  1. Esegui di nuovo terraform plan, ma questa volta salvando il piano:

terraform plan -out static_ip

Salvando il piano in questo modo potrai applicare esattamente lo stesso piano in futuro. Se provi ad applicare il file creato dal piano, Terraform controlla innanzitutto che verrà apportato lo stesso esatto insieme di modifiche prima di procedere all'applicazione.

In questo caso, puoi vedere che Terraform creerà una nuova risorsa google_compute_address e aggiornerà la VM esistente perché la utilizzi.

  1. Esegui terraform apply "static_ip" per vedere come Terraform pianifica l'applicazione di questa modifica:

terraform apply "static_ip"

Come mostrato sopra, Terraform ha creato l'IP statico prima di modificare l'istanza VM. Grazie all'espressione di interpolazione che passa l'indirizzo IP alla configurazione dell'interfaccia di rete dell'istanza, Terraform è in grado di dedurre una dipendenza e sa di dover creare l'indirizzo IP statico prima di aggiornare l'istanza.

Fai clic su Controlla i miei progressi per verificare l'obiettivo. Crea dipendenze delle risorse

Dipendenze implicite ed esplicite

Esaminando gli attributi delle risorse utilizzate nelle espressioni di interpolazione, Terraform è in grado di dedurre automaticamente quando una risorsa è dipendente da un'altra. Nell'esempio precedente, il riferimento a google_compute_address.vm_static_ip.address crea una dipendenza implicita dalla risorsa google_compute_address denominata vm_static_ip.

Terraform utilizza queste informazioni sulle dipendenze per determinare l'ordine corretto in cui creare e aggiornare le diverse risorse. Nell'esempio precedente, Terraform sa che la risorsa vm_static_ip deve essere creata prima di aggiornare la risorsa vm_instance perché la utilizzi.

Le dipendenze implicite tramite espressioni di interpolazione sono il mezzo principale con cui rendere note a Terraform queste relazioni ed è bene utilizzarle in tutti i casi in cui è possibile.

A volte, alcune dipendenze tra le risorse non sono visibili a Terraform. Puoi aggiungere a qualsiasi risorsa l'argomento depends_on, che accetta un elenco di risorse per cui creare dipendenze esplicite.

Ad esempio, potresti voler eseguire sulla tua istanza un'applicazione che prevede di utilizzare uno specifico bucket Cloud Storage, ma questa dipendenza è configurata all'interno del codice dell'applicazione e quindi non è visibile a Terraform. In tal caso, puoi utilizzare depends_on per dichiarare esplicitamente la dipendenza.

  1. Aggiungi un bucket Cloud Storage e un'istanza con una dipendenza esplicita dal bucket aggiungendo quanto segue a main.tf:

# New resource for the storage bucket our application will use. resource "google_storage_bucket" "example_bucket" { name = "<UNIQUE-BUCKET-NAME>" location = "US" website { main_page_suffix = "index.html" not_found_page = "404.html" } } # Create a new instance that uses the bucket resource "google_compute_instance" "another_instance" { # Tells Terraform that this VM instance must be created only after the # storage bucket has been created. depends_on = [google_storage_bucket.example_bucket] name = "terraform-instance-2" machine_type = "f1-micro" boot_disk { initialize_params { image = "cos-cloud/cos-stable" } } network_interface { network = google_compute_network.vpc_network.self_link access_config { } } } I bucket di archiviazione devono essere univoci a livello globale. Per questo motivo, dovrai sostituire UNIQUE-BUCKET-NAME con il nome univoco e valido di un bucket. In genere, un buon metodo per creare un nome di bucket univoco consiste nell'utilizzare il tuo nome e la data.

Potresti chiederti dove inserire queste risorse nella tua configurazione. L'ordine con cui sono definite le risorse in un file di configurazione Terraform non ha effetti sull'ordine con cui Terraform applica le modifiche. Organizza i file di configurazione nel modo che risulta più logico per te e il tuo team.

  1. Ora esegui terraform plan e terraform apply per osservare le modifiche in azione:

terraform plan terraform apply
  1. Prima di continuare, rimuovi queste nuove risorse dalla tua configurazione ed esegui ancora una volta terraform apply per eliminarle. Non userai più né il bucket né la seconda istanza nella Guida introduttiva.

Esegui il provisioning dell'infrastruttura

L'istanza Compute che hai avviato a questo punto si basa sull'immagine Google specificata, ma non ha ulteriore software installato, né una configurazione applicata.

Google Cloud consente ai clienti di gestire le proprie immagini del sistema operativo personalizzate. Questo può essere un mezzo eccellente per assicurare che le istanze di cui esegui il provisioning con Terraform siano preconfigurate in base alle tue esigenze. Packer è lo strumento perfetto allo scopo e include un builder per Google Cloud.

Terraform usa i provisioner per caricare file, eseguire script shell o installare e attivare altro software come gli strumenti di gestione della configurazione.

Definisci un provisioner

  1. Per definire un provisioner, modifica il blocco della risorsa che definisce la prima vm_instance nella tua configurazione in base all'esempio seguente:

resource "google_compute_instance" "vm_instance" { name = "terraform-instance" machine_type = "f1-micro" tags = ["web", "dev"] provisioner "local-exec" { command = "echo ${google_compute_instance.vm_instance.name}: ${google_compute_instance.vm_instance.network_interface[0].access_config[0].nat_ip} >> ip_address.txt" } # ... }

Viene così aggiunto un blocco provisioner all'interno del blocco resource. È possibile aggiungere più blocchi provisioner per definire più passaggi di provisioning. Terraform supporta numerosi provisioner, ma per questo esempio utilizzerai local-exec.

Il provisioner local-exec esegue un comando localmente sulla macchina che esegue Terraform, non sull'istanza VM. Utilizzi questo provisioner invece di altri in modo da non doverti preoccupare di specificare le informazioni di connessione in questo momento.

Questo mostra inoltre un esempio più complesso di interpolazione di stringhe rispetto a quanto hai osservato finora. Ogni istanza VM può avere interfacce di rete multiple, fai quindi riferimento alla prima con network_interface[0] e conta partendo da 0, come avviene nella maggior parte dei linguaggi di programmazione. Ogni interfaccia di rete può a sua volta avere più blocchi access_config, per cui anche in questo caso specificherai il primo.

  1. Esegui terraform apply. A questo punto, inizialmente l'output può destare perplessità.

terraform apply

Terraform non ha trovato niente da fare e, se controlli, vedrai che non è presente alcun file ip_address.txt sulla macchina locale.

Terraform tratta i provisioner in modo diverso rispetto agli altri argomenti. I provisioner vengono eseguiti solo quando viene creata una risorsa, ma l'aggiunta di un provisioner non forza l'eliminazione e la nuova creazione della risorsa.

  1. Usa terraform taint per indicare a Terraform di ricreare l'istanza:

terraform taint google_compute_instance.vm_instance

Una risorsa incompatibile verrà eliminata e ricreata alla successiva esecuzione di apply.

  1. Ora esegui terraform apply:

terraform apply
  1. Verifica che tutto abbia funzionato osservando i contenuti del file ip_address.txt.

Contiene l'indirizzo IP, proprio come hai richiesto.

Provisioner in errore e risorse incompatibili

Se una risorsa viene creata correttamente ma non supera un passaggio di provisioning, Terraform genera un errore e contrassegna la risorsa come incompatibile. Una risorsa incompatibile continua a esistere, ma deve essere considerata non sicura da utilizzare, dal momento che il provisioning non è riuscito.

Quando generi il successivo piano di esecuzione, Terraform rimuove eventuali risorse incompatibili e ne crea di nuove, provando di nuovo a eseguirne il provisioning dopo la creazione.

Elimina i provisioner

È anche possibile definire provisioner eseguiti solo durante un'operazione di eliminazione, utili per operazioni di pulizia del sistema, estrazione di dati e così via.

Per molte risorse, se possibile è consigliato utilizzare i meccanismi di pulizia integrati (ad esempio gli script di inizializzazione), ma in caso di necessità è possibile servirsi dei provisioner.

Questo lab non fornisce esempi di provisioner per l'eliminazione. Se devi utilizzare provisioner per l'eliminazione, consulta la documentazione dei provisioner.

Complimenti!

In questo lab hai imparato come creare, modificare ed eliminare l'infrastruttura con Terraform. Hai quindi creato le dipendenze delle risorse ed eseguito il provisioning dell'infrastruttura base con i file di configurazione Terraform.

Completa la Quest

Questo self-paced lab fa parte della Quest di Qwiklabs Automating Infrastructure on Google Cloud with Terraform. Una Quest è una serie di lab collegati tra loro che formano un percorso di apprendimento. Il completamento di una Quest ti permette di ottenere un badge come riconoscimento dell'obiettivo raggiunto. Puoi rendere pubblici i tuoi badge inserendone i link nel tuo CV online o sui social media. Iscriviti a questa Quest e ottieni subito un riconoscimento per aver completato questo lab. Scopri le altre Quest di Qwiklabs disponibili.

Segui il prossimo lab

Continua la Quest con il lab successivo, Interact with Terraform Modules.

Automating_Infrastructure_with_Terraform_Skill_badge_WBG.png

Passaggi successivi/Scopri di più

Dai uno sguardo ai link seguenti per esercitarti ulteriormente con Terraform:

Formazione e certificazione Google Cloud

… per utilizzare al meglio le tecnologie Google Cloud. I nostri corsi ti consentono di sviluppare competenze tecniche e best practice per aiutarti a metterti subito al passo e avanzare nel tuo percorso di apprendimento. Offriamo vari livelli di formazione, dal livello base a quello avanzato, con opzioni di corsi on demand, dal vivo e virtuali, in modo da poter scegliere il più adatto in base ai tuoi impegni. Le certificazioni ti permettono di confermare e dimostrare le tue abilità e competenze relative alle tecnologie Google Cloud.

Ultimo aggiornamento del manuale: 28 agosto 2021

Ultimo test del lab: 23 febbraio 2021

Copyright 2020 Google LLC Tutti i diritti riservati. Google e il logo Google sono marchi di Google LLC. Tutti gli altri nomi di società e prodotti sono marchi delle rispettive società a cui sono associati.