In questo tutorial, esegui il deployment di un'app di esempio di registro di bordo che utilizza Node.js per il frontend e MySQL per il backend. Al termine del tutorial, il deployment avrà le seguenti risorse:
Se non hai mai utilizzato Deployment Manager, consulta i tutorial Guida rapida o Guida passo passo.
Prima di iniziare
- Se vuoi utilizzare gli esempi di riga di comando in questa guida, installa lo strumento a riga di comando`gcloud`.
- Se vuoi utilizzare gli esempi di API 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 serie di Google Cloud risorse. Per iniziare, crea separatamente i modelli che definiscono queste risorse. In un secondo momento, richiami questi modelli nella configurazione finale. La tua implementazione 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 arresta istanze frontend aggiuntive in base al traffico in entrata.
- Un controllo di integrità, che verifica se le istanze frontend sono disponibili per eseguire 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 anche disporre di un file di schema.
Copia il modello riportato di seguito o scaricalo dal repository GitHub:
Scarica il file dello schema per il modello.
Il modello ha alcune proprietà non definite, ad esempio containerImage
, che sono
definite nei modelli successivi.
Quando utilizzi immagini container sulle istanze Compute Engine, devi anche
fornire un file manifest che descriva quale immagine container utilizzare. Crea un metodo helper chiamato container_helper.py
per definire dinamicamente 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, supportato da uno strumento di scalabilità automatica e un bilanciatore del carico. Per creare modelli frontend, utilizza le seguenti istruzioni.
Crea una risorsa modello di istanza.
Per creare un gruppo di istanze gestite, che è un gruppo di istanze di macchine virtuali (VM) identiche che controlli come singola entità, è necessario un modello di istanza.
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 il resto delle risorse di 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'utilizzo 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 che contiene 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 unificato
Infine, crea un modello che combini i modelli di backend 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 si chiama env["deployment"]-frontend
e
che 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
Una volta pronti tutti i modelli, puoi creare una configurazione che verrà
utilizzata per il deployment delle risorse. Crea un file di configurazione denominato
nodejs.yaml
con i seguenti contenuti:
Sostituisci ZONE_TO_RUN
con la zona in cui vuoi le tue 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 []
Testare l'app
Per testare l'app, recupera innanzitutto 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
.
Poi, 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, come previsto. Dopodiché, pubblica un messaggio sulla 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 ora la pagina dovrebbe contenere il messaggio:
hellothere!
Ora hai un'app di cui è stato eseguito il deployment in grado di registrare i messaggi che le vengono inviati.
Passaggi successivi
Dopo aver completato questo esempio, puoi:
- Sviluppa questo esempio eseguendo il deployment di istanze con i tuoi container Docker. Se vuoi modificare i container Docker utilizzati in questo tutorial, modifica i Dockerfile nel repository GitHub.
- Vedi altri deployment di esempio nel repository GitHub di Deployment Manager.
- Scopri di più su modelli e deployment.