1. Introduzione
Buongiorno a tutti e grazie per essere qui oggi. Vuoi imparare a utilizzare Google Compute Engine?
In questo codelab esploreremo Compute Engine utilizzando un'applicazione Guestbook di esempio.
Creerai istanze Compute Engine, eseguirai il deployment di nginx e infine inserirai un bilanciatore del carico di rete nella parte anteriore. Puoi creare un'istanza Compute Engine dalla console grafica o dalla riga di comando. Questo lab ti guiderà nell'utilizzo della riga di comando.

Google Compute Engine offre macchine virtuali ospitate nei data center di Google collegati alla sua rete in fibra globale. Gli strumenti e il flusso di lavoro offerti consentono di scalare da singole istanze fino al cloud computing globale basato su bilanciamento del carico.
Queste VM si avviano velocemente, sono dotate di archiviazione su disco permanente e offrono prestazioni costanti. Le macchine sono disponibili in molte configurazioni, incluse dimensioni predefinite, e possono anche essere create con tipi di macchine personalizzate ottimizzate per le tue esigenze specifiche.
Infine, le macchine virtuali Compute Engine sono anche la tecnologia utilizzata da molti altri prodotti Google Cloud (Kubernetes Engine, Cloud Dataproc, Cloud Dataflow e così via).
2. Configurazione e requisiti
Configurazione dell'ambiente autonomo
- Accedi alla console Google Cloud e crea un nuovo progetto o riutilizzane uno esistente. Se non hai ancora un account Gmail o Google Workspace, devi crearne uno.



