Erste Schritte mit App Engine (Python 3)

1. Übersicht

befa7a877ccdd35d.png

Google App Engine-Anwendungen lassen sich einfach erstellen, verwalten und skalieren, wenn sich Traffic und Datenspeicheranforderungen ändern. Mit App Engine müssen keine Server verwaltet werden. Sie laden einfach Ihre Anwendung hoch und es kann losgehen.

In diesem Codelab erfahren Sie, wie Sie eine einfache Python-Webanwendung bereitstellen, die mit dem Web-Framework Flask geschrieben wurde. Auch wenn in diesem Beispiel Flask verwendet wird, können Sie andere Web-Frameworks wie Django, Pyramid, Bottle und web.py einsetzen.

Diese Anleitung basiert auf https://cloud.google.com/appengine/docs/standard/python3/quickstart.

Lerninhalte

  • So erstellen Sie einen einfachen Python-Server in Google App Engine.
  • Code aktualisieren, ohne den Server herunterzufahren

Voraussetzungen

  • Python-Vorkenntnisse
  • Erfahrung mit standardmäßigen Linux-Texteditoren wie vim, emacs oder nano

Umfrage

Wie werden Sie diese Anleitung verwenden?

Nur lesen Lesen und Übungen durchführen

Wie würden Sie Ihre Erfahrung mit Python bewerten?

Anfänger Mittelstufe Fortgeschrittene

Wie würden Sie Ihre Erfahrungen mit Google Cloud-Diensten bewerten?

Anfänger Mittelstufe Fortgeschritten

2. Einrichtung und Anforderungen

Umgebung zum selbstbestimmten Lernen einrichten

  1. Melden Sie sich in der Google Cloud Console an und erstellen Sie ein neues Projekt oder verwenden Sie ein vorhandenes. 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 Teilnehmer dieses Projekts. Es handelt sich um einen String, der nicht von Google APIs verwendet wird. Sie können sie jederzeit aktualisieren.
  • Die Projekt-ID ist für alle Google Cloud-Projekte eindeutig und unveränderlich (kann nach dem Festlegen nicht mehr geändert werden). In der Cloud Console wird automatisch ein eindeutiger String generiert. Normalerweise ist es nicht wichtig, wie dieser String aussieht. In den meisten Codelabs müssen Sie auf Ihre Projekt-ID verweisen (in der Regel als PROJECT_ID angegeben). Wenn Ihnen die generierte ID nicht gefällt, können Sie eine andere zufällige ID generieren. Alternativ können Sie es mit einem eigenen Namen versuchen und sehen, ob er verfügbar ist. Sie kann nach diesem Schritt nicht mehr geändert werden und bleibt für die Dauer des Projekts bestehen.
  • Zur Information: Es gibt einen dritten Wert, die Projektnummer, die von einigen APIs verwendet wird. Weitere Informationen zu diesen drei Werten
  1. Als Nächstes müssen Sie die Abrechnung in der Cloud Console aktivieren, um Cloud-Ressourcen/-APIs zu verwenden. Die Durchführung dieses Codelabs kostet wenig oder gar nichts. Wenn Sie Ressourcen herunterfahren möchten, um Kosten zu vermeiden, die über diese Anleitung hinausgehen, können Sie die erstellten Ressourcen oder das Projekt löschen. Neue Google Cloud-Nutzer können am kostenlosen Testzeitraum mit einem Guthaben von 300$ teilnehmen.

Cloud Shell starten

Während Sie Google Cloud von Ihrem Laptop aus per Fernzugriff nutzen können, wird in diesem Codelab Cloud Shell verwendet, 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.

3c1dabeca90e44e5.png

Wenn Sie die Cloud Shell zum ersten Mal starten, wird ein Fenster mit einer Beschreibung eingeblendet. Klicken Sie in diesem Fall einfach auf Weiter.

9c92662c6a846a5c.png

Das Herstellen der Verbindung mit der Cloud Shell sollte nur wenige Augenblicke dauern.

9f0e51b578fecce5.png

Auf dieser virtuellen Maschine sind alle erforderlichen Entwicklungstools installiert. Sie bietet ein Basisverzeichnis mit 5 GB nichtflüchtigem Speicher und läuft in Google Cloud, was die Netzwerkleistung und Authentifizierung erheblich verbessert. Die meisten, wenn nicht sogar alle Aufgaben in diesem Codelab können mit einem Browser erledigt werden.

Sobald die Verbindung mit der Cloud Shell hergestellt ist, sehen Sie, dass Sie authentifiziert sind und für das Projekt Ihre Projekt-ID eingestellt ist.

  1. Führen Sie in der 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 den folgenden Befehl in Cloud Shell aus, um zu bestätigen, dass 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. Webanwendung schreiben

Nachdem Cloud Shell gestartet wurde, können Sie das Cloud SDK-Tool gcloud oder andere Tools, die in der virtuellen Maschine zur Verfügung stehen, über die Befehlszeile aufrufen. Sie können das Verzeichnis $HOME im nichtflüchtigen Festplattenspeicher verwenden, um Dateien projektübergreifend und nach Cloud Shell-Sitzungen zu speichern. Ihr $HOME-Verzeichnis ist privat und kann nicht von anderen Nutzern aufgerufen werden.

Erstellen Sie zuerst einen neuen Ordner im Verzeichnis $HOME für die Anwendung:

mkdir ~/helloworld
cd ~/helloworld

Erstellen Sie eine Datei mit dem Namen main.py:

touch main.py

Bearbeiten Sie die Datei mit dem Befehlszeileneditor Ihrer Wahl (nano, vim oder emacs) oder indem Sie auf die Schaltfläche „Cloud Shell-Editor“ klicken:

10af7b1a6240e9f4.gif

