Stellen Sie eine Website mit Cloud Run bereit

Das Ausführen von Websites kann schwierig sein, da der Aufwand für das Erstellen und Verwalten von Instanzen, Clustern, Pods, Diensten und mehr für virtuelle Maschinen (VMs) hoch ist. Das ist in Ordnung für größere, mehrstufige Apps, aber wenn Sie nur versuchen, Ihre Website bereitzustellen und sichtbar zu machen, ist dies ein großer Aufwand.

Mit Cloud Run, der Google Cloud-Implementierung von Knative , können Sie Ihre Website ohne den Aufwand verwalten und bereitstellen, den Sie für VM- oder Kubernetes-basierte Bereitstellungen benötigen. Dies ist nicht nur aus Managementsicht ein einfacherer Ansatz, sondern bietet Ihnen auch die Möglichkeit, auf Null zu skalieren, wenn keine Anforderungen auf Ihre Website eingehen.

Cloud Run bringt nicht nur serverlose Entwicklung in Container, sondern kann auch entweder auf Ihren eigenen Google Kubernetes Engine (GKE) -Clustern oder auf einer vollständig verwalteten Plattform als Service (PaaS) -Lösung von Cloud Run ausgeführt werden. Sie werden das letztere Szenario in diesem Codelab testen.

Das folgende Diagramm zeigt den Ablauf der Bereitstellung und des Cloud Run-Hostings. Sie beginnen mit einem Docker-Image, das über Cloud Build erstellt wurde und das Sie in Cloud Shell auslösen. Anschließend stellen Sie dieses Image mit einem Befehl in Cloud Shell für Cloud Run bereit.

db5f05c090d5ebcb.png

Voraussetzungen

Was du lernen wirst

  • So erstellen Sie ein Docker-Image mit Cloud Build und laden es auf gcr.io hoch
  • So stellen Sie Docker-Images für Cloud Run bereit
  • So verwalten Sie Cloud Run-Bereitstellungen
  • So richten Sie einen Endpunkt für eine App in Cloud Run ein

Was du bauen wirst

  • Eine statische Website, die in einem Docker-Container ausgeführt wird
  • Eine Version dieses Containers, die sich in der Containerregistrierung befindet
  • Eine Cloud Run-Bereitstellung für Ihre statische Website

Was du brauchen wirst

  • Ein Google-Konto mit Administratorzugriff zum Erstellen von Projekten oder ein Projekt mit Projektbesitzerrolle

Einrichtung einer Umgebung im eigenen Tempo

Wenn Sie noch kein Google-Konto haben, müssen Sie eines erstellen . Melden Sie sich dann bei der Google Cloud Console an und klicken Sie auf Projekt > Projekt erstellen .

53dad2cefdae71da.png

faab21976aabeb4c.png

Merken Sie sich die Projekt-ID, die automatisch unter Ihrem Projektnamen eingetragen wird. Die Projekt-ID ist ein eindeutiger Name für alle Google Cloud-Projekte. Der Name im Screenshot wurde bereits erstellt und funktioniert für Sie nicht. Es wird später als PROJECT_ID .

Als Nächstes müssen Sie die Abrechnung in der Cloud-Konsole aktivieren , um Google Cloud-Ressourcen verwenden und die Cloud-Ausführungs-API aktivieren zu können.

Aktivieren Sie die Cloud Run-API

Klicken Sie auf das Navigationsmenü ☰ > APIs & Services > Dashboard > APIs und Services aktivieren . .

5dbb2e6e27a55fcf.png

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

f1fd486174a744cf.png

Das Durchlaufen dieses Codelabs sollte Sie nicht mehr als ein paar Dollar kosten, aber es könnte mehr sein, wenn Sie sich entscheiden, mehr Ressourcen zu verwenden, oder wenn Sie sie laufen lassen (siehe Aufräumen am Ende). Weitere Informationen finden Sie unter Preise .

Neue Nutzer von Google Cloud haben Anspruch auf eine kostenlose Testversion im Wert von 300 US-Dollar .

Cloud Shell

Während Google Cloud und Cloud Run von Ihrem Laptop aus fernbedient werden können, verwenden Sie Cloud Shell , eine Befehlszeilenumgebung, die in Google Cloud ausgeführt wird. Die Umgebung ist mit allen Client-Bibliotheken und Frameworks vorkonfiguriert, die Sie benötigen.

