Panoramica
Terraform consente di creare, modificare e migliorare l'infrastruttura in modo sicuro e prevedibile. È uno strumento open source che codifica le API in file di configurazione dichiarativi che possono essere condivisi tra membri dello stesso team, trattati come codice, modificati, rivisti e sottoposti al controllo delle versioni.
In questo lab creerai una configurazione Terraform con un modulo per automatizzare il deployment dell'infrastruttura Google Cloud. In particolare, eseguirai il deployment di una rete in modalità automatica con una regola firewall e due istanze VM, come mostrato in questo diagramma:

Obiettivi
In questo lab imparerai a:
- Creare una configurazione per una rete in modalità automatica
- Creare una configurazione per una regola firewall
- Creare un modulo per le istanze VM
- Creare ed eseguire il deployment di una configurazione
- Verificare il deployment di una configurazione
Configurazione
Per ciascun lab, riceverai un nuovo progetto Google Cloud e un insieme di risorse per un periodo di tempo limitato senza alcun costo aggiuntivo.
-
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:
- Il pulsante Apri console Google Cloud
- Tempo rimanente
- Credenziali temporanee da utilizzare per il lab
- Altre informazioni per seguire questo lab, se necessario
-
Fai clic su Apri console Google Cloud (o fai clic con il tasto destro del mouse e seleziona Apri link in finestra di navigazione in incognito se utilizzi il browser Chrome).
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.
Nota: se visualizzi la finestra di dialogo Scegli un account, fai clic su Usa un altro account.
-
Se necessario, copia il Nome utente di seguito e incollalo nella finestra di dialogo di accesso.
{{{user_0.username | "Username"}}}
Puoi trovare il Nome utente anche nel riquadro Dettagli lab.
-
Fai clic su Avanti.
-
Copia la Password di seguito e incollala nella finestra di dialogo di benvenuto.
{{{user_0.password | "Password"}}}
Puoi trovare la Password anche nel riquadro Dettagli lab.
-
Fai clic su Avanti.
Importante: devi utilizzare le credenziali fornite dal lab. Non utilizzare le credenziali del tuo account Google Cloud.
Nota: utilizzare il tuo account Google Cloud per questo lab potrebbe comportare addebiti aggiuntivi.
-
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: per visualizzare un menu con un elenco di prodotti e servizi Google Cloud, fai clic sul menu di navigazione in alto a sinistra oppure digita il nome del servizio o del prodotto nel campo di ricerca.
Attività 1: configura Terraform e Cloud Shell
In questa attività configurerai il tuo ambiente Cloud Shell per l'utilizzo di Terraform.
Installa Terraform
Terraform è ora integrato in Cloud Shell. Verifica quale versione è installata.
- Nella console Google Cloud, fai clic su Attiva Cloud Shell (
).
- Se richiesto, fai clic su Continua.
- Per confermare che Terraform sia installato, esegui il comando seguente:
terraform --version
L'output dovrebbe essere simile al seguente:
Terraform v1.5.7
Nota: non preoccuparti se ricevi un avviso che ti informa che la versione di Terraform non è aggiornata, in quanto le istruzioni del lab andranno bene per Terraform v1.5.7 e versioni successive. I download dell'ultima versione di Terraform sono disponibili sul sito web di Terraform. Terraform viene distribuito come pacchetto binario per tutte le piattaforme e le architetture supportate. Cloud Shell utilizza Linux a 64 bit.
- Per creare una directory per la configurazione di Terraform, esegui il comando seguente:
mkdir tfinfra
- In Cloud Shell, fai clic su Apri editor (
).
Nota: se viene visualizzato il messaggio "Impossibile caricare l'editor di codice perché i cookie di terze parti sono disabilitati", fai clic su Apri in una nuova finestra. L'editor di codice si aprirà in una nuova scheda. Torna alla scheda originale, fai clic su Apri terminale e poi torna alla scheda dell'editor di codice. Durante questo lab dovrai tornare più volte al terminale Cloud Shell.
- Nel riquadro a sinistra dell'editor di codice, espandi la cartella tfinfra.
Inizializza Terraform
Terraform utilizza un'architettura basata su plug-in per supportare i numerosi provider di infrastrutture e servizi disponibili. Ogni "provider" corrisponde a uno specifico programma binario incapsulato che viene distribuito separatamente da Terraform. Inizializza Terraform impostando Google come provider.
- Per creare un nuovo file all'interno della cartella tfinfra,
fai clic con il tasto destro del mouse
sulla cartella tfinfra, quindi fai clic su Nuovo file.
- Assegna al nuovo file il nome provider.tf e aprilo.
- Copia il codice in
provider.tf
:
provider "google" {}
-
Per salvare provider.tf, fai clic su File > Salva.
-
Per inizializzare Terraform, esegui questo comando:
cd tfinfra
terraform init
Ora è tutto pronto per lavorare con Terraform in Cloud Shell.
Attività 2: crea mynetwork e le rispettive risorse
In questa attività creerai la rete in modalità automatica mynetwork con la relativa regola firewall e due istanze VM (mynet_vm_1 e mynet_vm_2).
Configura mynetwork
Crea una nuova configurazione e definisci mynetwork.
- Per creare un nuovo file all'interno di tfinfra,
fai clic con il tasto destro del mouse
sulla cartella tfinfra, quindi fai clic su Nuovo file.
- Assegna al nuovo file il nome mynetwork.tf e aprilo.
- Copia questo codice di base in
mynetwork.tf
:
# Create the mynetwork network
resource [RESOURCE_TYPE] "mynetwork" {
name = [RESOURCE_NAME]
# RESOURCE properties go here
}
Questo modello di base è un ottimo punto di partenza per qualsiasi risorsa Google Cloud. Il campo name permette di assegnare un nome alla risorsa, mentre il campo type consente di specificare la risorsa Google Cloud che vuoi creare. Puoi anche definire le proprietà, che tuttavia sono facoltative per alcune risorse.
- In
mynetwork.tf
, sostituisci [RESOURCE_TYPE]
con "google_compute_network"
(incluse le virgolette).
Nota: la risorsa google_compute_network è una rete VPC. Le risorse disponibili sono indicate nella documentazione del provider Google Cloud. Scopri di più su questa specifica risorsa nella documentazione di Terraform.
- In
mynetwork.tf
, sostituisci [RESOURCE_NAME]
con "mynetwork"
(incluse le virgolette).
- Aggiungi questa proprietà a
mynetwork.tf
:
auto_create_subnetworks = "true"
Per definizione, una rete in modalità automatica crea automaticamente una subnet in ogni regione. Per questo, auto_create_subnetworks è impostato su true.
- Verifica che il file mynetwork.tf abbia questo aspetto:
# Create the mynetwork network
resource "google_compute_network" "mynetwork" {
name = "mynetwork"
# RESOURCE properties go here
auto_create_subnetworks = "true"
}
- Per salvare
mynetwork.tf
, fai clic su File > Salva.
Configura la regola firewall
Definisci una regola firewall per consentire il traffico HTTP, SSH, RDP e ICMP su mynetwork.
- Aggiungi questo codice di base a
mynetwork.tf
:
# Add a firewall rule to allow HTTP, SSH, RDP and ICMP traffic on mynetwork
resource [RESOURCE_TYPE] "mynetwork-allow-http-ssh-rdp-icmp" {
name = [RESOURCE_NAME]
# RESOURCE properties go here
}
- In
mynetwork.tf
, sostituisci [RESOURCE_TYPE]
con "google_compute_firewall"
(incluse le virgolette).
Nota: la risorsa google_compute_firewall è una regola firewall. Scopri di più su questa specifica risorsa nella documentazione di Terraform.
- In
mynetwork.tf
, sostituisci [RESOURCE_NAME]
con "mynetwork-allow-http-ssh-rdp-icmp"
(incluse le virgolette).
- Aggiungi questa proprietà a
mynetwork.tf
:
network = google_compute_network.mynetwork.self_link
Nota: dal momento che questa regola firewall dipende dalla rispettiva rete, il riferimento google_compute_network.mynetwork.self_link viene usato per indicare a Terraform di risolvere queste risorse in ordine dipendente. In questo caso, la rete viene creata prima della regola firewall.
- Aggiungi queste proprietà a
mynetwork.tf
:
allow {
protocol = "tcp"
ports = ["22", "80", "3389"]
}
allow {
protocol = "icmp"
}
source_ranges = ["0.0.0.0/0"]
L'elenco di regole allow specifica i protocolli e le porte consentiti.
- Verifica che il tuo file
mynetwork.tf
abbia il seguente aspetto:
# Create the mynetwork network
resource "google_compute_network" "mynetwork" {
name = "mynetwork"
# RESOURCE properties go here
auto_create_subnetworks = "true"
}
# Add a firewall rule to allow HTTP, SSH, RDP and ICMP traffic on mynetwork
resource "google_compute_firewall" "mynetwork-allow-http-ssh-rdp-icmp" {
name = "mynetwork-allow-http-ssh-rdp-icmp"
# RESOURCE properties go here
network = google_compute_network.mynetwork.self_link
allow {
protocol = "tcp"
ports = ["22", "80", "3389"]
}
allow {
protocol = "icmp"
}
source_ranges = ["0.0.0.0/0"]
}
- Per salvare mynetwork.tf, fai clic su File > Salva.
Configura l'istanza VM
Definisci le istanze VM creando un modulo di istanza VM. Un modulo è una configurazione riutilizzabile all'interno di una cartella. Utilizzerai questo modulo per entrambe le istanze VM di questo lab.
- Per creare una nuova cartella all'interno di tfinfra, seleziona la cartella tfinfra, quindi fai clic su File > Nuova cartella.
- Assegna alla nuova cartella il nome instance.
- Per creare un nuovo file all'interno di instance,
fai clic con il tasto destro del mouse
sulla cartella instance, quindi fai clic su Nuovo file.
- Assegna al nuovo file il nome main.tf e aprilo.
In Cloud Shell dovresti vedere questa struttura di cartelle:

