Python 3-Laufzeitumgebung

Die Python-Laufzeit ist der Softwarestapel, der für die Installation des Codes Ihres Webdienstes und der Abhängigkeiten sowie für die Ausführung Ihres App Engine-Dienstes verantwortlich ist.

Die Python-Laufzeit für App Engine in der Standardumgebung ist in der app.yaml-Datei so deklariert:

runtime: pythonVERSION

Dabei ist VERSION die Python-Versionsnummern MAJOR und MINOR. Wenn Sie beispielsweise die neueste Python-Version (Python 3.12) verwenden möchten, geben Sie 312 an.

Weitere unterstützte Python-Versionen und die entsprechende Ubuntu-Version für Ihre Python-Version finden Sie im Zeitplan für die Laufzeitunterstützung.

Python 3-Versionen

Die Python-Laufzeit verwendet die neueste stabile Version der Version, die in der Datei app.yaml angegeben ist. App Engine wird automatisch auf neue Patchversionen aktualisiert. Die Nebenversion wird jedoch nicht automatisch aktualisiert.

Beispiel: Eine mit Python 3.7.0 bereitgestellte Anwendung wird später automatisch auf Version 3.7.1 aktualisiert, aber nicht auf die nächste Nebenversion von Python 3.8.0.

Jetzt testen

Wenn Sie mit Google Cloud noch nicht vertraut sind, erstellen Sie einfach ein Konto, um die Leistungsfähigkeit von App Engine in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.

App Engine kostenlos testen

App Engine führt Python-Anwendungen in einem durch gVisor gesicherten Container auf einer aktuellen Ubuntu-Linux-Distribution aus.

Abhängigkeiten

Während der Bereitstellung verwendet App Engine den Python-Paketmanager pip zum Installieren von Abhängigkeiten, die in der Metadatendatei requirements.txt im Stammverzeichnis Ihres Projekts definiert sind. Sie müssen keine Abhängigkeiten hochladen, da App Engine eine Neuinstallation ausführt.

Die Abhängigkeitsspezifikation mit dem Standard Pipfile/Pipfile.lock wird derzeit nicht unterstützt. Deshalb dürfen diese Dateien in Ihrem Projekt nicht vorhanden sein.

Anwendungsstart

Die Anwendung startet die Anwendung durch Ausführen des Befehls, den Sie im Feld entrypoint in Ihrer app.yaml-Datei angeben. Wenn Sie in der Datei app.yaml einen Einstiegspunkt für Gunicorn-Webserver konfiguriert haben, müssen Sie auch in die Datei requirements.txt gunicorn aufnehmen.

Der Einstiegspunkt sollte einen Webserver starten, der den von der Umgebungsvariable PORT angegebenen Port überwacht. Beispiele:

entrypoint: gunicorn -b :$PORT main:app

Das von Ihrer Anwendung verwendete Web-Framework ist für die Weiterleitung von Anfragen an die entsprechenden Handler in Ihrer Anwendung zuständig.

Wenn die Anwendung die folgenden Anforderungen erfüllt, startet App Engine Ihre Anwendung mit dem Webserver gunicorn, wenn Sie das Feld entrypoint nicht angeben:

  • Der Stamm Ihres Anwendungsverzeichnisses enthält eine main.py-Datei mit einem WSGI-kompatiblen Objekt namens app.

  • Ihre App enthält keine Datei Pipfile oder Pipfile.lock.

Wenn Sie keinen Einstiegspunkt für die Python 3-Laufzeit angeben, konfiguriert und startet App Engine den Standard-Gunicorn-Webserver.

Best Practices für Einstiegspunkte

  • Prüfen Sie, ob das Python-Modul, das zum Ausführen des angegebenen Einstiegspunkts in app.yaml erforderlich ist, in der Datei requirements.txt vorhanden ist. Fügen Sie der Datei requirements.txt nur dann gunicorn hinzu, wenn explizit ein gunicorn-Endpunkt in der Datei app.yaml angegeben ist.

  • Für eine optimale Leistung sollte der Einstiegspunkt möglichst einfach sein, da er immer dann ausgeführt wird, wenn eine neue Instanz Ihrer Anwendung erstellt wird.

  • Mit dem Feld "entrypoint" können Sie die Leistung Ihrer Anwendung optimieren. Wenn Sie beispielsweise gunicorn als Webserver verwenden, können Sie die --workers-Flag im Feld "entrypoint" verwenden, um die Anzahl der Worker in Ihrer Anwendung zu konfigurieren.

    Die Anzahl der Worker, die Sie angeben, sollte der Instanzklasse Ihrer App Engine-Anwendung entsprechen:

    Instanzklasse Worker
    F1 2
    F2 4
    F4 8
    F4_1G 8
    B1 2
    B2 4
    B4 8
    B4_1G 8
    B8 8

    Diese Anleitung dient als Ausgangspunkt für die Auswahl der Anzahl der Worker. Die Anzahl der Worker hängt von den Leistungsmerkmalen Ihrer Anwendung ab. Das folgende Beispiel zeigt eine App Engine-Bereitstellung, die zwei gunicorn-Worker verwendet:

    entrypoint: gunicorn -b :$PORT -w 2 main:app
    
  • Wir empfehlen, Ihren Webserver so zu konfigurieren, dass er den von der Umgebungsvariable $PORT angegebenen Port überwacht und über ihn auch auf HTTP-Anfragen reagiert. Die Verwendung des Standardports 8080 verhindert, dass App Engine mit seiner NGINX-Ebene HTTP-Antworten komprimiert. Beachten Sie: Wenn Sie den Port 8080 verwenden, werden in den Logdateien Ihrer Anwendung Warnungen zum Port 8080 und zu NGINX angezeigt.

