Container mit Cloud Run auf Node.js bereitstellen und ausführen

1. Hinweis

6a5cf23c8e20491f.png

Cloud Run ist eine verwaltete Rechenplattform, mit der Sie zustandslose Container ausführen können, die über HTTP-Anfragen abrufbar sind. Cloud Run ist serverlos. Es ist keine Infrastrukturverwaltung mehr erforderlich. So können Sie sich auf das Wichtigste konzentrieren: die Entwicklung hochwertiger Anwendungen. Es basiert auf Knative und ermöglicht Ihnen, Container mit Cloud Run (vollständig verwaltet) oder Cloud Run for Anthos auszuführen. In diesem Codelab erfahren Sie, wie Sie ein Container-Image erstellen und in Cloud Run bereitstellen.

Voraussetzungen

2. Einrichtung und Anforderungen

Umgebung für das selbstbestimmte Lernen einrichten

  1. Melden Sie sich in der Cloud Console an und erstellen Sie ein neues Projekt oder verwenden Sie ein vorhandenes Projekt. Wenn Sie noch kein Gmail- oder G Suite-Konto haben, müssen Sie eines erstellen.

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLGQdkuzGp4rsQTan7F01iePL5DtqQ

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

Notieren Sie sich die Projekt-ID, also den projektübergreifend nur einmal vorkommenden Namen eines Google Cloud-Projekts. Der oben angegebene Name ist bereits vergeben und kann leider nicht mehr verwendet werden. Sie wird in diesem Codelab später als PROJECT_ID bezeichnet.

  1. Als Nächstes müssen Sie in der Cloud Console die Abrechnung aktivieren, um Google Cloud-Ressourcen nutzen zu können.

Dieses Codelab sollte ohne großen Aufwand betrieben werden. Folgen Sie der Anleitung im Abschnitt „Bereinigen“, . Hier erfahren Sie, wie Sie Ressourcen herunterfahren, damit Ihnen über dieses Tutorial hinaus keine Kosten entstehen. Neue Google Cloud-Nutzer können an der kostenlosen Testversion von 300$ teilnehmen.

Cloud Shell

Sie können Google Cloud zwar von Ihrem Laptop aus der Ferne bedienen, aber Sie verwenden dafür Cloud Shell, eine Befehlszeilenumgebung, die in Google Cloud ausgeführt wird.

Diese Debian-basierte virtuelle Maschine verfügt über alle erforderlichen Entwicklungstools. Es bietet ein Basisverzeichnis mit 5 GB nichtflüchtigem Speicher und wird in Google Cloud ausgeführt. Dadurch werden die Netzwerkleistung und die Authentifizierung erheblich verbessert. Für dieses Codelab benötigen Sie also nur einen Browser – ja, er funktioniert auf Chromebooks.

  1. Klicken Sie einfach auf Cloud Shell aktivieren fEbHefbRynwXpq1vj2wJw6Dr17O0np8l-WOekxAZYlZQIORsWQE_xJl-cNhogjATLn-YxLVz8CgLvIW1Ncc0yXKJsfzJGMYgUeLsVB7zSwz7p6ItNgx4tXqQjag7BfWPcZN5kP-X3Q, um Cloud Shell über die Cloud Console zu aktivieren. Die Bereitstellung und Verbindung mit der Umgebung dauert einen Moment.

I5aEsuNurCxHoDFjZRZrKBdarPPKPoKuExYpdagmdaOLKe7eig3DAKJitIKyuOpuwmrMAyZhp5AXpmD_k66cBuc1aUnWlJeSfo_aTKPY9aNMurhfegg1CYaE11jdpSTYNNIYARe01A

Screen Shot 2017-06-14 at 10.13.43 PM.png

Sobald Sie mit Cloud Shell verbunden sind, sollten Sie sehen, dass Sie bereits authentifiziert sind und dass 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>

Sollte das Projekt aus irgendeinem Grund nicht eingerichtet sein, geben Sie einfach den folgenden Befehl ein:

