Websites zu betreiben kann sehr aufwendig sein, wenn Sie VM-Instanzen, Cluster, Pods, Dienste usw. erstellen und verwalten müssen. Bei größeren, mehrstufigen Anwendungen ist das angemessen. Wenn es aber nur darum geht, eine Website bereitzustellen und zugänglich zu machen, ist der Aufwand oft viel zu groß.
Mit Cloud Run, der Google Cloud-Implementierung von Knative, können Sie Ihre Website verwalten und bereitstellen, ohne den Aufwand für VM- oder Kubernetes-basierte Deployments bewältigen zu müssen. Dies ist nicht nur aus Verwaltungsperspektive ein einfacherer Ansatz, sondern bietet Ihnen auch die Möglichkeit, auf null zu skalieren, wenn keine Anfragen an Ihre Website eingehen.
Cloud Run ermöglicht nicht nur eine serverlose Entwicklung für Container, sondern kann auch entweder auf eigenen GKE-Clustern (Google Kubernetes Engine) oder in einer komplett verwalteten Lösung mit PaaS (Platform as a Service) ausgeführt werden. In diesem Codelab testen Sie das zweite Szenario.
Das folgende Diagramm veranschaulicht den Ablauf des Deployments und das Hosting von Cloud Run. Sie starten mit einem Docker-Image, das mithilfe von Cloud Build erstellt und von Cloud Shell ausgelöst wird. Anschließend stellen Sie dieses Image mit einem Cloud Shell-Befehl in Cloud Run bereit.

Vorbereitung
- Allgemeine Vertrautheit mit Docker (siehe Abschnitt Erste Schritte auf der Docker-Website)
Lerninhalte
- Docker-Image mit Cloud Build erstellen und auf gcr.io hochladen
- Docker-Images in Cloud Run bereitstellen
- Cloud Run-Deployments verwalten
- Endpunkt für eine Anwendung in Cloud Run einrichten
Aufgaben
- Eine statische Website, die in einem Docker-Container ausgeführt wird
- Eine Version dieses Containers in Container Registry
- Eine Cloud Run-Bereitstellung für Ihre statische Website
Voraussetzungen
- Ein Google-Konto mit Administratorzugriff zum Erstellen von Projekten oder eines Projekts mit der Rolle „Projektinhaber“
Einrichtung der Umgebung im eigenen Tempo
Wenn Sie noch kein Google-Konto haben, müssen Sie eines erstellen. Melden Sie sich dann in der Google Cloud Console an und klicken Sie auf Projekt > Projekt erstellen.


Merken Sie sich die Projekt-ID, die automatisch unter Ihrem Projektnamen eingefügt wird. Die Projekt-ID ist für alle Google Cloud-Projekte ein eindeutiger Name. Der Name im Screenshot ist also bereits vergeben und kann nicht verwendet werden. Sie wird später als PROJECT_ID bezeichnet.
Als Nächstes müssen Sie die Abrechnung in der Cloud Console aktivieren, um Google Cloud-Ressourcen zu verwenden und die Cloud Run API zu aktivieren.
Cloud Run API aktivieren
Klicken Sie auf das Navigationsmenü ☰> APIs & Dienste > Dashboard> APIs und Dienste aktivieren. .

Suchen Sie nach „Cloud Run API“ und klicken Sie dann auf Cloud Run API > Aktivieren.

