Hello Cloud Run mit Python

1. Einführung

96d07289bb51daa7.png

Cloud Run ist eine verwaltete Rechenplattform, mit der Sie zustandslose Container ausführen können, die über HTTP-Anfragen abrufbar sind. Es basiert auf dem Open-Source-Projekt Knative und ermöglicht die Portabilität Ihrer Arbeitslasten auf verschiedene Plattformen. Cloud Run arbeitet serverlos und benötigt keine Infrastrukturverwaltung. So können Sie sich ganz auf das Programmieren von Anwendungen konzentrieren.

Das Ziel dieser Anleitung ist es, eine einfache Webanwendung zu erstellen und in Cloud Run bereitzustellen.

2. Einrichtung und Anforderungen

Umgebung für das selbstbestimmte Lernen einrichten

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

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • Der Projektname ist der Anzeigename für die Projektteilnehmer. Es handelt sich um eine Zeichenfolge, die von Google APIs nicht verwendet wird. Sie können sie jederzeit aktualisieren.
  • Die Projekt-ID ist für alle Google Cloud-Projekte eindeutig und unveränderlich. Sie kann nach dem Festlegen nicht mehr geändert werden. Die Cloud Console generiert automatisch einen eindeutigen String. ist Ihnen meist egal, was es ist. In den meisten Codelabs musst du auf deine Projekt-ID verweisen, die üblicherweise als PROJECT_ID bezeichnet wird. Wenn Ihnen die generierte ID nicht gefällt, können Sie eine weitere zufällige ID generieren. Alternativ können Sie einen eigenen verwenden und nachsehen, ob er verfügbar ist. Sie kann nach diesem Schritt nicht mehr geändert werden und bleibt für die Dauer des Projekts erhalten.
  • Zur Information gibt es noch einen dritten Wert, die Projektnummer, die von manchen APIs verwendet wird. Weitere Informationen zu allen drei Werten finden Sie in der Dokumentation.
  1. Als Nächstes müssen Sie in der Cloud Console die Abrechnung aktivieren, um Cloud-Ressourcen/APIs verwenden zu können. Dieses Codelab ist kostengünstig. Sie können die von Ihnen erstellten Ressourcen oder das Projekt löschen, um Ressourcen herunterzufahren, um zu vermeiden, dass über diese Anleitung hinaus Kosten anfallen. Neue Google Cloud-Nutzer haben Anspruch auf das kostenlose Testprogramm mit 300$Guthaben.

Cloud Shell starten

Sie können Google Cloud zwar über Ihren Laptop aus der Ferne bedienen, in dieser Anleitung verwenden Sie jedoch Cloud Shell, eine Befehlszeilenumgebung, die in der Cloud ausgeführt wird.

Cloud Shell aktivieren

  1. Klicken Sie in der Cloud Console auf Cloud Shell aktivieren 853e55310c205094.png.

53c1dabeca90e44e5

Wenn Sie Cloud Shell zum ersten Mal starten, wird ein Zwischenbildschirm mit einer Beschreibung der Funktion angezeigt. Wenn ein Zwischenbildschirm angezeigt wird, klicken Sie auf Weiter.

9c92662c6a846a5c.png

Die Bereitstellung und Verbindung mit Cloud Shell dauert nur einen Moment.

9f0e51b578fecce5.png

Diese virtuelle Maschine verfügt über alle erforderlichen Entwicklertools. Es bietet ein Basisverzeichnis mit 5 GB nichtflüchtigem Speicher und wird in Google Cloud ausgeführt, wodurch die Netzwerkleistung und Authentifizierung erheblich verbessert werden. Viele, wenn nicht sogar alle Arbeiten in diesem Codelab können mit einem Browser erledigt werden.

Sobald Sie mit Cloud Shell verbunden sind, sollten Sie sehen, dass Sie authentifiziert sind und das Projekt auf Ihre Projekt-ID eingestellt ist.

  1. Führen Sie in Cloud Shell den folgenden Befehl aus, um zu prüfen, ob Sie authentifiziert sind:
gcloud auth list

Befehlsausgabe

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. Führen Sie in Cloud Shell den folgenden Befehl aus, um zu prüfen, ob der gcloud-Befehl Ihr Projekt kennt:
gcloud config list project

Befehlsausgabe

[core]
project = <PROJECT_ID>

Ist dies nicht der Fall, können Sie die Einstellung mit diesem Befehl vornehmen:

gcloud config set project <PROJECT_ID>

Befehlsausgabe

Updated property [core/project].

3. APIs aktivieren

Aktivieren Sie in Cloud Shell die Artifact Registry API, die Cloud Build API und die Cloud Run API:

gcloud services enable \
  artifactregistry.googleapis.com \
  cloudbuild.googleapis.com \
  run.googleapis.com

Dadurch wird eine Erfolgsmeldung wie diese ausgegeben:

Operation "operations/..." finished successfully.

Jetzt können Sie mit der Arbeit beginnen und Ihre Anwendung schreiben...

4. Anwendung schreiben

In diesem Schritt erstellen Sie eine einfache Flask-basierte Python-Anwendung, die auf HTTP-Anfragen reagiert.

Arbeitsverzeichnis

Erstellen Sie mit Cloud Shell ein Arbeitsverzeichnis mit dem Namen helloworld-python und wechseln Sie zu diesem Verzeichnis:

mkdir ~/helloworld-python
cd ~/helloworld-python

main.py

Erstellen Sie eine Datei mit dem Namen main.py:

touch main.py

Bearbeiten Sie die Datei mit Ihrem bevorzugten Befehlszeileneditor (Nano, Vim oder Emacs) oder klicken Sie auf die Schaltfläche „Cloud Shell-Editor“:

10af7b1a6240e9f4.gif

Verwenden Sie den folgenden Befehl, um die Datei direkt mit dem Cloud Shell-Editor zu bearbeiten:

cloudshell edit main.py

main.py

from flask import Flask, request

app = Flask(__name__)


@app.get("/")
def hello():
    """Return a friendly HTTP greeting."""
    who = request.args.get("who", default="World")
    return f"Hello {who}!\n"


if __name__ == "__main__":
    # Development only: run "python main.py" and open http://localhost:8080
    # When deploying to Cloud Run, a production-grade WSGI HTTP server,
    # such as Gunicorn, will serve the app.
    app.run(host="localhost", port=8080, debug=True)

Mit diesem Code wird ein einfacher Webdienst erstellt, der auf HTTP GET-Anfragen mit einer freundlichen Nachricht antwortet.

requirements.txt

Fügen Sie eine Datei mit dem Namen requirements.txt hinzu, um die Abhängigkeiten zu definieren:

touch requirements.txt

Verwenden Sie den folgenden Befehl, um die Datei direkt mit dem Cloud Shell-Editor zu bearbeiten:

cloudshell edit requirements.txt

requirements.txt

# https://pypi.org/project/flask
Flask==3.0.2

# https://pypi.org/project/gunicorn
gunicorn==21.2.0

Procfile

Fügen Sie abschließend eine Datei mit dem Namen Procfile hinzu, um festzulegen, wie die Anwendung bereitgestellt wird:

touch Procfile

Verwenden Sie den folgenden Befehl, um die Datei direkt mit dem Cloud Shell-Editor zu bearbeiten:

cloudshell edit Procfile

Procfile

web: gunicorn --bind :$PORT --workers 1 --threads 8 --timeout 0 main:app

Achten Sie darauf, dass alle Dateien im Arbeitsverzeichnis vorhanden sind:

ls

Daraufhin sollten die folgenden Dateien aufgelistet werden:

main.py  Procfile  requirements.txt

Ihre Anwendung ist bereit zur Bereitstellung, aber lassen Sie sie zuerst testen...

5. Anwendung testen

Erstellen Sie zum Testen der Anwendung eine virtuelle Umgebung:

virtualenv venv

Aktivieren Sie die virtuelle Umgebung:

source venv/bin/activate

Installieren Sie die Abhängigkeiten:

pip install -r requirements.txt

Sie sollten eine Bestätigungsnachricht wie die folgende erhalten:

...
Successfully installed Flask ... gunicorn ...

Anwendung starten:

python main.py

Aus den Logs geht hervor, dass Sie sich im Entwicklungsmodus befinden:

 * Serving Flask app 'main'
 * Debug mode: on
   WARNING: This is a development server.
   Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Running on http://localhost:8080
   Press CTRL+C to quit
...

Klicken Sie im Cloud Shell-Fenster auf das Symbol Web Preview und wählen Sie Preview on port 8080 aus:

6c9ff9e5c692c58e.gif

Daraufhin sollte ein Browserfenster mit der Meldung Hello World! geöffnet werden.

Sie können auch eine weitere Cloud Shell-Sitzung öffnen (einen neuen Terminal-Tab), indem Sie auf das Symbol + klicken und eine Webanfrage an die lokal ausgeführte Anwendung senden:

curl localhost:8080

Sie sollten die folgende Antwort erhalten:

Hello World!

Wenn Sie fertig sind, kehren Sie zur Cloud Shell-Hauptsitzung zurück und beenden den Befehl python main.py mit CTRL+C.

Verlassen Sie die virtuelle Umgebung:

deactivate

Entfernen Sie zum Schluss das Verzeichnis der virtuellen Umgebung:

rm -r venv/

Ihre Anwendung funktioniert wie erwartet: Stellen Sie sie bereit...

6. In Cloud Run bereitstellen