gcloud config set project <PROJECT_ID>

Du suchst dein Gerät (PROJECT_ID)? Sehen Sie nach, welche ID Sie bei den Einrichtungsschritten verwendet haben, oder rufen Sie sie im Dashboard der Cloud Console auf:

R7chO4PKQfLC3bvFBNZJALLTUiCgyLEq_67ECX7ohs_0ZnSjC7GxDNxWrJJUaoM53LnqABYamrBJhCuXF-J9XBzuUgaz7VvaxNrkP2TAn93Drxccyj2-5zz4AxL-G3hzxZ4PsM5HHQ

Cloud Shell legt außerdem standardmäßig einige Umgebungsvariablen fest, die bei der Ausführung zukünftiger Befehle nützlich sein können.

echo $GOOGLE_CLOUD_PROJECT

Befehlsausgabe

<PROJECT_ID>
  1. Legen Sie schließlich 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.

Aktivieren Sie die Cloud Run API.

Aktivieren Sie in Cloud Shell die Cloud Run API.

gcloud services enable run.googleapis.com

Die erfolgreiche Meldung sollte in etwa so aussehen:

Operation "operations/acf.cc11852d-40af-47ad-9d59-477a12847c9e" finished successfully.

3. Beispiel-App schreiben

Sie erstellen eine einfache, Express-basierte Node.js-Anwendung, die auf HTTP-Anfragen reagiert.

Erstellen Sie zum Erstellen Ihrer Anwendung mit Cloud Shell ein neues Verzeichnis mit dem Namen helloworld-nodejs und wechseln Sie zu diesem Verzeichnis.

mkdir helloworld-nodejs
cd helloworld-nodejs

Erstellen Sie eine package.json-Datei mit folgendem Inhalt:

{
  "name": "cloudrun-helloworld",
  "version": "1.0.0",
  "description": "Simple hello world sample in Node",
  "main": "index.js",
  "scripts": {
    "start": "node index.js"
  },
  "author": "",
  "license": "Apache-2.0",
  "dependencies": {
    "express": "^4.17.1"
  }
}

Vor allem enthält die obige Datei einen Startskriptbefehl und eine Abhängigkeit vom Express-Framework für Webanwendungen.

Erstellen Sie dann im selben Verzeichnis eine index.js-Datei und kopieren Sie den folgenden Inhalt hinein:

const express = require('express');
const app = express();

app.get('/', (req, res) => {
  console.log('Hello world received a request.');

  const target = process.env.TARGET || 'World';
  res.send(`Hello ${target}!`);
});

const port = process.env.PORT || 8080;
app.listen(port, () => {
  console.log('Hello world listening on port', port);
});

Mit diesem Code wird ein einfacher Webserver erstellt, der den von der Umgebungsvariable PORT definierten Port überwacht. Ihre Anwendung kann jetzt containerisiert, getestet und in Container Registry hochgeladen werden.

4. Anwendung containerisieren und in Container Registry hochladen

Erstellen Sie zum Containerisieren der Beispielanwendung eine neue Datei mit dem Namen Dockerfile im selben Verzeichnis wie die Quelldateien und kopieren Sie den folgenden Inhalt in diese Datei:

# Use the official lightweight Node.js 12 image.
# https://hub.docker.com/_/node
FROM node:12-slim

# Create and change to the app directory.
WORKDIR /usr/src/app

# Copy application dependency manifests to the container image.
# A wildcard is used to ensure both package.json AND package-lock.json are copied.
# Copying this separately prevents re-running npm install on every code change.
COPY package*.json ./

# Install production dependencies.
RUN npm install --only=production

# Copy local code to the container image.
COPY . ./

# Run the web service on container startup.
CMD [ "npm", "start" ]

Erstellen Sie nun das Container-Image mit Cloud Build. Führen Sie dazu den folgenden Befehl aus dem Verzeichnis aus, das das Dockerfile enthält:

gcloud builds submit --tag gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld

$GOOGLE_CLOUD_PROJECT ist eine Umgebungsvariable, die bei der Ausführung in Cloud Shell Ihre Google Cloud-Projekt-ID enthält. Sie können sie auch abrufen, indem Sie gcloud config get-value project ausführen.

Bei der Übertragung in die Registry wird die Meldung SUCCESS mit dem Image-Namen (gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld) angezeigt. Das Image wird in Container Registry gespeichert und kann bei Bedarf wiederverwendet werden.

Mit dem folgenden Befehl können Sie alle Container-Images auflisten, die mit Ihrem aktuellen Projekt verknüpft sind:

gcloud container images list

Wenn Sie die Anwendung lokal in Cloud Shell ausführen und testen möchten, können Sie sie mit dem folgenden docker-Standardbefehl starten:

docker run -d -p 8080:8080 gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld

Klicken Sie in Cloud Shell auf Webvorschau170b7a95be8c6296.png und wählen Sie Vorschau auf Port 8080 aus.

3618ca3a4a135570.png

Dadurch wird ein Browserfenster mit der Meldung Hello World!

a0307f34cacf9e6a.png

Sie können auch einfach curl localhost:8080 verwenden.

5. In Cloud Run bereitstellen

Die Bereitstellung der Containeranwendung in Cloud Run erfolgt mit dem folgenden Befehl. Achten Sie darauf, den richtigen Image-Namen für die von Ihnen erstellte Anwendung festzulegen, oder verwenden Sie das vordefinierte Image gcr.io/cloudrun/hello:

gcloud run deploy helloworld \
  --image gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld \
  --platform managed \
  --region us-central1 \
  --allow-unauthenticated

Mit der Bereitstellungsoption --allow-unauthenticated können Sie die Anwendung ohne Authentifizierung aufrufen. Die Bereitstellungsoption --platform managed \ bedeutet, dass Sie die vollständig verwaltete Umgebung anfordern (nicht die Kubernetes-Infrastruktur über Anthos).

Warten Sie dann einige Sekunden, bis die Bereitstellung abgeschlossen ist. Wenn der Vorgang abgeschlossen ist, wird in der Befehlszeile die Dienst-URL angezeigt.

Service [helloworld] revision [helloworld-00001] has been deployed
and is serving traffic at https://helloworld-wdl7fdwaaa-uc.a.run.app

Sie können jetzt den bereitgestellten Container aufrufen, indem Sie die Dienst-URL in einem Webbrowser öffnen:

63260b4d3aee42b8.png

Cloud Run skaliert das Container-Image automatisch horizontal, um die empfangenen Anfragen zu verarbeiten, und skaliert es dann wieder herunter, wenn der Bedarf sinkt. Es fallen nur Kosten für die CPU-, Arbeitsspeicher- und Netzwerkressourcen an, die während der Anfrageverarbeitung verbraucht werden.

6. Bereinigen

Für Cloud Run fallen keine Kosten an, wenn der Dienst nicht verwendet wird. Das Speichern des erstellten Container-Images kann jedoch trotzdem in Rechnung gestellt werden.

Sie haben zwei Möglichkeiten:

gcloud container images delete gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld

Führen Sie den folgenden Befehl aus, um den Cloud Run-Dienst zu löschen:

gcloud run services delete helloworld \
  --platform managed \
  --region us-central1

7. Glückwunsch

Glückwunsch! Sie haben eine in einem Container-Image verpackte Anwendung in Cloud Run bereitgestellt.

Weitere Informationen

Ein guter nächster Schritt ist die Kurzanleitung: In Cloud Run for Anthos in Google Cloud bereitstellen.

Weitere Informationen zum Erstellen eines zustandslosen HTTP-Containers, der für Cloud Run aus einer Codequelle geeignet ist, und zum Übertragen in Container Registry finden Sie in den folgenden Ressourcen:

Weitere Informationen zu Knative, dem zugrunde liegenden Open-Source-Projekt, finden Sie unter Knative.