Dieses Codelab sollte Sie nicht mehr als ein paar Dollar kosten, aber es könnte mehr sein, wenn Sie sich für mehr Ressourcen entscheiden oder wenn Sie sie laufen lassen (siehe Bereinigen am Ende). Weitere Informationen finden Sie unter Preise.
Neuen Nutzern der Google Cloud steht eine kostenlose Testversion mit einem Guthaben von 300$ zur Verfügung.
Cloud Shell
Während Sie Google Cloud und Cloud Run von Ihrem Laptop aus per Fernzugriff nutzen können, wird in diesem Lab Cloud Shell verwendet, eine Befehlszeilenumgebung, die in Google Cloud ausgeführt wird. Die Umgebung ist mit allen Clientbibliotheken und Frameworks vorkonfiguriert, die Sie benötigen.
Auf dieser Debian-basierten virtuellen Maschine sind alle erforderlichen Entwicklungstools installiert. Sie bietet ein Basisverzeichnis mit 5 GB nichtflüchtigem Speicher und läuft auf der Google Cloud, wodurch Netzwerkleistung und Authentifizierung deutlich verbessert werden. Für dieses Codelab benötigen Sie also nur einen Browser (es funktioniert auch auf einem Chromebook).
Klicken Sie zum Aktivieren von Google Cloud Shell einfach rechts oben in der Entwicklerkonsole auf die Schaltfläche. Das Bereitstellen und Herstellen einer Verbindung zur Umgebung dauert nur wenige Augenblicke:
Klicken Sie auf die Schaltfläche „Cloud Shell starten“:
Sobald Sie mit der Cloud Shell verbunden sind, sollten Sie sehen, dass Sie bereits authentifiziert sind und das Projekt bereits auf Ihre PROJECT_ID eingestellt ist :
gcloud auth list
Befehlsausgabe
Credentialed accounts: - <myaccount>@<mydomain>.com (active)
gcloud config list project
Befehlsausgabe
[core] project = <PROJECT_ID>
In Cloud Shell werden auch einige Umgebungsvariablen standardmäßig festgelegt, die beim Ausführen zukünftiger Befehle nützlich sein können.
echo $GOOGLE_CLOUD_PROJECT
Befehlsausgabe
<PROJECT_ID>
Wenn das Projekt aus irgendeinem Grund nicht festgelegt ist, geben Sie einfach den folgenden Befehl ein :
gcloud config set project <PROJECT_ID>
Suchst du nach deinem PROJECT_ID? Prüfen Sie, welche ID Sie in den Einrichtungsschritten verwendet haben, oder suchen Sie sie im Konsolen-Dashboard:
WICHTIG: Legen Sie abschließend die Standardzone und die Projektkonfiguration fest:
gcloud config set compute/zone us-central1-f
Sie können verschiedene Zonen auswählen. Weitere Informationen finden Sie in der Dokumentation zu Regionen und Zonen.
Da Sie eine vorhandene Website bereitstellen, müssen Sie nur die Quelle aus Ihrem Repository klonen. Dann können Sie sich darauf konzentrieren, Docker-Images zu erstellen und in Cloud Run bereitzustellen.
Führen Sie die folgenden Befehle aus, um das Repository in Ihre Cloud Shell-Instanz zu klonen und in das entsprechende Verzeichnis zu wechseln. Sie installieren auch die Node.js-Abhängigkeiten, damit Sie die App vor der Bereitstellung testen können.
cd ~ git clone https://github.com/googlecodelabs/monolith-to-microservices.git cd ~/monolith-to-microservices ./setup.sh
Dadurch wird Ihr Repository geklont, in das Verzeichnis gewechselt und die zum lokalen Ausführen Ihrer App erforderlichen Abhängigkeiten werden installiert. Es kann einige Minuten dauern, bis das Skript ausgeführt wird.
Testen Sie Ihre App. Führen Sie den folgenden Befehl aus, um den Webserver zu starten:
cd ~/monolith-to-microservices/monolith npm start
Ausgabe:
Monolith listening on port 8080!
Sie können eine Vorschau Ihrer App aufrufen, indem Sie auf Webvorschau
klicken und Vorschau auf Port 8080 auswählen.

Dadurch wird ein neues Fenster geöffnet, in dem Sie den Fancy Store in Aktion sehen können.

