In dieser Anleitung stellen Sie eine Beispiel-Logbook-Anwendung bereit, die Node.js für das Frontend und MySQL als Backend verwendet. Am Ende der Anleitung umfasst Ihre Bereitstellung folgende Ressourcen:
Wenn Sie Deployment Manager noch nicht kennen, finden Sie entsprechende Informationen in der Kurzanleitung oder in den detaillierten Anleitungen.
Hinweis
- Wenn Sie die Befehlszeilenbeispiele in dieser Anleitung verwenden möchten, installieren Sie das gcloud-Befehlszeilentool.
- Wenn Sie die API-Beispiele in dieser Anleitung verwenden möchten, richten Sie den API-Zugriff ein.
- Lesen Sie sich die Übersicht über das Compute Engine-Netzwerk-Load-Balancing durch.
- Lesen Sie sich die Übersicht über Docker-Container durch.
Ressourcenvorlagen erstellen
In diesem Beispiel wird eine Bereitstellung begonnen, die unterschiedliche Google Cloud-Ressourcen enthält. Zuerst erstellen Sie Vorlagen, in denen diese Ressourcen getrennt definiert werden. Später rufen Sie diese Vorlagen in Ihrer endgültigen Konfiguration auf. Ihre Bereitstellung enthält folgende Ressourcen:
- Eine Compute Engine-Instanz, die eine MySQL-Datenbank für die Anwendung hostet
- Eine Instanzvorlage für Frontend-Instanzen, die ein Docker-Image für die Node.js-Anwendung verwendet
- Eine verwaltete Instanzgruppe, in der mit der Instanzvorlage zwei Frontend-Instanzen erstellt werden
- Ein Autoscaling, das auf der Basis des eingehenden Traffics zusätzliche Frontend-Instanzen startet oder beendet
- Eine Systemdiagnose, die prüft, ob die Frontend-Instanzen verfügbar und funktionsfähig sind
- Ein Netzwerk-Load-Balancer mit einer Weiterleitungsregel
- Ein Zielpool für die verwaltete Instanzgruppe
Vorlage für das MySQL-Back-End erstellen
Das Back-End dieser Anwendung ist eine einzelne Compute Engine-Instanz, auf der ein MySQL Docker-Container ausgeführt wird. Die Vorlage container_vm.py
definiert eine Compute Engine-Instanz, die Docker-Container ausführen kann. Um zu gewährleisten, dass die Vorlage die korrekte Struktur aufweist und alle erforderlichen Attribute enthält, benötigen Sie außerdem eine Schemadatei.
Kopieren Sie die Vorlage unten oder laden Sie sie aus dem GitHub-Repository herunter:
Schemadatei für die Vorlage herunterladen
Die Vorlage enthält einige nicht definierte Attribute wie containerImage
. Diese sind in späteren Vorlagen definiert.
Wenn Sie Container-Images auf Compute Engine-Instanzen verwenden, müssen Sie außerdem eine Manifestdatei zur Verfügung stellen. In dieser wird angegeben, welches Container-Image zu verwenden ist. Erstellen Sie eine Hilfsmethode mit dem Namen container_helper.py
, um das Container-Manifest dynamisch zu definieren:
Vorlage für das Node.js-Front-End erstellen
Das Front-End der Anwendung führt Node.js aus und ermöglicht Nutzern, Nachrichten auf der Webseite zu posten. Die Ausführung des Front-Ends erfolgt auf einer Gruppe von virtuellen Maschinen, die durch Autoscaling und einen Load-Balancer unterstützt werden. Folgen Sie der Anleitung unten, um Front-End-Vorlagen zu erstellen.
Erstellen Sie eine Instanzvorlagenressource.
Sie benötigen eine Instanzvorlage, um eine verwaltete Instanzgruppe zu erstellen. Hierbei handelt es sich um eine Gruppe identischer VM-Instanzen, die Sie als eine einzelne Entität steuern.
Erstellen Sie eine Datei mit dem Namen
container_instance_template.py
und laden Sie das Schema für die Vorlage herunter:Erstellen Sie Autoscaling, eine verwaltete Instanzgruppe und einen Load-Balancer.
Erstellen Sie als Nächstes eine andere Vorlage, die die Vorlage
container_instance_template.py
verwendet und die restlichen Front-End-Ressourcen, einschließlich Autoscaling, Load Balancer und verwalteter Instanzgruppe, erstellt.
Diese Vorlage enthält folgende Ressourcen:
Eine Instanzvorlage mit der Vorlage
container_instance_template.py
.Eine verwaltete Instanzgruppe, die die Instanzvorlage verwendet, und ein Autoscaling, das die verwaltete Instanzgruppe referenziert. Mithilfe von Verweisen kann festgelegt werden, dass Deployment Manager die Ressourcen in einer bestimmten Reihenfolge erstellt. In diesem Fall wird die verwaltete Instanzgruppe vor dem Autoscaling angelegt.
Ein Netzwerk-Load-Balancer, der folgende Ressourcen enthält:
- Eine Weiterleitungsregel mit einer einzelnen externen IP-Adresse, die für das Internet freigegeben ist
- Einen Zielpool, der die verwaltete Instanzgruppe enthält, die Sie erstellt haben
- Eine Systemdiagnose zur Verbindung mit dem Zielpool
Erstellen Sie eine Datei mit dem Namen frontend.py
und laden Sie das Schema für die Vorlage herunter:
Schemadatei für die Vorlage herunterladen
Einheitliche Vorlage erstellen
Erstellen Sie schließlich eine Vorlage zur Kombination der Backend- und Frontend-Vorlagen. Erstellen Sie eine Datei mit dem Namen nodejs.py
und folgendem Inhalt:
Schemadatei für die Vorlage herunterladen
Beachten Sie, dass das Frontend der Anwendung den Namen env["deployment"]-frontend
hat. Das Backend hat einen ähnlichen Namen. Wenn Sie die Anwendung bereitstellen, wird env["deployment"]
von Deployment Manager automatisch durch den Bereitstellungsnamen ersetzt.
Konfiguration erstellen
Nachdem Sie mit allen Vorlagen fertig sind, können Sie eine Konfiguration erstellen, um Ihre Ressourcen bereitzustellen. Erstellen Sie eine Konfigurationsdatei mit dem Namen nodejs.yaml
und folgendem Inhalt:
Ersetzen Sie ZONE_TO_RUN
durch die Zone, in der Sie die Ressourcen verwenden möchten, z. B. us-central1-a
.
Ressourcen bereitstellen
Stellen Sie jetzt Ihre Ressourcen bereit. Führen Sie über die Google Cloud CLI folgenden Befehl aus:
gcloud deployment-manager deployments create advanced-configuration --config nodejs.yaml
Wenn das Deployment abgeschlossen ist, zeigt der Deployment Manager eine Zusammenfassung der erstellten Ressourcen an, die etwa folgendermaßen aussieht:
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 []
Anwendung testen
Um Ihre Anwendung zu testen, ermitteln Sie zuerst die externe IP-Adresse, die den Traffic weiterleitet. Fragen Sie dazu folgende Weiterleitungsregel ab:
$ 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 diesem Fall lautet die externe IP 104.154.81.44
.
Rufen Sie dann in einem Browser die externe IP-Adresse mit Port 8080 auf. Wenn beispielsweise Ihre externe IP 104.154.81.44
ist, lautet die URL:
http://104.154.81.44:8080
Es sollte eine leere Seite angezeigt werden. Posten Sie dann eine Nachricht auf der Seite. Wechseln Sie zur folgenden URL:
http://104.154.81.44:8080?msg=hellothere!
Es wird bestätigt, dass Ihre Nachricht hinzugefügt wurde. Gehen Sie zurück zur Haupt-URL. Die Seite sollte jetzt folgende Meldung enthalten:
hellothere!
Sie haben jetzt eine bereitgestellte Anwendung, die an sie gesendete Nachrichten protokollieren kann.
Tipp
Wenn Sie mit diesem Beispiel fertig sind, haben Sie folgende Möglichkeiten:
- Auf der Basis dieses Beispiels können Sie Instanzen mit eigenen Docker-Containern bereitstellen. Wenn Sie die in dieser Anleitung verwendeten Docker-Container ändern möchten, bearbeiten Sie die Dockerfiles im GitHub-Repository entsprechend.
- Weitere Beispiel-Deployments finden Sie im GitHub-Repository von Deployment Manager.
- Informationen zu Vorlagen und Bereitstellungen