- Copia questo codice di base in main.tf:
resource [RESOURCE_TYPE] "vm_instance" {
name = [RESOURCE_NAME]
# RESOURCE properties go here
}
- In
main.tf
, sostituisci [RESOURCE_TYPE]
con "google_compute_instance"
(incluse le virgolette).
Nota: la risorsa google_compute_instance è un'istanza di Compute Engine. Scopri di più su questa specifica risorsa nella documentazione di Terraform.
- In
main.tf
, sostituisci [RESOURCE_NAME]
con "${var.instance_name}"
(incluse le virgolette).
Dal momento che utilizzerai questo modulo per entrambe le istanze VM, il nome dell'istanza viene definito come una variabile di input. In questo modo, puoi controllare il nome della variabile da mynetwork.tf. Per saperne di più sulle variabili di input, consulta la Guida Terraform: Define input variables.
- Aggiungi queste proprietà a
main.tf
:
zone = "${var.instance_zone}"
machine_type = "${var.instance_type}"
Queste proprietà definiscono la zona e il tipo di macchina dell'istanza come variabili di input.
- Aggiungi queste proprietà a
main.tf
:
boot_disk {
initialize_params {
image = "debian-cloud/debian-11"
}
}
Questa proprietà definisce il disco di avvio in modo da utilizzare l'immagine sistema operativo Debian 11. Dal momento che entrambe le istanze VM utilizzeranno la stessa immagine, puoi impostare questa proprietà come hardcoded nel modulo.
- Aggiungi queste proprietà a
main.tf
:
network_interface {
network = "${var.instance_network}"
access_config {
# Allocate a one-to-one NAT IP to the instance
}
}
Questa proprietà definisce l'interfaccia di rete indicando il nome della rete come una variabile di input e la configurazione di accesso. Lasciando vuota la configurazione di accesso, viene creato un indirizzo IP esterno temporaneo (obbligatorio in questo lab). Per creare istanze con solo un indirizzo IP interno, rimuovi la sezione access_config. Per saperne di più, consulta la documentazione di Terraform.
- Verifica che
main.tf
abbia il seguente aspetto, incluse le parentesi {}
resource "google_compute_instance" "vm_instance" {
name = "${var.instance_name}"
zone = "${var.instance_zone}"
machine_type = "${var.instance_type}"
boot_disk {
initialize_params {
image = "debian-cloud/debian-11"
}
}
network_interface {
network = "${var.instance_network}"
access_config {
# Allocate a one-to-one NAT IP to the instance
}
}
}
- Per salvare main.tf, fai clic su File > Salva.
- Per creare un nuovo file all'interno di instance,
fai clic con il tasto destro del mouse
sulla cartella instance, quindi fai clic su Nuovo file.
- Assegna al nuovo file il nome variables.tf e aprilo.
- Definisci le 4 variabili di input in
variables.tf
.
variable "instance_name" {}
variable "instance_zone" {}
variable "instance_type" {
default = "e2-micro"
}
variable "instance_network" {}
Se assegni un valore predefinito a instance_type, rendi la variabile facoltativa. I campi instance_name, instance_zone e instance_network sono obbligatori e dovrai definirli in mynetwork.tf
.
- Per salvare variables.tf, fai clic su File > Salva.
- Aggiungi queste istanze VM a
mynetwork.tf
:
# Create the mynet-vm-1 instance
module "mynet-vm-1" {
source = "./instance"
instance_name = "mynet-vm-1"
instance_zone = "{{{project_0.default_zone|Zone}}}"
instance_network = google_compute_network.mynetwork.self_link
}
# Create the mynet-vm-2" instance
module "mynet-vm-2" {
source = "./instance"
instance_name = "mynet-vm-2"
instance_zone = "{{{project_0.default_zone_2|Zone 2}}}"
instance_network = google_compute_network.mynetwork.self_link
}
Queste risorse utilizzano il modulo nella cartella instance e indicano il nome, la zona e la rete come input. Dal momento che queste istanze dipendono da una rete VPC, il riferimento google_compute_network.mynetwork.self_link viene utilizzato per indicare a Terraform di risolvere queste risorse in ordine dipendente. In questo caso, la rete viene creata prima dell'istanza.
Nota: il vantaggio di scrivere un modulo Terraform è che può essere riutilizzato in molte configurazioni. Anziché scrivere il modulo, puoi utilizzare i moduli esistenti nel registro di moduli Terraform.
-
Per salvare mynetwork.tf
, fai clic su File > Salva.
-
Verifica che mynetwork.tf
abbia il seguente aspetto, incluse le parentesi {}
# Create the mynetwork network
resource "google_compute_network" "mynetwork" {
name = "mynetwork"
# RESOURCE properties go here
auto_create_subnetworks = "true"
}
# Add a firewall rule to allow HTTP, SSH, RDP and ICMP traffic on mynetwork
resource "google_compute_firewall" "mynetwork-allow-http-ssh-rdp-icmp" {
name = "mynetwork-allow-http-ssh-rdp-icmp"
# RESOURCE properties go here
network = google_compute_network.mynetwork.self_link
allow {
protocol = "tcp"
ports = ["22", "80", "3389"]
}
allow {
protocol = "icmp"
}
source_ranges = ["0.0.0.0/0"]
}
# Create the mynet-vm-1 instance
module "mynet-vm-1" {
source = "./instance"
instance_name = "mynet-vm-1"
instance_zone = "{{{project_0.default_zone|Zone}}}"
instance_network = google_compute_network.mynetwork.self_link
}
# Create the mynet-vm-2" instance
module "mynet-vm-2" {
source = "./instance"
instance_name = "mynet-vm-2"
instance_zone = "{{{project_0.default_zone_2|Zone 2}}}"
instance_network = google_compute_network.mynetwork.self_link
}
crea mynetwork e le rispettive risorse
È il momento di applicare la configurazione mynetwork.
- Per riscrivere i file di configurazione di Terraform in formato e stile canonico, esegui il comando seguente:
terraform fmt
L'output dovrebbe essere simile al seguente:
mynetwork.tf
Nota: se visualizzi un messaggio di errore, rivedi i passaggi precedenti per assicurarti che la configurazione corrisponda alle istruzioni del lab. Se non riesci a risolvere il problema relativo alla configurazione, scarica e dai un'occhiata a queste configurazioni completate:
- Per inizializzare Terraform, esegui questo comando:
terraform init
L'output dovrebbe essere simile al seguente:
Initializing modules...
- mynet-vm-2 in instance
- mynet-vm-2 in instance
...
Terraform has been successfully initialized!
Nota: se visualizzi un messaggio di errore, rivedi i passaggi precedenti per assicurarti che la struttura di cartelle/file sia corretta. Se non riesci a risolvere il problema relativo alla configurazione, consulta le configurazioni completate indicate qui sopra. Dopo aver risolto il problema, esegui nuovamente il comando precedente.
- Per creare un piano di esecuzione, esegui il comando seguente:
terraform plan
L'output dovrebbe essere simile al seguente:
...
Plan: 4 to add, 0 to change, 0 to destroy.
...
Terraform ha stabilito che è necessario aggiungere le quattro risorse seguenti:
Nome |
Descrizione |
mynetwork |
Rete VPC |
mynetwork-allow-http-ssh-rdp-icmp |
Regola firewall per consentire il traffico HTTP, SSH, RDP e ICMP |
mynet-vm-2 |
Istanza VM in
|
mynet-vm-2 |
Istanza VM in
|
- Per applicare le modifiche desiderate, esegui questo comando:
terraform apply
- Per confermare le azioni pianificate, digita:
yes
L'output dovrebbe essere simile al seguente:
...
Apply complete! Resources: 4 added, 0 changed, 0 destroyed.
Fai clic su Controlla i miei progressi per verificare l'obiettivo.
Crea mynetwork e le rispettive risorse
Nota: se si verifica un errore durante l'esecuzione, rivedi i passaggi precedenti per assicurarti che la struttura di cartelle/file sia corretta. Se non riesci a risolvere il problema relativo alla configurazione, consulta le configurazioni completate indicate qui sopra. Dopo aver risolto il problema, esegui nuovamente il comando precedente.
Attività 3: verifica il deployment
Nella console Google Cloud, verifica che le risorse siano state create.
Verifica la tua rete nella console Cloud
- Nella console Google Cloud, nel menu di navigazione (
), fai clic su Rete VPC > Reti VPC.
- Visualizza la rete VPC mynetwork con una subnet in ogni regione.
- Nel menu di navigazione, fai clic su Rete VPC > Firewall.
- Ordina le regole firewall per Rete.
- Visualizza la regola firewall mynetwork-allow-http-ssh-rdp-icmp per mynetwork.
Verifica le istanze VM nella console Cloud
- Nel menu di navigazione (
), fai clic su Compute Engine > Istanze VM.
- Visualizza le istanze mynet-vm-1 e mynet-vm-2.
- Prendi nota dell'indirizzo IP interno di mynet-vm-2.
- Per mynet-vm-1, fai clic su SSH per avviare un terminale e stabilire la connessione.
- Per verificare la connettività all'indirizzo IP interno di mynet-vm-2, esegui questo comando nel terminale SSH (sostituendo il segnaposto con l'indirizzo IP interno di mynet-vm-2 visto prima):
ping -c 3 <Enter mynet-vm-2's internal IP here>
Nota: questo comando dovrebbe funzionare perché entrambe le istanze VM si trovano sulla stessa rete e la regola firewall consente il traffico ICMP.
Attività 4: riepilogo
In questo lab hai creato una configurazione Terraform con un modulo per automatizzare il deployment dell'infrastruttura Google Cloud. Man mano che la configurazione cambia, Terraform può creare piani di esecuzione incrementali, permettendoti di creare la configurazione complessiva passo passo.
Il modulo di istanza ti ha consentito di riutilizzare la stessa configurazione per più risorse, indicando le proprietà come variabili di input. Puoi utilizzare la configurazione e il modulo che hai creato come punto di partenza per ulteriori deployment.
Termina il lab
Una volta completato il lab, fai clic su Termina lab. Google Cloud Skills Boost rimuove le risorse che hai utilizzato ed esegue la pulizia dell'account.
Avrai la possibilità di inserire una valutazione in merito alla tua esperienza. Seleziona il numero di stelle applicabile, inserisci un commento, quindi fai clic su Invia.
Il numero di stelle corrisponde alle seguenti valutazioni:
- 1 stella = molto insoddisfatto
- 2 stelle = insoddisfatto
- 3 stelle = esperienza neutra
- 4 stelle = soddisfatto
- 5 stelle = molto soddisfatto
Se non vuoi lasciare un feedback, chiudi la finestra di dialogo.
Per feedback, suggerimenti o correzioni, utilizza la scheda Assistenza.
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.