- Il nome del progetto è il nome visualizzato per i partecipanti a questo progetto. È una stringa di caratteri non utilizzata dalle API di Google e puoi aggiornarla in qualsiasi momento.
- L'ID progetto deve essere univoco in tutti i progetti Google Cloud ed è immutabile (non può essere modificato dopo essere stato impostato). Cloud Console genera automaticamente una stringa univoca, di solito non ti interessa di cosa si tratta. Nella maggior parte dei codelab, devi fare riferimento all'ID progetto (che in genere è identificato come
PROJECT_ID), quindi, se non ti piace, generane un altro casuale oppure puoi provare il tuo e vedere se è disponibile. Viene "congelato" dopo la creazione del progetto. - Esiste un terzo valore, un numero di progetto, utilizzato da alcune API. Scopri di più su tutti e tre questi valori nella documentazione.
- Successivamente, devi abilitare la fatturazione in Cloud Console per utilizzare le risorse/API Cloud. L'esecuzione di questo codelab non dovrebbe costare molto, se non nulla. Per arrestare le risorse in modo da non incorrere in costi di fatturazione al termine di questo tutorial, segui le istruzioni di "pulizia" riportate alla fine del codelab. I nuovi utenti di Google Cloud possono beneficiare del programma prova senza costi di 300$.
Google Cloud Shell
Sebbene Google Cloud e Compute Engine possano essere gestiti da remoto dal tuo laptop, in questo codelab utilizzeremo Google Cloud Shell, un ambiente a riga di comando in esecuzione nel cloud.
Questa macchina virtuale basata su Debian viene caricata con tutti gli strumenti di sviluppo di cui avrai bisogno. Offre una home directory permanente da 5 GB e viene eseguita in Google Cloud, migliorando notevolmente le prestazioni e l'autenticazione della rete. Ciò significa che per questo codelab ti servirà solo un browser (sì, funziona su Chromebook).
- Per attivare Cloud Shell dalla console Cloud, fai clic su Attiva Cloud Shell
(bastano pochi istanti per eseguire il provisioning e connettersi all'ambiente).


Una volta eseguita la connessione a Cloud Shell, dovresti vedere che il tuo account è già autenticato e il progetto è già impostato sul tuo PROJECT_ID.
gcloud auth list
Output comando
Credentialed accounts: - <myaccount>@<mydomain>.com (active)
gcloud config list project
Output comando
[core] project = <PROJECT_ID>
Se per qualche motivo il progetto non è impostato, esegui questo comando:
gcloud config set project <PROJECT_ID>
Stai cercando PROJECT_ID? Controlla l'ID che hai utilizzato nei passaggi di configurazione o cercalo nella dashboard della console Cloud:

Cloud Shell imposta anche alcune variabili di ambiente per impostazione predefinita, che potrebbero essere utili quando esegui i comandi futuri.
echo $GOOGLE_CLOUD_PROJECT
Output comando
<PROJECT_ID>
- Infine, imposta la zona e la configurazione del progetto predefinite.
gcloud config set compute/zone us-central1-f
Puoi scegliere una serie di zone diverse. Per saperne di più, consulta Regioni e zone.
3. Crea un'istanza di Compute Engine
Come discusso in precedenza, in questo codelab utilizzeremo la riga di comando gcloud. Tutto ciò che viene fatto qui può essere ottenuto utilizzando la console (disponibile all'indirizzo console.cloud.google.com).
Creiamo innanzitutto un'istanza con le impostazioni predefinite :
$ gcloud compute instances create myinstance Created [...]. NAME: myinstance ZONE: us-central1-f MACHINE_TYPE: n1-standard-1 PREEMPTIBLE: INTERNAL_IP: 10.128.X.X EXTERNAL_IP: X.X.X.X STATUS: RUNNING
Prendi nota di EXTERNAL_IP, ti servirà in seguito.
L'istanza viene creata utilizzando una serie di valori predefiniti :
- La zona che scegli. Tutte le istanze si trovano in una zona. Puoi selezionare una zona al momento della creazione dell'istanza utilizzando il flag
--zoneoppure puoi impostare una zona predefinita (come abbiamo fatto nella configurazione iniziale) e omettere il flag--zone. - L'ultima immagine Debian GNU/Linux 9 (stretch). Se utilizzi una tua immagine personalizzata, fornisci qui il nome dell'immagine. Ad esempio:
--image my-own-image. - Il tipo di macchina
n1-standard-1. Puoi selezionare un altro tipo di macchina, ad esempion1-highmem-4on1-highcpu-6. Se nessuno dei tipi di macchine predefiniti soddisfa le tue esigenze, utilizza un tipo di macchina personalizzata. - Un disco permanente radice con lo stesso nome dell'istanza. Il disco viene automaticamente collegato all'istanza.
Esegui gcloud compute instances create --help per visualizzare tutte le opzioni disponibili.
4. Attiva il firewall per la porta 80
Per impostazione predefinita, Google Cloud Platform consente solo pochi accessi alle porte. Poiché installeremo Nginx a breve, abilitiamo prima la porta 80 nella configurazione del firewall.
$ gcloud compute firewall-rules create allow-80 --allow tcp:80 Created [...]. NAME: allow-80 NETWORK: default DIRECTION: INGRESS PRIORITY: 1000 ALLOW: tcp:80 DENY: DISABLED: False
Verrà creata una regola firewall denominata allow-80 con un elenco predefinito di blocchi di indirizzi IP autorizzati a stabilire connessioni in entrata (--source-ranges) impostato su 0.0.0.0/0 (Ovunque).
Esegui gcloud compute firewall-rules create --help per visualizzare tutti i valori predefiniti e tutte le opzioni disponibili, inclusa la possibilità di applicare regole firewall basate sui tag.
5. Accedi all'istanza tramite SSH
Per eseguire SSH nell'istanza dalla riga di comando (sempre da Cloud Shell) :
$ gcloud compute ssh myinstance Waiting for SSH key to propagate. Warning: Permanently added 'compute.12345' (ECDSA) to the list of known hosts. ... yourusername@myinstance:~#
È tutto. Piuttosto facile. In produzione, assicurati di inserire una passphrase.
In alternativa, puoi anche accedere alla VM tramite SSH direttamente dalla console ( console.cloud.google.com), andando su Compute Engine > Istanze VM e facendo clic su SSH.

6. Installa Nginx
Accedi a myinstance, l'istanza appena creata, e installa nginx:
$ sudo su - # apt update # apt install -y nginx # service nginx start # exit
Verifica che il server sia in esecuzione utilizzando curl da myinstance:
$ curl -s localhost | grep nginx <title>Welcome to nginx!</title> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and <a href="http://nginx.org/">nginx.org</a>.<br/> <a href="http://nginx.com/">nginx.com</a>.</p> <p><em>Thank you for using nginx.</em></p>
Trova l'IP esterno della tua istanza elencando le istanze tramite la UI web:

Assicurati di uscire da SSH ed esegui questo comando da Cloud Shell:
$ gcloud compute instances list NAME: myinstance ZONE: us-central1-f MACHINE_TYPE: n1-standard-1 PREEMPTIBLE: INTERNAL_IP: 10.128.X.X EXTERNAL_IP: X.X.X.X STATUS: RUNNING
Poi vai a http://EXTERNAL_IP/, dove EXTERNAL_IP è l'IP pubblico di myinstance e dovresti essere in grado di vedere la pagina nginx:

7. Script di avvio
Anziché configurare l'istanza ogni volta, puoi utilizzare uno script di avvio per inizializzarla all'avvio.
Crea un file denominato startup.sh con i seguenti contenuti (puoi utilizzare il tuo editor di testo preferito: vim, nano o emacs):
#! /bin/bash apt-get update apt-get install -y nginx service nginx start sed -i -- 's/nginx/Google Cloud Platform - '"$HOSTNAME"'/' /var/www/html/index.nginx-debian.html
Per creare una nuova istanza VM con questo script di avvio, digita :
$ gcloud compute instances create nginx \
--metadata-from-file startup-script=startup.sh
Created [...].
NAME: nginx
ZONE: us-central1-f
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
INTERNAL_IP: 10.128.X.X
EXTERNAL_IP: X.X.X.X
STATUS: RUNNING
Vai su http://EXTERNAL_IP/ e dovresti visualizzare la home page aggiornata. Se la pagina non viene visualizzata immediatamente, riprova dopo un paio di secondi. L'host potrebbe essere ancora in fase di avvio di nginx.
8. Crea un cluster di server
Per creare un cluster di server, devi prima creare un modello di istanza. Una volta creato un modello di istanza, puoi creare un gruppo di istanze per gestire il numero di istanze da creare.
Innanzitutto, crea un modello di istanza utilizzando lo script di avvio :
$ gcloud compute instance-templates create nginx-template \
--metadata-from-file startup-script=startup.sh
Created [...].
NAME: nginx-template
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
CREATION_TIMESTAMP: 2022-03-18T15:10:37.621-07:00
Secondo, creiamo un pool target. Un pool di destinazione consente un unico punto di accesso per tutte le istanze in un gruppo ed è necessario per il bilanciamento del carico nei prossimi passaggi.
$ gcloud compute target-pools create nginx-pool Created [...]. NAME: nginx-pool REGION: us-central1 SESSION_AFFINITY: NONE BACKUP: HEALTH_CHECKS:
Infine, crea un gruppo di istanze utilizzando il modello:
$ gcloud compute instance-groups managed create nginx-group \
--base-instance-name nginx \
--size 2 \
--template nginx-template \
--target-pool nginx-pool
Created [...].
NAME: nginx-group
LOCATION: us-central1-f
SCOPE: zone
BASE_INSTANCE_NAME: nginx
SIZE: 0
TARGET_SIZE: 2
INSTANCE_TEMPLATE: nginx-template
AUTOSCALED: no
In questo modo vengono create due istanze VM aggiuntive con i nomi preceduti dal prefisso nginx-.
Ora dovresti essere in grado di vedere tutte le istanze create.
$ gcloud compute instances list NAME: myinstance ZONE: us-central1-f MACHINE_TYPE: n1-standard-1 PREEMPTIBLE: INTERNAL_IP: 10.128.X.X EXTERNAL_IP: X.X.X.X STATUS: RUNNING NAME: nginx ZONE: us-central1-f MACHINE_TYPE: n1-standard-1 PREEMPTIBLE: INTERNAL_IP: 10.128.X.X EXTERNAL_IP: X.X.X.X STATUS: RUNNING NAME: nginx-frpl ZONE: us-central1-f MACHINE_TYPE: n1-standard-1 PREEMPTIBLE: INTERNAL_IP: 10.128.X.X EXTERNAL_IP: X.X.X.X STATUS: RUNNING NAME: nginx-ztg4 ZONE: us-central1-f MACHINE_TYPE: n1-standard-1 PREEMPTIBLE: INTERNAL_IP: 10.128.X.X EXTERNAL_IP: X.X.X.X STATUS: RUNNING
9. Crea un bilanciatore del carico di rete
Esistono diversi tipi di bilanciatori del carico in Google Cloud Platform, tra cui :
Creiamo un bilanciatore del carico di rete regionale destinato al nostro gruppo di istanze:
$ gcloud compute forwarding-rules create nginx-lb \
--ports 80 \
--target-pool nginx-pool
Created [...].
$ gcloud compute forwarding-rules list
NAME: nginx-lb
REGION: us-central1
IP_ADDRESS: X.X.X.X
IP_PROTOCOL: TCP
TARGET: us-central1/targetPools/nginx-pool
Puoi quindi visitare il bilanciatore del carico dal browser http://IP_ADDRESS/, dove IP_ADDRESS è l'indirizzo mostrato come risultato dell'esecuzione del comando precedente.
Per motivi di tempo, oggi non creeremo un bilanciatore del carico HTTP.
10. Pulire il cluster
Non dimenticare di arrestare il cluster, altrimenti continuerà a essere eseguito e a maturare costi. I seguenti comandi elimineranno le istanze di Google Compute Engine, il gruppo di istanze, il gruppo di targeting e il bilanciatore del carico.
$ gcloud compute forwarding-rules delete nginx-lb $ gcloud compute instance-groups managed delete nginx-group $ gcloud compute target-pools delete nginx-pool $ gcloud compute instance-templates delete nginx-template $ gcloud compute instances delete nginx $ gcloud compute instances delete myinstance $ gcloud compute firewall-rules delete allow-80
Ciascuno dei comandi precedenti dovrebbe chiederti di confermare l'eliminazione della risorsa.
11. Passaggi successivi
Congratulazioni, hai completato questo codelab di Compute Engine.
Altre funzionalità di Compute Engine
Google Compute Engine offre un ricco insieme di funzionalità. Ti consigliamo di approfondire alcuni di questi argomenti :
- VM prerilasciabili - https://cloud.google.com/compute/docs/instances/create-start-preemptible-instance
- Nodi single-tenant - https://cloud.google.com/compute/docs/nodes/create-nodes
- GPU e TPU - https://cloud.google.com/compute/docs/gpus/add-gpus
- Istanze Windows - https://cloud.google.com/compute/docs/instances/windows/creating-managing-windows-instances
- Etichettatura delle risorse - https://cloud.google.com/compute/docs/labeling-resources
- Migrazione delle VM a Compute Engine - https://cloud.google.com/compute/docs/vm-migration/
Google Kubernetes Engine
Google Kubernetes Engine (GKE) è l'offerta Kubernetes ospitata e completamente gestita di Google Cloud. Sono disponibili diversi codelab per aiutarti a iniziare a utilizzare GKE. Ecco un buon punto di partenza :
- Codelab di Google Kubernetes Engine - https://codelabs.developers.google.com/codelabs/cloud-gke-workshop-v2
Inviaci il tuo feedback
- Ti invitiamo a dedicare qualche istante per completare il nostro brevissimo sondaggio.