Python 3.8 ist jetzt allgemein verfügbar.

Python 3-Laufzeitumgebung

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

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

Python 3-Versionen

Die Python 3-Laufzeit unterstützt Python 3.7 und Python 3.8, und verwendet die neueste stabile Version der von Ihnen ausgewählten Version. Bei der Anwendungsbereitstellung aktualisiert App Engine automatisch auf neue Release-Versionen. 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 Python 3.8.0.

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. Der Einstiegspunkt sollte einen Webserver starten, der den von der Umgebungsvariable PORT angegebenen Port überwacht. Beispiel:

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.

App Engine fügt außerdem automatisch das Feld gunicorn auf Ihre requirements.txt , wenn Sie das Argument entrypoint angeben.

Best Practices für Einstiegspunkte

  • Fügen Sie gunicorn nicht in Ihre requirements.txt-Datei ein, es sei denn, Sie geben den Einstiegspunkt an.

  • 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 1
    F2 2
    F4 4
    F4_1G 8
    B1 1
    B2 2
    B4 4
    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 :8080 -w 2 main:app
    

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: python38
entrypoint: uwsgi --http-socket :8080 --wsgi-file main.py --callable app --master --processes 1 --threads 2
uwsgi==2.0.19.1
flask==1.1.2

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 Cloud-Projekt-ID, die der Anwendung zugeordnet ist.
PORT Port, der HTTP-Anfragen empfängt.

Sie können zusätzliche Umgebungsvariablen in Ihrer app.yaml-Datei definieren. Die oben genannten Werte können jedoch nicht überschrieben werden.

HTTPS und Weiterleitungsproxys

App Engine beendet 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

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/zone Zone, 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.