Sie können dieses Fenster schließen, nachdem Sie sich die Website angesehen haben. Drücken Sie im Terminalfenster CONTROL+C (Command+C auf Macintosh), um den Webserverprozess zu beenden.
Nachdem jetzt die Quelldateien zur Verfügung stehen, kann im nächsten Schritt der Docker-Container für Ihre Anwendung erstellt werden.
Normalerweise sind dafür zwei Schritte erforderlich. Zuerst muss ein Docker-Container erstellt und dann per Push in eine Registry übertragen werden, damit GKE das Image abrufen kann. Sie können diesen Vorgang jedoch vereinfachen und mit einem einzigen Befehl den Docker-Container mit Cloud Build erstellen sowie das Image in Container Registry platzieren. Wie Sie ein Dockerfile manuell erstellen und übertragen, können Sie in der Kurzanleitung für Container Registry nachlesen.
Cloud Build komprimiert die Dateien aus dem Verzeichnis und verschiebt sie in einen Cloud Storage-Bucket. Beim Build-Prozess werden dann alle Dateien aus dem Bucket übernommen und das Docker-Image wird mit dem Dockerfile im selben Verzeichnis erstellt. Da Sie für den Host das Flag --tag als gcr.io für das Docker-Image angegeben haben, wird das fertige Docker-Image per Push nach Container Registry übertragen.
Als Erstes müssen Sie die Cloud Build API aktivieren. Führen Sie dazu folgenden Befehl aus:
gcloud services enable cloudbuild.googleapis.com
Wenn die API aktiviert ist, geben Sie folgenden Befehl in Cloud Shell ein, um den Build-Prozess zu starten:
gcloud builds submit --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0 .Dieser Vorgang dauert einige Minuten. Nach Abschluss ist im Terminal in etwa folgende Ausgabe zu sehen:
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ID CREATE_TIME DURATION SOURCE IMAGES STATUS 1ae295d9-63cb-482c-959b-bc52e9644d53 2019-08-29T01:56:35+00:00 33S gs://<PROJECT_ID>_cloudbuild/source/1567043793.94-abfd382011724422bf49af1558b894aa.tgz gcr.io/<PROJECT_ID>/monolith:1.0.0 SUCCESS
Wenn Sie den Build-Verlauf aufrufen oder den Prozess in Echtzeit beobachten möchten, rufen Sie die Cloud Console auf und klicken Sie auf das Navigationsmenü ☰> Cloud Build > Verlauf. Dort sehen Sie eine Liste aller bisherigen Builds. In diesem Fall sollte nur der von Ihnen erstellte Build zu sehen sein.

Wenn Sie auf die Build-ID klicken, werden alle Details zu diesem Build angezeigt, einschließlich der Logausgabe. Sie können das erstellte Container-Image aufrufen, indem Sie auf den Link neben Image klicken.

Nachdem Sie für Ihre Website einen Container erstellt und per Push nach Container Registry übertragen haben, soll dieser nun in Cloud Run bereitgestellt werden.
Dazu haben Sie zwei Möglichkeiten:
- Cloud Run (vollständig verwaltet) ist das PaaS-Modell, bei dem der gesamte Lebenszyklus eines Containers verwaltet wird. Diesen Ansatz verwenden Sie in diesem Codelab.
- Cloud Run for Anthos ist Cloud Run mit einer zusätzlichen Steuerungsebene, mit der eigene Cluster und Pods aus GKE verwendet werden können. Weitere Informationen finden Sie unter Cloud Run for Anthos in Google Cloud einrichten.
Die Befehlszeilenbeispiele werden in Cloud Shell mit den Umgebungsvariablen ausgeführt, die Sie zuvor eingerichtet haben.
Befehlszeile
Stellen Sie die Anwendung mit dem folgenden Befehl bereit:
gcloud run deploy --image=gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0 --platform managed Sie werden aufgefordert, die Region anzugeben, in der sie ausgeführt werden soll. Wählen Sie die Region aus, die Ihnen am nächsten ist, und übernehmen Sie dann den vorgeschlagenen Standarddienstnamen „monolith“.

Lassen Sie für Testzwecke nicht authentifizierte Anfragen an die App zu. Geben Sie an der Eingabeaufforderung y ein.

