Mit einer benutzerdefinierten Laufzeit können Sie eine alternative Implementierung einer beliebigen unterstützten flexiblen Umgebungs-Sprache verwenden oder eine von Google bereitgestellte Sprache wählen. Außerdem können Sie Code in jeder anderen Sprache schreiben, die eingehende HTTP-Anfragen verarbeiten kann (Beispiel). Mit einer benutzerdefinierten Laufzeit bietet und verwaltet die flexible Umgebung die Skalierungs-, Monitoring- und Lastenausgleichsinfrastruktur für Sie, sodass Sie sich ganz auf das Erstellen Ihrer Anwendung konzentrieren können.
Bevor Sie eine benutzerdefinierte Laufzeit erstellen, müssen Sie folgende Vorbereitungen treffen:
- Geben Sie einen eine
app.yaml
-Datei an, die die Laufzeitkonfiguration Ihrer Anwendung in App Engine beschreibt. - Ein
Dockerfile
hinzufügen, das die Laufzeitumgebung intern konfiguriert. - Darauf achten, dass der Code einigen grundlegenden Regeln entspricht.
app.yaml
-Datei angeben
Die Konfigurationsdatei app.yaml
muss mindestens die folgenden Einstellungen enthalten:
runtime: custom
env: flex
Weitere Informationen darüber, welche Einstellungen Sie sonst noch für Ihre Anwendung festlegen können, finden Sie unter Anwendung mit app.yaml konfigurieren.
Dockerfile erstellen
Eine umfassende Dokumentation zum Erstellen von Dockerfiles finden Sie auf der Docker-Website. Wenn Sie eine benutzerdefinierte Laufzeit verwenden, müssen Sie ein Dockerfile bereitstellen, unabhängig davon, ob Sie ein eigenes Basis-Image bereitstellen oder eines der Basis-Images von Google verwenden.
Basis-Image angeben
Der erste Befehl in einem Dockerfile ist normalerweise der Befehl FROM
, der ein Basis-Image angibt.
Ein Basis-Image wird verwendet, um den Container und Ihre Anwendung zu erstellen. Sie können Ihr eigenes Basis-Image erstellen oder ein Basis-Image aus Container-Registries wie DockerHub auswählen.
Dockerfile suchen
Im Allgemeinen heißt das Dockerfile immer Dockerfile
und befindet sich im selben Verzeichnis wie die entsprechende app.yaml
-Datei. Aber in einigen Fällen gibt die Tool-Umgebung möglicherweise andere Anforderungen vor. Cloud SDK-basierte Java-Tools wie die Maven-, Gradle-, Eclipse- und IntelliJ-Plug-ins erfordern beispielsweise, dass sich Dockerfile
in src/main/docker/Dockerfile
und die app.yaml
-Datei in src/main/appengine/app.yaml
befindet. Weitere Informationen finden Sie in der Dokumentation zu Ihrer Tool-Umgebung.
Codestruktur
In diesem Abschnitt wird das Verhalten beschrieben, das vom Code implementiert werden muss, unabhängig davon, ob Sie ein von Google bereitgestelltes Basis-Image oder Ihr eigenes Basis-Image verwenden.
Port 8080 überwachen
Das App Engine-Frontend leitet eingehende Anfragen an das entsprechende Modul an Port 8080 weiter. Sie müssen darauf achten, dass Ihr Anwendungscode Port 8080 überwacht.
Lifecycle-Event verarbeiten
Die flexible Umgebung sendet in regelmäßigen Abständen bestimmte Lebenszyklusereignisse an die Anwendung.
Anwendung herunterfahren
Wenn eine Instanz heruntergefahren werden muss, werden neu eingehende Anfragen an andere Instanzen weitergeleitet (falls vorhanden) und Anfragen, die aktuell verarbeitet werden, haben Zeit, zum Ende zu kommen. Beim Herunterfahren einer Instanz sendet die flexible Umgebung normalerweise das Signal STOP
(SIGTERM
) an den Anwendungscontainer. Die Anwendung muss nicht auf dieses Ereignis reagieren, kann dies aber nutzen, um alle erforderlichen Bereinigungsaktionen auszuführen, bevor der Container heruntergefahren wird. Unter normalen Bedingungen wartet das System bis zu 30 Sekunden darauf, dass die Anwendung beendet wird, und sendet dann ein KILL
- (SIGKILL
-)Signal, das die Instanz sofort herunterfährt.
In seltenen Fällen kann App Engine durch Ausfälle daran gehindert werden, vor dem Herunterfahren 30 Sekunden zu warten. Das bedeutet, dass die Signale STOP
und KILL
möglicherweise nicht gesendet werden, bevor eine Instanz beendet wird. Daher empfiehlt es sich, den Status der Instanz regelmäßig zu überprüfen und sie primär als speicherinternen Cache und nicht als zuverlässigen Datenspeicher zu verwenden.
Systemdiagnose-Anfragen
Sie können mit regelmäßigen Systemdiagnose-Anfragen überprüfen, ob eine VM-Instanz erfolgreich bereitgestellt wurde und ob eine ausgeführte Instanz weiterhin fehlerfrei ausgeführt wird.
Benutzerdefinierte Laufzeit erstellen und bereitstellen
Nachdem Sie die Dateien app.yaml
und DOCKER
konfiguriert haben, können Sie dieses Container-Image in App Engine erstellen und bereitstellen.
Alternativ können Sie vordefinierte Container-Images Ihrer benutzerdefinierten Laufzeiten bereitstellen, die in Artifact Registry gespeichert sind. Sie können beispielsweise Cloud Build verwenden, um Ihre Images separat zu erstellen und dann in Artifact Registry zu speichern. Weitere Informationen finden Sie unter Images hoch- und herunterladen.
Anwendung in Google Cloud einbinden
Anwendungen, die in benutzerdefinierten Laufzeiten ausgeführt werden, können mithilfe der Google Cloud-Clientbibliotheken auf die Google Cloud Platform-Dienste zugreifen. Anwendungen in benutzerdefinierten Laufzeiten können auch alle Dienste von Drittanbietern über Standard-APIs verwenden.
Mit Google Cloud-Diensten authentifizieren
Standardanmeldedaten für Anwendungen bieten die einfachste Möglichkeit, sich mit Google APIs zu authentifizieren und sie aufzurufen.
Wenn Ihre Anwendung Cloud Build zum Kompilieren von Docker-Images verwendet, hostet das Netzwerk cloudbuild
die Standardanmeldedaten für Anwendungen, sodass die zugehörigen Google Cloud-Dienste Ihre Anmeldedaten automatisch finden können.
Weitere Informationen zur Authentifizierung finden Sie unter Authentifizierung bei Google.
Logging
Wenn eine Anfrage an Ihre in App Engine ausgeführte Anwendung gesendet wird, werden die Anfrage- und Antwortdetails automatisch in ein Log geschrieben. Sie können im Log-Explorer der Google Cloud Console angesehen werden.
Wenn die Anwendung eine Anfrage verarbeitet, kann sie auch eigene Logging-Nachrichten in stdout
und stderr
schreiben. Diese Dateien werden automatisch erfasst und können im Logs Explorer angezeigt werden. Nur die neuesten Einträge für stdout
und stderr
werden beibehalten, um ihre Größe zu begrenzen.
Sie können auch benutzerdefinierte Logs in /var/log/app_engine/custom_logs
schreiben. Verwenden Sie dazu eine Datei, die auf .log
oder .json
endet.
Wenn Sie in Ihren Anwendungscontainer Drittanbieter-Agents einfügen, müssen Sie die Agents so konfigurieren, dass sie in stdout
und stderr
oder in einem benutzerdefinierten Log protokollieren.
Dadurch wird sichergestellt, dass alle von diesen Agents generierten Fehler in Cloud Logging sichtbar sind.
Die Anfrage- und Anwendungslogs für Ihre Anwendung werden von einem Cloud Logging-Agent erfasst und maximal 90 Tage lang gespeichert. Die maximale Größe beträgt 1 GB. Wenn Sie Ihre Logs über einen längeren Zeitraum oder wenn sie mehr als 1 GB speichern möchten, können Sie sie in Cloud Storage exportieren. Außerdem besteht die Möglichkeit, Logs zur weiteren Verarbeitung nach BigQuery und Pub/Sub zu exportieren.
Es stehen noch weitere Logs zur Verfügung. Sehen Sie hier einige der Logs, die standardmäßig konfiguriert sind:
Logname | Nutzlasttyp | Zweck |
---|---|---|
crash.log |
Text | Enthält Informationen zu fehlgeschlagenen Einrichtungen; wenn ein Fehler bei der Ausführung Ihrer Anwendung auftritt, prüfen Sie dieses Log |
monitoring.* |
Text | Enthält Informationen aus dem Docker-Container, von dem Daten in Cloud Monitoring veröffentlicht werden |
shutdown.log |
Text | Enthält beim Herunterfahren protokollierte Informationen |
stdout |
Text | Enthält die Standardausgabe der Anwendung |
stderr |
Text | Enthält den Standardfehler des Containers |
syslog |
Text | Enthält das VM-Syslog außerhalb des Docker-Containers |