Andere Web-Frameworks

Neben Django und Flask können Sie auch andere Web-Frameworks mit App Engine verwenden. Beispiel: uwsgi und Tornado, um die Option zu aktivieren. Das folgende Beispiel zeigt, wie uwsgi mit App Engine verwendet wird:

runtime: python39
entrypoint: uwsgi --http-socket :$PORT --wsgi-file main.py --callable app --master --processes 1 --threads 2
uwsgi==2.0.22
Flask==3.0.0

Umgebungsvariablen

Folgende Umgebungsvariablen werden durch die Laufzeit festgelegt:

Umgebungsvariable Beschreibung
GAE_APPLICATION ID der App Engine-Anwendung. Diese ID hat das Präfix „region code~”, z. B. „e~” für Anwendungen, die in Europa bereitgestellt werden.
GAE_DEPLOYMENT_ID ID der aktuellen Bereitstellung.
GAE_ENV App Engine-Umgebung. Legen Sie standard fest.
GAE_INSTANCE ID der Instanz, auf der Ihr Dienst gerade ausgeführt wird.
GAE_MEMORY_MB Größe des für den Anwendungsprozess verfügbaren Speichers in MB
GAE_RUNTIME Laufzeit, die in der Datei app.yaml angegeben ist.
GAE_SERVICE Dienstname, der in der Datei app.yaml angegeben ist. Wenn kein Dienstname angegeben ist, wird als Wert default festgelegt.
GAE_VERSION Aktuelle Versionsbezeichnung Ihres Dienstes.
GOOGLE_CLOUD_PROJECT Google Cloud-Projekt-ID, die der Anwendung zugeordnet ist.
PORT Port, der HTTP-Anfragen empfängt.
NODE_ENV (nur in der Node.js-Laufzeit verfügbar) Erhält den Wert production, wenn der Dienst bereitgestellt wird.

Sie können in der Datei app.yaml weitere Umgebungsvariablen definieren. Die oben angegebenen Werte können aber mit Ausnahme von NODE_ENV nicht überschrieben werden.

HTTPS und Weiterleitungsproxys

App Engine terminiert HTTPS-Verbindungen am Load-Balancer und leitet Anfragen an die Anwendung weiter. Einige Anwendungen müssen die ursprüngliche Anfrage-IP-Adresse und das Protokoll bestimmen. Die IP-Adresse des Nutzers ist im Standardheader X-Forwarded-For verfügbar. Bei Anwendungen, die diese Informationen benötigen, sollte das Web-Framework so konfiguriert werden, dass dem Proxy vertraut wird.

Dateisystem

Die Laufzeit enthält ein vollständiges Dateisystem. Das Dateisystem ist schreibgeschützt, mit Ausnahme des Speicherorts /tmp, bei dem es sich um ein virtuelles Laufwerk handelt, das Daten im RAM Ihrer App Engine-Instanz speichert.

Metadatenserver

Jede Instanz einer Anwendung kann mit dem App Engine-Metadatenserver Informationen über die Instanz und das Projekt abfragen.

Sie können auf den Metadatenserver über die folgenden Endpunkte zugreifen:

  • http://metadata
  • http://metadata.google.internal

An den Metadatenserver gesendete Anfragen müssen den Anfrageheader Metadata-Flavor: Google enthalten. Dieser Header gibt an, dass die Anfrage zum Abrufen von Metadatenwerten gesendet wurde.

In der folgenden Tabelle sind die Endpunkte aufgeführt, an die Sie HTTP-Anfragen für bestimmte Metadaten senden können:

Metadatenendpunkt Beschreibung
/computeMetadata/v1/project/numeric-project-id Projektnummer, die Ihrem Projekt zugewiesen ist.
/computeMetadata/v1/project/project-id Projekt-ID, die Ihrem Projekt zugewiesen ist.
/computeMetadata/v1/instance/region Region, in der die Instanz ausgeführt wird.
/computeMetadata/v1/instance/service-accounts/default/aliases
/computeMetadata/v1/instance/service-accounts/default/email E-Mail-Adresse des Standarddienstkontos, die Ihrem Projekt zugewiesen ist.
/computeMetadata/v1/instance/service-accounts/default/ Listet alle Standarddienstkonten für Ihr Projekt auf.
/computeMetadata/v1/instance/service-accounts/default/scopes Listet alle unterstützten Bereiche für die Standarddienstkonten auf.
/computeMetadata/v1/instance/service-accounts/default/token Gibt das Authentifizierungstoken zurück, mit dem Ihre Anwendung gegenüber anderen Google Cloud APIs authentifiziert werden kann.

Wenn Sie z. B. Ihre Projekt-ID abrufen möchten, senden Sie eine Anfrage an http://metadata.google.internal/computeMetadata/v1/project/project-id.