Anwendung testen und bereitstellen

Regions-ID

REGION_ID ist ein abgekürzter Code, den Google anhand der Region zuweist, die Sie beim Erstellen Ihrer Anwendung ausgewählt haben. Der Code bezieht sich nicht auf ein Land oder eine Provinz, auch wenn einige Regions-IDs häufig verwendeten Länder- und Provinzcodes ähneln können. Bei Anwendungen, die nach Februar 2020 erstellt wurden, ist REGION_ID.r in den App Engine-URLs enthalten. Bei Anwendungen, die vor diesem Datum erstellt wurden, ist die Regions-ID in der URL optional.

Hier finden Sie weitere Informationen zu Regions-IDs.

Hier erfahren Sie, wie Sie eine Anwendung lokal ausführen, bereitstellen und in App Engine testen.

Lokal ausführen

Wenn Sie die Funktionsweise der Anwendung vor der Bereitstellung testen möchten, führen Sie sie in Ihrer lokalen Umgebung mit den Entwicklungstools aus, die Sie sonst auch verwenden.

z. B. npm start.

Anwendung bereitstellen

Stellen Sie die Anwendung mit dem Befehl gcloud app deploy in App Engine bereit. Dieser Befehl legt mithilfe des Dienstes Cloud Build automatisch ein Container-Image an und stellt es anschließend in der flexiblen App Engine-Umgebung bereit. Der Container enthält alle von Ihnen lokal am Laufzeit-Image vorgenommenen Änderungen.

Wenn Sie Anwendungen programmatisch bereitstellen möchten, verwenden Sie die Admin API.

Hinweise

Für die Bereitstellung der Anwendung müssen folgende Voraussetzungen erfüllt sein:

Erfolgreiche Bereitstellung gewährleisten

Wenn Sie aktualisierte Systemdiagnosen aktivieren und die Anwendung nicht den fehlerfreien Status "Healthy" erreicht, werden die Bereitstellungen zurückgesetzt.

Bei der Bereitstellung der ersten Anwendung in der flexiblen Umgebung kann es während des Einrichtens der virtuellen Maschine (VM) und weiterer Infrastruktur zu einer Verzögerung kommen. Nach der Ersteinrichtung wird anhand von Systemdiagnosen überprüft, ob die Instanz fehlerfrei ist und Traffic empfangen kann. Im Feld initial_delay_sec im Abschnitt liveness_check der Datei „app.yaml“ ist eine Zeitspanne festgelegt. Erreicht die Anwendung nicht innerhalb dieser Zeitspanne den Status „Ready“, schlägt die Bereitstellung fehl und wird zurückgesetzt.

Die Anwendung braucht eventuell mehr Zeit, bis sie bereit ist. Sie können für die Initialisierung der Anwendung beispielsweise große Dateien herunterladen oder Caches vorab laden. Aktualisierte Systemdiagnosen bieten die Möglichkeit, die Zeitspanne zu verlängern. Dazu müssen Sie die Konfigurationseinstellung app_start_timeout_sec im Abschnitt readiness_check der app.yaml-Datei entsprechend ändern.

Wenn Ihre Bereitstellung fehlschlägt, sorgen Sie dafür, dass die Cloud Build API in Ihrem Projekt aktiviert ist. App Engine aktiviert diese API automatisch, wenn Sie eine Anwendung zum ersten Mal bereitstellen. Wenn die API seither deaktiviert wurde, schlagen Bereitstellungen fehl.

Dienst erstellen

Zur Bereitstellung der Anwendung in App Engine stellen Sie Versionen der Anwendungsdienste und alle zugehörigen Konfigurationsdateien bereit.

Zum Bereitstellen Ihres Anwendungsdienstes führen Sie den folgenden Befehl in dem Verzeichnis aus, das die Datei app.yaml des Dienstes enthält:

gcloud app deploy

Standardmäßig wird mit dem Befehl gcloud app deploy nur die Datei app.yaml im aktuellen Verzeichnis bereitgestellt. Wenn Sie diesen Befehl ausführen, generiert App Engine eine eindeutige ID für die bereitgestellte Version, stellt die Version in dem Cloud-Projekt bereit, für das Sie die gcloud CLI konfiguriert haben, und leitet den gesamten Traffic an die neue Version weiter. Die neue Version wird dann zur Standardversion.