Deployment prüfen
Führen Sie den folgenden Befehl aus, um zu prüfen, ob das Deployment erfolgreich erstellt wurde. Es kann einige Momente dauern, bis Pod status Running ist:
gcloud run services list
Wählen Sie [1] Cloud Run (vollständig verwaltet) aus.
Ausgabe:
SERVICE REGION URL LAST DEPLOYED BY LAST DEPLOYED AT ✔ monolith us-east1 <your url> <your email> 2019-09-16T21:07:38.267Z
Die Ausgabe zeigt Folgendes: Sie sehen das Deployment, den Nutzer, der es bereitgestellt hat (Ihre E-Mail-Adresse), und die URL für den Zugriff auf die App. Es wurde also alles erstellt.
Öffnen Sie die in der Liste der Dienste angegebene URL in Ihrem Webbrowser. Es sollte dieselbe Website angezeigt werden, deren Vorschau Sie lokal aufgerufen haben.
Stellen Sie Ihre App jetzt noch einmal bereit, ändern Sie aber einen der Parameter.
Standardmäßig hat eine Cloud Run-Anwendung einen Gleichzeitigkeitswert von 80. Das bedeutet, dass jede Containerinstanz bis zu 80 Anfragen gleichzeitig verarbeiten kann. Dies ist gegenüber dem Functions-as-a-Service-Modell (FaaS), bei dem sich immer nur eine einzige Anfrage verarbeiten lässt, ein enormer Fortschritt.
Test: Stellen Sie dasselbe Container-Image mit einem Gleichzeitigkeitswert von 1 noch einmal bereit und sehen Sie sich das Ergebnis an.
gcloud run deploy --image=gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0 --platform managed --concurrency 1Beantworten Sie die nachfolgenden Fragen wie beim ersten Mal. Wenn der Befehl ausgeführt wurde, können Sie sich das Ergebnis in der Cloud Console ansehen.
Klicken Sie im Cloud Run-Dashboard auf den Dienst monolith, um die Details aufzurufen.

Klicken Sie auf den Tab Überarbeitungen. Es sollten nun zwei erstellte Überarbeitungen zu sehen sein. Klicken Sie auf monolith-00002 und sehen Sie sich die Details an. Der Gleichzeitigkeitswert sollte auf 1 reduziert sein.
]