Diese Debian-basierte virtuelle Maschine ist mit allen Entwicklungswerkzeugen ausgestattet, die Sie benötigen. Es bietet ein dauerhaftes 5-GB-Home-Verzeichnis und wird in Google Cloud ausgeführt, wodurch die Netzwerkleistung und -authentifizierung erheblich verbessert werden. Dies bedeutet, dass Sie für dieses Codelab nur einen Browser benötigen (ja, es funktioniert auf einem Chromebook).

  1. Um die Cloud Shell über die Cloud-Konsole zu aktivieren, klicken Sie einfach auf Cloud Shell aktivieren fEbHefbRynwXpq1vj2wJw6Dr17O0np8l-WOekxAZYlZQIORsWQE_xJl-cNhogjATLn-YxLVz8CgLvIW1Ncc0yXKJsfzJGMYgUeLsVb7z4t2Bf (Die Bereitstellung und Verbindung mit der Umgebung sollte nur wenige Augenblicke dauern.)

I5aEsuNurCxHoDFjZRZrKBdarPPKPoKuExYpdagmdaOLKe7eig3DAKJitIKyuOpuwmrMAyZhp5AXpmD_k66cBuc1aUnWlJeSfo_aTKPY9aNMurJfNg1

Screenshot 2017-06-14 um 10.13.43 PM.png

Sobald Sie eine Verbindung zu Cloud Shell hergestellt haben, sollten Sie PROJECT_ID dass Sie bereits authentifiziert sind und das Projekt bereits auf Ihre PROJECT_ID .

gcloud auth list

Befehlsausgabe

Credentialed accounts:
 - <myaccount>@<mydomain>.com (active)
gcloud config list project

Befehlsausgabe

[core]
project = <PROJECT_ID>

Wenn das Projekt aus irgendeinem Grund nicht festgelegt ist, geben Sie einfach den folgenden Befehl ein:

gcloud config set project <PROJECT_ID>

Suchen Sie Ihre PROJECT_ID ? Überprüfen Sie, welche ID Sie in den Einrichtungsschritten verwendet haben, oder suchen Sie sie im Cloud Console-Dashboard nach:

R.

Cloud Shell legt standardmäßig auch einige Umgebungsvariablen fest, die beim Ausführen zukünftiger Befehle hilfreich sein können.

echo $GOOGLE_CLOUD_PROJECT

Befehlsausgabe

<PROJECT_ID>
  1. 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 unter Regionen und Zonen .

Da Sie eine vorhandene Website bereitstellen, müssen Sie nur die Quelle aus Ihrem Repository klonen, damit Sie sich auf die Erstellung von Docker-Images und die Bereitstellung in Cloud Run konzentrieren können.

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 Ihre 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, das Verzeichnis geändert und die Abhängigkeiten installiert, die zum lokalen Ausführen Ihrer App erforderlich sind. Es kann einige Minuten dauern, bis das Skript ausgeführt wird.

Führen Sie Ihre Due Diligence durch und testen Sie Ihre App. Führen Sie den folgenden Befehl aus, um Ihren Webserver zu starten:

cd ~/monolith-to-microservices/monolith
npm start

Ausgabe:

Monolith listening on port 8080!

Sie können eine Vorschau Ihrer App anzeigen, indem Sie auf Webvorschau klicken acc630712255c604.png und wählen Sie Vorschau an Port 8080 .

5869738f0e9ec386.png

Das öffnet ein neues Fenster, in dem Sie Ihren Fancy Store in Aktion sehen können!

9ed25c3f0cbe62fa.png

Sie können dieses Fenster schließen, nachdem Sie die Website angezeigt haben. Um den Webserver-Prozess zu stoppen, drücken Sie im Terminalfenster CONTROL+C ( Command+C auf dem Macintosh).

Jetzt, da Ihre Quelldateien einsatzbereit sind, ist es Zeit, Ihre App anzudocken!

Normalerweise müssen Sie einen zweistufigen Ansatz wählen, bei dem ein Docker-Container erstellt und in eine Registrierung verschoben wird, um das Image zu speichern, aus dem GKE es abrufen kann. Sie können das Leben jedoch vereinfachen, indem Sie mit Cloud Build den Docker-Container erstellen und das Image mit einem einzigen Befehl in die Container-Registrierung einfügen! Informationen zum manuellen Erstellen und Verschieben einer Docker-Datei finden Sie unter Schnellstart für die Containerregistrierung .

Cloud Build komprimiert die Dateien aus dem Verzeichnis und verschiebt sie in einen Cloud Storage-Bucket. Der Erstellungsprozess nimmt dann alle Dateien aus dem Bucket und verwendet die Docker-Datei, die sich im selben Verzeichnis befindet, um den Docker-Erstellungsprozess auszuführen. Wenn Sie das Flag --tag mit dem Host als gcr.io für das Docker-Image angegeben haben, wird das resultierende Docker-Image in die Container-Registrierung verschoben.

Zunächst müssen Sie sicherstellen, dass die Cloud Build-API aktiviert ist. Führen Sie den folgenden Befehl aus, um ihn zu aktivieren:

gcloud services enable cloudbuild.googleapis.com

Führen Sie nach der Aktivierung der API den folgenden Befehl in der Cloud Shell aus, um den Erstellungsprozess zu starten:

gcloud builds submit --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0 .

Dieser Vorgang dauert einige Minuten, aber nachdem er abgeschlossen ist, wird im Terminal eine Ausgabe ähnlich der folgenden ausgegeben:

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
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

Um Ihren Build-Verlauf anzuzeigen oder den Prozess in Echtzeit zu verfolgen , können Sie zur Cloud-Konsole gehen und dann auf Navigationsmenü ☰ > Cloud-Build > Verlauf klicken. Dort können Sie eine Liste aller Ihrer vorherigen Builds sehen, aber es sollte nur die geben, die Sie erstellt haben.

4c753ede203255f6.png

Wenn Sie auf die Build-ID klicken, werden alle Details für diesen Build angezeigt , einschließlich der Protokollausgabe. Sie können das erstellte Containerbild anzeigen, indem Sie auf den Link neben Bild klicken.

6e88ed1643dfe629.png

Nachdem Sie Ihre Website containerisiert und in die Containerregistrierung verschoben haben, ist es Zeit, sie für Cloud Run bereitzustellen!

Es gibt zwei Ansätze für die Bereitstellung in Cloud Run:

  • Cloud Run (vollständig verwaltet) ist das PaaS-Modell, bei dem der gesamte Containerlebenszyklus verwaltet wird. Sie werden diesen Ansatz für dieses Codelab verwenden.
  • Cloud Run für Anthos ist Cloud Run mit einer zusätzlichen Steuerungsebene, mit der Sie Ihre Cluster und Pods von GKE holen können. Weitere Informationen finden Sie unter Einrichten von Cloud Run für Anthos in Google Cloud .

Befehlszeilenbeispiele befinden sich in der Cloud Shell unter Verwendung der zuvor eingerichteten Umgebungsvariablen.

Befehlszeile

Führen Sie den folgenden Befehl aus, um Ihre App bereitzustellen:

gcloud run deploy --image=gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0 --platform managed 

Sie werden aufgefordert anzugeben, in welcher Region Sie ausgeführt werden möchten. Wählen Sie die Region aus, die Ihnen am nächsten liegt, und akzeptieren Sie den vorgeschlagenen Standarddienstnamen (Monolith).

d52d9419c5166674.png

Erlauben Sie zu Testzwecken nicht authentifizierte Anforderungen an die App. Geben Sie an der Eingabeaufforderung y .

3a57b32f133dad61.png

Überprüfen Sie die Bereitstellung

Führen Sie den folgenden Befehl aus, um zu überprüfen, ob die Bereitstellung erfolgreich erstellt wurde. Es kann einige Zeit dauern , bis der Pod status - Running Pod status sein Running :

gcloud run services list

Wählen Sie [1] Cloud Run (vollständig verwaltet).

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 Ihnen verschiedene Dinge. Sie können Ihre Bereitstellung sowie den Benutzer, der sie bereitgestellt hat (Ihre E-Mail-Adresse) und die URL anzeigen, über die Sie auf die App zugreifen können. Sieht so aus, als wäre alles erfolgreich erstellt worden!

Öffnen Sie die in der Liste der Dienste in Ihrem Webbrowser angegebene URL, und Sie sollten dieselbe Website sehen, die Sie lokal in der Vorschau angezeigt haben.

Stellen Sie Ihre App jetzt erneut bereit, aber passen Sie diesmal einen der Parameter an.

Standardmäßig hat eine Cloud Run-App einen Parallelitätswert von 80, was bedeutet, dass jede Containerinstanz bis zu 80 Anforderungen gleichzeitig bearbeitet. Dies ist eine große Abweichung von den FaaS-Modellen (Functions as a Service), bei denen jeweils eine Instanz eine Anforderung bearbeitet.

Stellen Sie dasselbe Container-Image mit einem Parallelitätswert von 1 erneut bereit (nur zu Testzwecken) und sehen Sie, was passiert.

gcloud run deploy --image=gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0 --platform managed --concurrency 1

Beantworten Sie die nachfolgenden Fragen wie beim ersten Mal. Wenn der Befehl erfolgreich ist, überprüfen Sie die Cloud-Konsole, um das Ergebnis anzuzeigen.

Klicken Sie im Cloud Run-Dashboard auf den Monolith- Dienst, um die Details anzuzeigen.

7d1eed2e4728a4f2.png

Klicken Sie auf die Registerkarte Revisionen . Es sollten zwei Revisionen erstellt werden. Klicken Sie auf monolith-00002 und überprüfen Sie die Details. Der Wert für die Parallelität sollte auf 1 reduziert werden.

