In questo tutorial, eseguirai il deployment di un'app di logbook di esempio che utilizza Node.js per il frontend e MySQL per il backend. Alla fine del tutorial, il deployment include le seguenti risorse:
Se non hai mai utilizzato Deployment Manager, consulta i tutorial della guida rapida o della guida passo passo.
Prima di iniziare
- Se vuoi utilizzare gli esempi di riga di comando di questa guida, installa lo strumento a riga di comando "gcloud".
- Se vuoi utilizzare gli esempi di API riportati in questa guida, configura l'accesso API.
- Leggi una panoramica del bilanciamento del carico di rete di Compute Engine.
- Leggi una panoramica dei container Docker.
Creazione dei modelli di risorse
Questo esempio avvia un deployment che contiene una varietà di risorse Google Cloud. Per iniziare, crea modelli che definiscono le risorse separatamente. Successivamente, potrai chiamare questi modelli nella configurazione finale. Il deployment contiene queste risorse:
- Un'istanza Compute Engine che ospita un database MySQL per l'app.
- Un modello di istanza per le istanze di frontend che utilizza un'immagine Docker per l'app Node.js.
- Un gruppo di istanze gestite che utilizza il modello di istanza per creare due istanze di frontend.
- Un gestore della scalabilità automatica, che avvia o interrompe istanze di frontend aggiuntive in base al traffico in entrata.
- Un controllo di integrità, che verifica se le istanze del frontend sono disponibili per il lavoro.
- Un bilanciatore del carico di rete con una regola di forwarding.
- Un pool di destinazione per il gruppo di istanze gestite.
Creazione del modello per il backend MySQL
Il backend di questa app è una singola istanza Compute Engine che esegue un container Docker MySQL. Il modello container_vm.py
definisce un'istanza Compute Engine in grado di eseguire container Docker. Per assicurarti che il modello segua la struttura corretta e contenga tutte le proprietà richieste, devi avere anche un file di schema.
Copia il modello di seguito o scaricalo dal repository GitHub:
Scarica il file dello schema per il modello.
Il modello ha alcune proprietà non definite, come containerImage
, che sono
definite nei modelli successivi.
Quando usi immagini container sulle istanze di Compute Engine, devi anche fornire un file manifest che descriva l'immagine container da utilizzare. Crea un metodo helper denominato container_helper.py
per definire in modo dinamico il manifest del container:
Creazione del modello per il frontend Node.js
Il frontend dell'app esegue Node.js e consente agli utenti di pubblicare messaggi sulla pagina web. Il frontend viene eseguito su un gruppo di istanze di macchine virtuali, supportate da un gestore della scalabilità automatica e un bilanciatore del carico. Per creare modelli di frontend, segui le istruzioni riportate di seguito.
Crea una risorsa modello di istanza.
Hai bisogno di un modello di istanza per creare un gruppo di istanze gestite, ovvero un gruppo di istanze di macchine virtuali (VM) identiche che controlli come singola entità.
Crea un file denominato
container_instance_template.py
e scarica lo schema per il modello:Crea un gestore della scalabilità automatica, un gruppo di istanze gestite e un bilanciatore del carico.
Poi, crea un altro modello che utilizza il modello
container_instance_template.py
e crea le altre risorse frontend, tra cui un gestore della scalabilità automatica, un bilanciatore del carico e un gruppo di istanze gestite.
Questo modello include le seguenti risorse:
Un modello di istanza che utilizza il modello
container_instance_template.py
.Un gruppo di istanze gestite che utilizza il modello di istanza e un gestore della scalabilità automatica che fa riferimento al gruppo di istanze gestite. L'uso dei riferimenti garantisce che Deployment Manager crei le risorse in un ordine specifico. In questo caso, il gruppo di istanze gestite viene creato prima del gestore della scalabilità automatica.
Un bilanciatore del carico di rete contenente le seguenti risorse:
- Una regola di forwarding con un singolo indirizzo IP esterno esposto a internet.
- Un pool di destinazione contenente il gruppo di istanze gestite che hai creato in precedenza.
- Un controllo di integrità da collegare al pool di destinazione.
Crea un file denominato frontend.py
e scarica lo schema per il modello:
Scarica il file dello schema per il modello.
Creazione di un modello unificatore
Infine, crea un modello che raggruppa i modelli
back-end e frontend. Crea un file denominato nodejs.py
con i seguenti contenuti:
Scarica il file dello schema per il modello.
Tieni presente che il frontend della tua app è denominato env["deployment"]-frontend
e anche il backend ha un nome simile. Quando esegui il deployment dell'app, Deployment Manager sostituirà automaticamente env["deployment"]
con il nome del deployment.
Creazione della configurazione
Quando tutti i modelli sono pronti, puoi creare una configurazione che verrà utilizzata per il deployment delle risorse. Crea un file di configurazione denominato
nodejs.yaml
con il seguente contenuto:
Sostituisci ZONE_TO_RUN
con la zona in cui vuoi utilizzare le risorse, ad esempio us-central1-a
.
Deployment delle risorse
Ora esegui il deployment delle risorse. Utilizzando Google Cloud CLI, esegui:
gcloud deployment-manager deployments create advanced-configuration --config nodejs.yaml
Al termine del deployment, Deployment Manager mostra un riepilogo delle risorse create, simile al seguente:
Waiting for create operation-1468522101491-5379cf2344539-5961abe8-a500190c...done.
Create operation operation-1468522101491-5379cf2344539-5961abe8-a500190c completed successfully.
NAME TYPE STATE ERRORS
advanced-configuration-application-fw compute.v1.firewall COMPLETED []
advanced-configuration-backend compute.v1.instance COMPLETED []
advanced-configuration-frontend-as compute.v1.autoscaler COMPLETED []
advanced-configuration-frontend-hc compute.v1.httpHealthCheck COMPLETED []
advanced-configuration-frontend-igm compute.v1.instanceGroupManager COMPLETED []
advanced-configuration-frontend-it compute.v1.instanceTemplate COMPLETED []
advanced-configuration-frontend-lb compute.v1.forwardingRule COMPLETED []
advanced-configuration-frontend-tp compute.v1.targetPool COMPLETED []
Test dell'app
Per testare la tua app, ottieni prima l'indirizzo IP esterno che gestisce il traffico eseguendo una query sulla regola di forwarding:
$ gcloud compute forwarding-rules describe advanced-configuration-frontend-lb --region us-central1
IPAddress: 104.154.81.44
IPProtocol: TCP
creationTimestamp: '2016-07-14T11:48:37.228-07:00'
description: ''
id: '9033201246750269546'
kind: compute#forwardingRule
name: advanced-configuration-frontend-lb
portRange: 8080-8080
region: https://www.googleapis.com/compute/v1/projects/myproject/regions/us-central1
selfLink: https://www.googleapis.com/compute/v1/projects/myproject/regions/us-central1/forwardingRules/advanced-configuration-frontend-lb
target: https://www.googleapis.com/compute/v1/projects/myproject/regions/us-central1/targetPools/advanced-configuration-frontend-tp
In questo caso, l'IP esterno è 104.154.81.44
.
Quindi, in un browser, visita l'indirizzo IP esterno con la porta 8080. Ad esempio,
se il tuo indirizzo IP esterno è 104.154.81.44
, l'URL sarà:
http://104.154.81.44:8080
Dovresti visualizzare una pagina vuota. Quindi, pubblica un messaggio nella pagina. Vai al seguente URL:
http://104.154.81.44:8080?msg=hellothere!
Verrà visualizzata la conferma dell'aggiunta del messaggio. Torna all'URL principale e la pagina ora dovrebbe contenere il messaggio:
hellothere!
Ora hai un'app di cui hai eseguito il deployment che può registrare i messaggi inviati.
Passaggi successivi
Una volta completato questo esempio, puoi:
- Basati su questo esempio, eseguendo il deployment delle istanze con i tuoi container Docker. Se vuoi modificare i container Docker utilizzati in questo tutorial, modifica i Dockerfile nel repository GitHub.
- Esamina altri deployment di esempio nel repository GitHub di Deployment Manager.
- Scopri di più su modelli e deployment.