Sie können das Standardverhalten des Befehls gcloud app deploy ändern. Dazu geben Sie bestimmte Dateien als Ziel an, geben Versionen an oder fügen zusätzliche Parameter hinzu:

  • Sie können aber auch die anderen Konfigurationsdateien Ihres Dienstes bereitstellen und dafür jede Datei einzeln als Ziel angeben und bereitstellen. Beispiel:

    gcloud app deploy cron.yaml
    gcloud app deploy dispatch.yaml
    gcloud app deploy index.yaml
    
  • Mit dem Flag --version geben Sie eine benutzerdefinierte Versions-ID an.

  • Mit dem Flag --no-promote verhindern Sie, dass der Traffic automatisch zur neuen Version geleitet wird.

  • Mit dem Flag --project stellen Sie die Version in einem bestimmten Cloud-Projekt bereit.

Wenn Sie beispielsweise den durch app.yaml definierten Dienst in einem bestimmten Cloud-Projekt bereitstellen möchten, weisen Sie ihm eine benutzerdefinierte Versions-ID zu und verhindern Sie, dass Traffic an die neue Version weitergeleitet wird:

gcloud app deploy --project PROJECT_ID --version VERSION_ID --no-promote

Weitere Informationen zu diesem Befehl finden Sie in der Referenz zu gcloud app deploy.

Mehrere Dienste bereitstellen

Verwenden Sie dieselben Bereitstellungsbefehle, um die verschiedenen Dienste Ihrer Anwendung bereitzustellen oder zu aktualisieren.

Zum Bereitstellen mehrerer Dienste müssen Sie die Datei app.yaml für jeden einzelnen Dienst separat bereitstellen. Beispiel:

gcloud app deploy service1/app.yaml
gcloud app deploy service2/app.yaml

Sie können mit einem einzigen Bereitstellungsbefehl mehrere Dateien angeben:

gcloud app deploy service1/app.yaml service2/app.yaml

Anforderungen an die Bereitstellung mehrerer Dienste

  • Sie müssen zuerst eine Version der Anwendung für den Dienst default bereitstellen, bevor Sie weitere Dienste erstellen und bereitstellen können.

  • Geben Sie die ID des jeweiligen Dienstes in der zugehörigen app.yaml-Konfigurationsdatei an. Fügen Sie dazu in jede Konfigurationsdatei die Elementdefinition service ein. Wenn Sie die Elementdefinition in der Konfigurationsdatei nicht angeben, wird standardmäßig die Version für den Dienst default bereitgestellt.

Dateien ignorieren

Sie können eine Datei .gcloudignore verwenden, um Dateien und Verzeichnisse anzugeben, die beim Bereitstellen Ihrer Dienste nicht in Google Cloud hochgeladen werden sollen. So lassen sich Build-Artefakte und andere Dateien ausschließen, die beim Bereitstellen nicht hochgeladen werden müssen.

Weitere Informationen zur Syntax der Datei .gcloudignore finden Sie in der Referenz zu gcloud.

Container manuell für die Bereitstellung erstellen

Wenn Sie die Container-Images außerhalb der Google Cloud Platform erstellen möchten, müssen Sie Ihre Images zuerst in ein Container-Image-Repository hochladen, bevor Sie sie mit dem Befehl gcloud app deploy in App Engine bereitstellen können.

Wenn Sie die Container-Images beispielsweise lokal mit Docker erstellen, können Sie die Images zur Google Registry übertragen und dann die URL des Images im Flag --image-url des Befehls angeben:

gcloud app deploy --image-url gcr.io/YOUR_PROJECT_ID/YOUR_CONTAINER_IMAGE

Automatisierte kontinuierliche Bereitstellungspipelines verwenden

Sie können mit Cloud Build Bereitstellungen in kontinuierlichen Bereitstellungspipelines automatisieren. Weitere Informationen finden Sie in der Cloud Build-Dokumentation unter Artefakte bereitstellen und Builds mit Build-Triggern automatisieren.

Docker-Basis-Images für Node.js

Wenn Sie eine benutzerdefinierte Node.js-Laufzeit neu erstellen möchten, können Sie im Dockerfile ein Basis-Image verwenden:

Laufzeit Docker-Befehl
Node.js FROM gcr.io/google-appengine/nodejs

App ansehen

Wenn Sie die Anwendung in App Engine bereitgestellt haben, können Sie mit dem folgenden Befehl den Browser starten und die Anwendung unter https://PROJECT_ID.REGION_ID.r.appspot.com aufrufen:

