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 testenApp 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 namensapp
.Ihre App enthält keine Datei
Pipfile
oderPipfile.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 Dateirequirements.txt
vorhanden ist. Fügen Sie der Dateirequirements.txt
nur danngunicorn
hinzu, wenn explizit eingunicorn
-Endpunkt in der Dateiapp.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 Standardports8080
verhindert, dass App Engine mit seiner NGINX-Ebene HTTP-Antworten komprimiert. Beachten Sie: Wenn Sie den Port8080
verwenden, werden in den Logdateien Ihrer Anwendung Warnungen zum Port8080
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:
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
.