1. Hinweis
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
- 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.
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.
- 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.
- Klicken Sie einfach auf Cloud Shell aktivieren , um Cloud Shell über die Cloud Console zu aktivieren. Die Bereitstellung und Verbindung mit der Umgebung dauert einen Moment.
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:
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>
- 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 Webvorschau und wählen Sie Vorschau auf Port 8080 aus.
Dadurch wird ein Browserfenster mit der Meldung Hello World!
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:
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.