217185c0eccc87dd.png ]]

4ad481b8bcd0343d.png

Obwohl diese Konfiguration zum Testen ausreicht, verfügen Sie in den meisten Produktionsszenarien über Container, die mehrere gleichzeitige Anforderungen unterstützen.

Stellen Sie jetzt die ursprüngliche Parallelität wieder her, ohne sie erneut bereitzustellen. Sie können den Parallelitätswert auf den Standardwert 80 oder 0 setzen, wodurch alle Parallelitätsbeschränkungen aufgehoben und auf den Standardmaximumwert gesetzt werden (der zum Zeitpunkt dieses Schreibens zufällig 80 beträgt).

Führen Sie den folgenden Befehl in Cloud Shell aus, um die aktuelle Version zu aktualisieren:

gcloud run deploy --image=gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0 --platform managed --concurrency 80

Beachten Sie, dass eine weitere Revision erstellt wurde, dass der Datenverkehr umgeleitet wurde und dass die Parallelität wieder auf 80 zurückgesetzt ist.

Ihr Marketing-Team hat Sie gebeten, die Homepage der Website Ihres Unternehmens zu ändern. Sie denken, es sollte informativer sein, was das Unternehmen ist und verkauft. In diesem Abschnitt fügen Sie der Startseite Text hinzu, um das Marketingteam glücklich zu machen!

Es sieht so aus, als hätte einer Ihrer Entwickler die Änderungen bereits mit dem Dateinamen index.js.new . Sie können diese Datei einfach in index.js und Ihre Änderungen sollten übernommen werden. Befolgen Sie die Anweisungen, um die entsprechenden Änderungen vorzunehmen.

Führen Sie die folgenden Befehle aus, kopieren Sie die aktualisierte Datei in den richtigen Dateinamen und drucken Sie den Inhalt, um die Änderungen zu überprü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 resultierende Code sollte folgendermaßen 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 &amp; 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 jedoch die React-App erstellen, um die statischen Dateien zu generieren. Führen Sie den folgenden Befehl aus, um die React-App zu erstellen und in das öffentliche Monolith-Verzeichnis zu kopieren:

cd ~/monolith-to-microservices/react-app
npm run build:monolith

Nachdem Ihr Code aktualisiert wurde, müssen Sie Ihren Docker-Container neu erstellen und in der Container-Registrierung veröffentlichen. Sie können denselben Befehl wie zuvor verwenden, außer dass Sie diesmal die Versionsbezeichnung aktualisieren!

Führen Sie den folgenden Befehl aus, um einen neuen Cloud Build mit einer aktualisierten Image-Version von 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 Ausfallzeiten zu aktualisieren.

Die Änderungen sind abgeschlossen und das Marketing-Team ist mit Ihren Updates zufrieden! Es ist Zeit, die Website ohne Unterbrechung für die Benutzer zu aktualisieren.

Cloud Run behandelt jede Bereitstellung als eine neue Revision, die online geschaltet und dann mit Datenverkehr umgeleitet wird.

Befolgen Sie die nächsten Anweisungen, um Ihre Website zu aktualisieren.

Befehlszeile

Über die Befehlszeile können Sie den Dienst erneut 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 managed

Überprüfen Sie die Bereitstellung

Überprüfen Sie Ihr Bereitstellungsupdate, indem Sie den folgenden Befehl ausführen:

gcloud run services describe monolith --platform managed 

Die Ausgabe sieht folgendermaßen aus:

apiVersion: serving.knative.dev/v1alpha1
kind: Service
metadata:
  annotations:
    client.knative.dev/user-image: gcr.io/my-cloudrun-codelab/monolith:2.0.0
...

Sie werden sehen, dass Ihr Dienst jetzt die neueste Version Ihres Images verwendet, die in einer neuen Version bereitgestellt wurde.

Navigieren Sie zum Überprüfen Ihrer Änderungen erneut zur externen URL Ihres Cloud Run-Dienstes und stellen Sie fest, dass Ihr App-Titel aktualisiert wurde.

Führen Sie den folgenden Befehl aus, um die Dienste aufzulisten und die IP-Adresse anzuzeigen, wenn Sie sie vergessen haben:

gcloud run services list

Ihre Website sollte jetzt den Text anzeigen, den Sie der Homepage-Komponente hinzugefügt haben!

451ca252acae6928.png

Löschen Sie Containerregistrierungsbilder

# 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 --quiet

Löschen Sie Cloud Build-Artefakte aus dem Cloud-Speicher

# 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; done

Cloud Run-Dienst löschen

gcloud run services delete monolith --platform managed

Sie haben Ihre Website mit Cloud Run bereitgestellt, skaliert und aktualisiert.

Mehr erfahren