Wenn Sie die Datei direkt mit dem Cloud Shell-Editor bearbeiten möchten, verwenden Sie diesen Befehl:

cloudshell edit main.py

main.py

import flask

# If `entrypoint` is not defined in app.yaml, App Engine will look for an app
# called `app` in `main.py`.
app = flask.Flask(__name__)


@app.get("/")
def hello():
    """Return a friendly HTTP greeting."""
    return "Hello World!\n"


if __name__ == "__main__":
    # Used when running locally only. When deploying to Google App
    # Engine, a webserver process such as Gunicorn will serve the app. This
    # can be configured by adding an `entrypoint` to app.yaml.
    app.run(host="localhost", port=8080, debug=True)

4. Abhängigkeiten definieren

Wenn Sie die Abhängigkeiten Ihrer Web-App angeben möchten, kehren Sie zum Terminal zurück und erstellen Sie im Stammverzeichnis Ihres Projekts eine requirements.txt-Datei mit der genauen Version von Flask, die verwendet werden soll:

touch requirements.txt

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

cloudshell edit requirements.txt

requirements.txt

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

5. Bereitstellung konfigurieren

Zum Bereitstellen Ihrer Webanwendung in App Engine benötigen Sie eine app.yaml-Datei. In dieser Konfigurationsdatei werden die Einstellungen Ihrer Webanwendung für App Engine festgelegt.

Erstellen und bearbeiten Sie die Datei app.yaml im Stammverzeichnis Ihres Projekts über das Terminal:

touch app.yaml

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

cloudshell edit app.yaml

app.yaml

runtime: python312

6. Webanwendung bereitstellen

Prüfen Sie im Terminal den Inhalt Ihres Verzeichnisses:

ls

Sie sollten die folgenden drei Dateien haben:

app.yaml  main.py  requirements.txt

Stellen Sie Ihre Web-App mit dem folgenden Befehl bereit:

gcloud app deploy

Beim ersten Mal müssen Sie eine Bereitstellungsregion auswählen:

Please choose the region where you want your App Engine application
located:

 [1] asia-east2
...
 [7] australia-southeast1
 [8] europe-west
 [9] europe-west2
...
 [12] northamerica-northeast1
 [13] southamerica-east1
...
 [19] us-west4
...
Please enter your numeric choice:

Bestätigen Sie, dass Sie das Deployment starten möchten:

Creating App Engine application in project [PROJECT_ID] and region [REGION]....done.
Services to deploy:

descriptor:      [~/helloworld/app.yaml]
source:          [~/helloworld]
target project:  [PROJECT_ID]
target service:  [default]
target version:  [YYYYMMDDtHHMMSS]
target url:      [https://PROJECT_ID.REGION_ID.r.appspot.com]

Do you want to continue (Y/n)?

Ihre App wird bereitgestellt:

Beginning deployment of service [default]...
Created .gcloudignore file. See `gcloud topic gcloudignore` for details.
Uploading 3 files to Google Cloud Storage
100%
File upload done.
Updating service [default]...done.     
Setting traffic split for service [default]...done.
Deployed service [default] to [https://PROJECT_ID.REGION_ID.r.appspot.com]

Ihre Webanwendung kann jetzt auf HTTP-Anfragen auf https://PROJECT_ID.REGION_ID.r.appspot.com reagieren.

7. Webanwendung testen

Ihre Webanwendung kann jetzt auf HTTP-Anfragen auf https://PROJECT_ID.REGION_ID.r.appspot.com reagieren.

Rufen Sie zuerst den Hostnamen Ihrer Web-App mit dem Befehl gcloud app describe ab:

APPENGINE_HOSTNAME=$(gcloud app describe --format "value(defaultHostname)")

Testen Sie Ihre Web-App mit dieser einfachen HTTP-GET-Anfrage:

curl https://$APPENGINE_HOSTNAME

Sie sollten die folgende Antwort erhalten:

Hello World!

Zusammenfassung

In den vorherigen Schritten haben Sie eine einfache Python-Webanwendung eingerichtet und sie in App Engine ausgeführt und bereitgestellt.

8. Webanwendung aktualisieren

Ändern Sie Ihre Web-App, indem Sie den Funktionskörper hello() in der Datei main.py ändern.

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

cloudshell edit main.py

main.py

import flask

# If `entrypoint` is not defined in app.yaml, App Engine will look for an app
# called `app` in `main.py`.
app = flask.Flask(__name__)


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


if __name__ == "__main__":
    # Used when running locally only. When deploying to Google App
    # Engine, a webserver process such as Gunicorn will serve the app. This
    # can be configured by adding an `entrypoint` to app.yaml.
    app.run(host="localhost", port=8080, debug=True)

Stellen Sie die Web-App über das Terminal noch einmal bereit, um sie zu aktualisieren:

gcloud app deploy --quiet

Die neue Version Ihrer App wird bereitgestellt:

Beginning deployment of service [default]...
Uploading 1 file to Google Cloud Storage 
...
Deployed service [default] to [https://PROJECT_ID.REGION_ID.r.appspot.com]

Testen Sie die neue Version Ihrer Webanwendung genau wie zuvor:

curl https://$APPENGINE_HOSTNAME

Sie sollten dieselbe Antwort erhalten:

Hello World!

Testen Sie ihn mit dem optionalen Parameter:

curl https://$APPENGINE_HOSTNAME?who=Universe

Sie sollten die folgende Antwort erhalten:

Hello Universe!

Zusammenfassung

In diesem Schritt haben Sie Ihre Web-App aktualisiert und noch einmal bereitgestellt, ohne dass es zu einer Dienstunterbrechung kam.

9. Glückwunsch!

Sie haben Ihre erste App Engine-Webanwendung in Python geschrieben.

Weitere Informationen

Lizenz

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