gcloud app browse

In App Engine testen

Bevor Sie eine neue Version zum Empfang von Traffic konfigurieren, können Sie sie in App Engine testen. Eine neue Version des Dienstes default wird beispielsweise so getestet:

  1. Stellen Sie die neue Version bereit und fügen Sie das Flag --no-promote hinzu:

    gcloud app deploy --no-promote
  2. Greifen Sie über folgende URL auf die neue Version zu:

    https://VERSION_ID-dot-default-dot-PROJECT_ID.REGION_ID.r.appspot.com

    Sie können die neue Version jetzt in der App Engine-Laufzeitumgebung testen. Sie können Ihre Anwendung debuggen, indem Sie deren Logs im Log-Explorer der Google Cloud Console aufrufen. Weitere Informationen finden Sie unter Anwendungslogs schreiben.

    An https://PROJECT_ID.REGION_ID.r.appspot.com gesendete Anfragen werden weiterhin an die Version weitergeleitet, die zuvor für eingehenden Traffic konfiguriert wurde.

  3. Wenn Sie Traffic an die neue Version senden möchten, migrieren Sie den Traffic mithilfe der Google Cloud Console:

    Versionen verwalten

    Wählen Sie die Version aus, die Sie gerade bereitgestellt haben, und klicken Sie auf Traffic migrieren.

Zum Testen neuer Versionen anderer Dienste können Sie ebenso vorgehen. Ersetzen Sie in der URL einfach default durch den Namen des Dienstes:

Weitere Informationen zum Auswählen bestimmter Dienste und Versionen finden Sie unter Anfragerouting.

Fehlerbehebung

Beim Bereitstellen von Anwendungen können folgende Fehlermeldungen angezeigt werden:

PERMISSION_DENIED: Operation not allowed
The "appengine.applications.create" permission is required.
Wenn das Cloud-Projekt nicht die erforderliche App Engine-Anwendung enthält, kann der Befehl gcloud app deploy beim Ausführen des Befehls gcloud app create fehlschlagen. Nur Konten mit der Rolle „Inhaber“ haben die erforderlichen Berechtigungen zum Erstellen von App Engine-Anwendungen.
502 Bad Gateway
Das Cloud-Projekt kann nicht gestartet werden, wenn app.yaml falsch konfiguriert ist. Prüfen Sie die Anwendungslogs auf detailliertere Fehlermeldungen.
[13] An internal error occurred while creating a Cloud Storage bucket.

App Engine erstellt einen multiregionalen Cloud Storage-Standard-Bucket in Ihrem Namen in derselben Region, in der Ihre Anwendung erstellt wird. Dieser Bucket ist erforderlich, um den Inhalt Ihrer Anwendung zu speichern. Dieser Fehler wird zurückgegeben, wenn dieser Bucket in den folgenden Szenarien nicht erstellt werden kann:

[13] An internal error occurred.

Dieser Fehler kann auftreten, wenn Sie Ihren Dienst mit einer Netzwerkkonfiguration über eine freigegebene VPC bereitstellen. Achten Sie darauf, dass Ihre flexible App Engine-Umgebung alle Anforderungen für diese Konfiguration erfüllt. Prüfen Sie dann, ob die konfigurierten Dienstkonten für diese Einrichtung in Ihrem Projekt vorhanden sind. Andernfalls müssen Sie die Konten wiederherstellen. Die Region des Subnetzes im Hostprojekt der freigegebenen VPC muss mit dem Standort übereinstimmen, an dem Ihre App Engine-Umgebung erstellt wurde.

Wenn das Problem weiterhin besteht, nachdem Sie sichergestellt haben, dass die app.yaml-Konfiguration gültig ist, stellen Sie mit dem Google Cloud SDK den Dienst noch einmal bereit, fügen Sie das Flag --verbosity=debug hinzu und wenden Sie sich an den GCP-Support durch Angeben der Befehlsausgabe.

IP space of {USER_SUBNETWORK_NAME} is exhausted and needs to be expanded.

Wenn die Bereitstellung mit dieser Fehlermeldung fehlschlägt, bedeutet dies, dass das für den App Engine-Dienst konfigurierte Netzwerk keine Adressen mehr für die neuen Instanzen des Dienstes hat. Zum Beheben des Problems können Sie die VPC-Bereiche in dem Subnetz erweitern, das für den Dienst der flexiblen App Engine-Umgebung konfiguriert ist.