Cloud Run ist regional. Das bedeutet, dass sich die Infrastruktur, in der Ihre Cloud Run-Dienste ausgeführt werden, in einer bestimmten Region befindet und von Google verwaltet wird, damit sie in allen Zonen innerhalb dieser Region redundant verfügbar ist. Definieren Sie die Region, die Sie für die Bereitstellung verwenden möchten. Beispiel:

REGION="europe-west9"

Achten Sie darauf, dass Sie sich noch im Arbeitsverzeichnis befinden:

ls

Daraufhin sollten die folgenden Dateien aufgelistet werden:

main.py  Procfile  requirements.txt

Stellen Sie die Anwendung in Cloud Run bereit:

gcloud run deploy helloworld-python \
  --source . \
  --platform managed \
  --region $REGION \
  --allow-unauthenticated
  • Mit dem folgenden Befehl können Sie eine Standardregion definieren: gcloud config set run/region $REGION
  • Mit dem folgenden Befehl können Sie Cloud Run auch standardmäßig verwalten: gcloud config set run/platform managed
  • Mit der Option --allow-unauthenticated wird der Dienst öffentlich verfügbar. Um nicht authentifizierte Anfragen zu vermeiden, verwenden Sie stattdessen --no-allow-unauthenticated.

Sie werden zum ersten Mal aufgefordert, ein Artifact Registry-Repository zu erstellen. Tippe zum Bestätigen auf die Eingabetaste:

Deploying from source requires an Artifact Registry Docker repository to store
built containers. A repository named [cloud-run-source-deploy] in region [REGION]
will be created.

Do you want to continue (Y/n)?

Dadurch werden der Upload Ihres Quellcodes in das Artifact Registry-Repository und der Build Ihres Container-Images gestartet:

Building using Buildpacks and deploying container ...
* Building and deploying new service... Building Container.           
  OK Creating Container Repository...
  OK Uploading sources...
  * Building Container... Logs are available at ...

Warten Sie dann einen Moment, bis die Bereitstellung abgeschlossen ist. Wenn die Bereitstellung erfolgreich war, wird in der Befehlszeile die Dienst-URL angezeigt:

...
OK Building and deploying new service... Done.
  OK Creating Container Repository...
  OK Uploading sources...
  OK Building Container... Logs are available at ...
  OK Creating Revision... Creating Service.
  OK Routing traffic...
  OK Setting IAM Policy...
Done.
Service [SERVICE]... has been deployed and is serving 100 percent of traffic.
Service URL: https://SERVICE-PROJECTHASH-REGIONID.a.run.app

Sie können die Dienst-URL mit diesem Befehl abrufen:

SERVICE_URL=$( \
  gcloud run services describe helloworld-python \
  --platform managed \
  --region $REGION \
  --format "value(status.url)" \
)
echo $SERVICE_URL

Die Anzeige sollte in etwa so aussehen:

https://helloworld-python-PROJECTHASH-REGIONID.a.run.app

Sie können Ihre Anwendung jetzt verwenden, indem Sie die Dienst-URL in einem Webbrowser öffnen:

c836b93e5601e2cf.gif

Sie können die Anwendung auch über Cloud Shell aufrufen:

curl $SERVICE_URL?who=me

Dadurch sollte die erwartete Begrüßung angezeigt werden:

Hello me!

Glückwunsch! Sie haben gerade eine Anwendung in Cloud Run bereitgestellt. Cloud Run skaliert das Container-Image automatisch horizontal, damit die empfangenen Anfragen bearbeitet werden können, und skaliert es 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.

7. Bereinigen

Für Cloud Run fallen keine Kosten an, wenn der Dienst nicht verwendet wird. Das Speichern des Container-Images in Artifact Registry kann jedoch trotzdem in Rechnung gestellt werden. Sie können Ihr Repository oder Ihr Cloud-Projekt löschen, um Gebühren zu vermeiden. Wenn Sie Ihr Cloud-Projekt löschen, wird die Abrechnung für alle in diesem Projekt verwendeten Ressourcen beendet.

So löschen Sie Ihr Container-Image-Repository:

gcloud artifacts repositories delete cloud-run-source-deploy \
  --location $REGION

So löschen Sie Ihren Cloud Run-Dienst:

gcloud run services delete helloworld-python \
  --platform managed \
  --region $REGION

So löschen Sie Ihr Google Cloud-Projekt:

  1. Rufen Sie Ihre aktuelle Projekt-ID ab:
PROJECT_ID=$(gcloud config get-value core/project)
  1. Prüfen Sie, ob dies das Projekt ist, das Sie löschen möchten:
echo $PROJECT_ID
  1. Projekt löschen
gcloud projects delete $PROJECT_ID

8. Glückwunsch!

96d07289bb51daa7.png

Sie haben eine einfache Webanwendung erstellt und in Cloud Run bereitgestellt.

Weitere Informationen

Lizenz

Dieser Text ist mit einer Creative Commons Attribution 2.0 Generic License lizenziert.