Diese Konfiguration reicht für Testzwecke aus. In den meisten Produktionsszenarien werden aber Container benötigt, die mehrere Anfragen gleichzeitig unterstützen.
Stellen Sie nun den ursprünglichen Gleichzeitigkeitswert ohne neues Deployment wieder her. Sie können den Gleichzeitigkeitswert auf den Standardwert 80 oder auf 0 setzen. Mit 0 wird die Beschränkung der Gleichzeitigkeit aufgehoben und automatisch der standardmäßige Höchstwert (also 80) festgelegt.
Führen Sie den folgenden Befehl in Cloud Shell aus, um die aktuelle Revision zu aktualisieren:
gcloud run deploy --image=gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0 --platform managed --concurrency 80Es wurde nun eine weitere Überarbeitung erstellt. Der Traffic wurde umgeleitet und für die Gleichzeitigkeit gilt wieder der Wert 80.
Ihr Marketingteam hat Sie gebeten, die Startseite der Website Ihres Unternehmens zu ändern. Sie sollte mehr Informationen über das Unternehmen selbst und dessen Produkte enthalten. In diesem Abschnitt fügen Sie der Startseite neuen Text hinzu, um dem Wunsch des Marketingteams nachzukommen.
Offenbar hat einer Ihrer Entwickler die Änderungen bereits unter dem Dateinamen index.js.new erstellt. Kopieren Sie diese Datei einfach nach index.js. Die Änderungen sollten dann zu sehen sein. Folgen Sie der Anleitung, um die entsprechenden Änderungen vorzunehmen.
Führen Sie die folgenden Befehle aus, um die aktualisierte Datei in den korrekten Dateinamen zu kopieren, und rufen Sie dann deren Inhalt auf, um die Änderungen zu prüfen:
cd ~/monolith-to-microservices/react-app/src/pages/Home mv index.js.new index.js cat ~/monolith-to-microservices/react-app/src/pages/Home/index.js
Der Code sollte dann in etwa so aussehen:
/*
Copyright 2019 Google LLC
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
import React from "react";
import { makeStyles } from "@material-ui/core/styles";
import Paper from "@material-ui/core/Paper";
import Typography from "@material-ui/core/Typography";
const useStyles = makeStyles(theme => ({
root: {
flexGrow: 1
},
paper: {
width: "800px",
margin: "0 auto",
padding: theme.spacing(3, 2)
}
}));
export default function Home() {
const classes = useStyles();
return (
<div className={classes.root}>
<Paper className={classes.paper}>
<Typography variant="h5">
Fancy Fashion & Style Online
</Typography>
<br />
<Typography variant="body1">
Tired of mainstream fashion ideas, popular trends and societal norms?
This line of lifestyle products will help you catch up with the Fancy trend and express your personal style.
Start shopping Fancy items now!
</Typography>
</Paper>
</div>
);
}Sie haben die React-Komponenten aktualisiert, müssen aber noch die React-Anwendung erstellen, um die statischen Dateien zu generieren. Führen Sie den folgenden Befehl aus, um die React-Anwendung zu erstellen und in das öffentliche monolith-Verzeichnis zu kopieren:
cd ~/monolith-to-microservices/react-app npm run build:monolith
Nachdem der Code aktualisiert wurde, müssen Sie den Docker-Container neu erstellen und in Container Registry veröffentlichen. Sie können dazu den gleichen Befehl wie zuvor verwenden. Nur das Versionslabel muss geändert werden.
Führen Sie den folgenden Befehl aus, um ein neues Cloud Build mit der aktualisierten Image-Version 2.0.0 auszulösen:
cd ~/monolith-to-microservices/monolith
#Feel free to test your application
npm start
gcloud builds submit --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:2.0.0 .Im nächsten Abschnitt verwenden Sie dieses Image, um Ihre App ohne Ausfallzeit zu aktualisieren.
Die Änderungen wurden durchgeführt und das Marketingteam ist mit dem Ergebnis sehr zufrieden. Nun soll die Website ohne Unterbrechung für die Nutzer aktualisiert werden.
Cloud Run behandelt jedes Deployment als neue Überarbeitung, die online gestellt wird, bevor Traffic zum Deployment weitergeleitet wird.
Folgen Sie der Anleitung unten, um Ihre Website zu aktualisieren.
Befehlszeile
In der Befehlszeile können Sie den Dienst noch einmal bereitstellen, um das Image mit dem folgenden Befehl auf eine neue Version zu aktualisieren:
gcloud run deploy --image=gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:2.0.0 --platform managedDeployment prüfen
Prüfen Sie das aktualisierte Deployment mit dem folgenden Befehl:
gcloud run services describe monolith --platform managed
Sie erhalten folgende Ausgabe:
apiVersion: serving.knative.dev/v1alpha1
kind: Service
metadata:
annotations:
client.knative.dev/user-image: gcr.io/my-cloudrun-codelab/monolith:2.0.0
...
Sie können darin erkennen, dass der Dienst nun die neueste Version Ihres Images verwendet, die in einer neuen Überarbeitung bereitgestellt wurde.
Um die Änderungen zu prüfen, rufen Sie noch einmal die externe URL Ihres Cloud Run-Dienstes auf. Sie sehen dann, dass der Titel Ihrer App geändert wurde.
Führen Sie den folgenden Befehl aus, um die Dienste aufzulisten und die IP-Adresse aufzurufen, falls Sie sie vergessen haben:
gcloud run services list
Auf Ihrer Website sollte nun der Text dargestellt sein, den Sie der Startseite hinzugefügt haben.

Container Registry-Images löschen
# Delete the container image for version 1.0.0 of our monolith
gcloud container images delete gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0 --quiet
# Delete the container image for version 2.0.0 of our monolith
gcloud container images delete gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:2.0.0 --quietCloud Build-Artefakte aus Cloud Storage löschen
# The following command will take all source archives from all builds and delete them from cloud storage
# Run this command to print all sources:
# gcloud builds list | awk 'NR > 1 {print $4}'
gcloud builds list | awk 'NR > 1 {print $4}' | while read line; do gsutil rm $line; doneCloud Run-Dienst löschen
gcloud run services delete monolith --platform managed
Sie haben Ihre Website mit Cloud Run bereitgestellt, skaliert und aktualisiert.