Java-App bereitstellen

Stellen Sie Ihre Anwendungen für das Hochladen und Ausführen in App Engine bereit. Bei der Bereitstellung von Anwendungen erstellen Sie in App Engine Versionen dieser Anwendungen und ihrer entsprechenden Dienste. Sie können vollständige Anwendungen bereitstellen, einschließlich aller Quellcode- und Konfigurationsdateien. Außerdem haben Sie die Möglichkeit, einzelne Versionen oder Konfigurationsdateien bereitzustellen und zu aktualisieren.

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

Vorbereitung

Beachten Sie vor dem Bereitstellen der Anwendung Folgendes:

Zum Bereitstellen der Anwendung mit dem Maven-Build-Tool müssen Sie das Projekt zur Verwendung des Maven-Plug-ins für App Engine einrichten.

gcloud-CLI installieren

Zum Bereitstellen der Anwendung mit der gcloud CLI müssen Sie die gcloud CLI herunterladen, installieren und initialisieren.

SDK herunterladen

Wenn die gcloud CLI bereits installiert ist und für eine andere Cloud-Projekt-ID konfiguriert werden soll, als Sie bei der Initialisierung der CLI angegeben haben, finden Sie entsprechende Erläuterungen unter gcloud CLI-Konfigurationen verwalten.

Proxy verwenden

Wenn Sie den Bereitstellungsbefehl von einem System mit HTTP- oder HTTPS-Proxy ausführen, müssen Sie das Tool für die Kommunikation über den Proxy konfigurieren.

Führen Sie folgende Befehle aus, um die gcloud CLI zu konfigurieren:

gcloud config set proxy/type [PROXY_TYPE]
gcloud config set proxy/address [PROXY_ADDRESS]
gcloud config set proxy/port [PROXY_PORT]

Sie können für den Proxy auch username und password festlegen. Weitere Informationen finden Sie unter gcloud config.

Eine App bereitstellen

Stellen Sie Ihre Anwendung in App Engine entweder mit dem Maven-Build-Tool (empfohlen) oder dem Befehl gcloud app deploy aus dem Stammverzeichnis Ihrer Anwendung bereit.

Im Projektverzeichnis der obersten Ebene, in dem sich die Datei pom.xml befindet, führen Sie den folgenden Befehl aus. Damit erstellen Sie die Anwendung mit dem Maven-Build-Tool.

mvn package appengine:deploy -Dapp.deploy.projectId=PROJECT_ID

Ersetzen Sie PROJECT_ID durch die ID Ihres Cloud-Projekts. Wenn in der Datei pom.xml bereits Ihre Projekt-ID angegeben ist, müssen Sie das Attribut -Dapp.deploy.projectId nicht in dem von Ihnen ausgeführten Befehl einfügen.

gcloud-Befehlszeile verwenden

  gcloud app deploy [CONFIGURATION_FILES]

Ersetzen Sie [CONFIGURATION_FILES] durch den Pfad zu einer oder mehreren Konfigurationsdateien. Verwenden Sie ein einzelnes Leerzeichen, um Pfadnamen zu trennen.

Optionale Flags:

  • --version: Gibt eine benutzerdefinierte Versions-ID an. Wenn Sie keine Versions-ID angeben, wird diese von App Engine generiert.
  • --no-promote: Stellt Ihre Anwendung bereit, ohne den gesamten Traffic automatisch an diese Version weiterzuleiten. Standardmäßig wird jede bereitgestellte Version automatisch so konfiguriert, dass sie 100 % des Traffics empfängt.
  • --project: Gibt eine andere Cloud-Projekt-ID als jene an, die Sie in der gcloud CLI als Standard initialisiert haben.

Weitere Informationen erhalten Sie in der gcloud app deploy-Referenz oder bei Ausführen von gcloud help über die Befehlszeile.

Eindeutige Versions-IDs auswählen

Bei manuell skalierten Instanzen sollte die ID Ihrer Version zur Unterscheidung von numerischen Instanz-IDs mit einem Buchstaben beginnen. Auf diese Weise werden Anfragen zum richtigen Ziel weitergeleitet und die Mehrdeutigkeit von URL-Mustern wie 123-dot-my-service.[REGION_ID].r.appspot.com, die auf zwei Arten interpretiert werden können, wird vermieden.

  • Wenn die Version 123 existiert, wird die Anfrage an die Version 123 des Diensts my-service weitergeleitet.
  • Falls die Version 123 nicht vorhanden ist, wird die Anfrage stattdessen an die Instanz mit der ID 123 weitergeleitet, auf der die Versionen des Dienstes my-service ausgeführt werden.

Sie können Ihre Versionen beliebig für die Instanzen benennen, die für Autoscaling oder einfache Skalierung konfiguriert sind, da diese Instanzen nicht als Ziel unterstützt werden.

Mehrere Dienstanwendungen bereitstellen

Wenn Ihre Anwendung in mehrere Dienste einbezogen wird, können Sie einzelne Dienste zielgerichtet oder alle Dienste gleichzeitig bereitstellen und aktualisieren. Beim Bereitstellen von Aktualisierungen für Dienste können einzelne Konfigurationsdateien aktualisiert werden. Sie können auch in den entsprechenden Versionen den Quellcode aktualisieren.

Sie können beispielsweise zwei Versionen in App Engine bereitstellen und erstellen, wobei jede Version in einem eigenen Dienst ausgeführt wird. Die erste Version dient als Front-End-Dienst und die andere als Back-End Ihrer Anwendung. Sie können dann einzelne Konfigurationsdateien bereitstellen und nur die Einstellungen eines Dienstes aktualisieren. Es ist auch möglich, eine neue Version für einen Dienst bereitzustellen und den Quellcode des Front-Ends, des Back-Ends oder sowohl des Front-Ends als auch des Back-Ends zu aktualisieren.

Anforderungen für mehrere Dienste

Dieselben Bereitstellungsbefehle verwenden Sie, um die verschiedenen Dienste Ihrer Anwendung mit den folgenden Anforderungen bereitzustellen oder zu aktualisieren:

  • Wichtig ist, dass Sie zuerst eine Version Ihrer Anwendung für den default-Dienst bereitstellen, um nachfolgende Dienste erstellen und bereitstellen zu können.

  • Sie müssen die ID des Dienstes in der Konfigurationsdatei appengine-web.xml der entsprechenden Version angeben. Fügen Sie dazu in jede Konfigurationsdatei die Elementdefinition module: [YOUR_SERVICE_ID] ein. Wenn Sie die Elementdefinition in der Konfigurationsdatei nicht angeben, wird standardmäßig die Version für den Dienst default bereitgestellt.

  • Sie müssen alle entsprechenden appengine-web.xml-Konfigurationsdateien im Bereitstellungsbefehl angeben, damit Sie mehrere Dienste gleichzeitig bereitstellen können. Der default-Dienst muss zuerst aufgeführt werden.

So stellen Sie mehrere Dienste bereit:

Im Stammverzeichnis der Anwendung, in dem sich die Konfigurationsdateien befinden, führen Sie den Bereitstellungsbefehl aus und geben die relativen Pfade und Dateinamen für die appengine-web.xml-Datei jedes Diensts an:

Maven-Build-Tool verwenden

Enthält das Stammverzeichnis Ihres Projekts nur Ihre Dienste, können Sie mit einem Maven-Befehl alle auf einmal bereitstellen.

Der Bereitstellungsbefehl durchläuft die Dienste des Projekts, um die Konfigurationsdateien zu finden und anschließend jeden Dienst bereitzustellen.

So stellen Sie mehrere Dienste mit dem Maven-Plug-in bereit:

  1. Prüfen Sie, ob appengine-maven-plugin zur übergeordneten Datei pom.xml hinzugefügt wurde.
  2. Führen Sie dazu diesen Befehl aus:

    mvn package appengine:deploy -Dapp.deploy.projectId=PROJECT_ID

    Ersetzen Sie PROJECT_ID durch die ID Ihres Cloud-Projekts. Wenn in der Datei pom.xml bereits Ihre Projekt-ID angegeben ist, müssen Sie das Attribut -Dapp.deploy.projectId nicht in dem von Ihnen ausgeführten Befehl einfügen.

gcloud verwenden

    gcloud app deploy [CONFIGURATION_FILES]

Ersetzen Sie [CONFIGURATION_FILES] durch den Pfad zu einer oder mehreren Konfigurationsdateien. Verwenden Sie ein einzelnes Leerzeichen, um Pfadnamen zu trennen.

Sie erhalten eine Bestätigung über die Befehlszeile, sobald jeder Dienst erfolgreich bereitgestellt wurde.

Build-Logs ansehen

Cloud Build streamt Build- und Bereitstellungslogs, die im Abschnitt „Cloud Build-Verlauf“ der Cloud Console angezeigt werden können. Wählen Sie im Drop-down-Menü Region oben auf der Seite die Region aus, nach der Sie filtern möchten, um Builds in der Region der Anwendung aufzurufen.

Indexe aktualisieren

Sie laden die Konfigurationsdatei datastore-indexes.xml in Datastore hoch, um die von Ihrer Anwendung verwendeten Indexe zu erstellen oder zu aktualisieren. Noch nicht existierende Indexe werden nach dem Hochladen der Konfigurationsdatei erstellt.

Es kann eine Weile dauern, bis Datastore alle Indexe erstellt und diese Indizes App Engine zur Verfügung stehen. Wenn Ihre Anwendung bereits für Traffic konfiguriert ist, können bei Abfragen Ausnahmen auftreten, für die ein Index benötigt wird, der noch erstellt wird.

Sie müssen genügend Zeit für das Erstellen aller Indexe einräumen. Beispiel:

Weitere Informationen zu Indexen finden Sie unter Datastore-Indexe konfigurieren.

Fehlerbehebung

Nachfolgend finden Sie einige Beispiele für allgemeine Fehlermeldungen:

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.
Command not found
Wenn Sie bei der Installation des App Engine SDK (verworfen) keine Symlinks für die dev_appserver.sh-Tools erstellt haben, müssen Sie möglicherweise den vollständigen Verzeichnispfad angeben, damit Sie das Tool ausführen können, z. B. [PATH_TO_APP_ENGINE_SDK]/dev_appserver.sh.
Import Error
Wenn Sie sowohl die gcloud CLI als auch das ursprüngliche App Engine SDK installiert haben, können die Einträge in Ihrem PATH einen Konflikt und Importfehler verursachen. Sollten bei der Ausführung von Befehlen der gcloud CLI Fehler aufgetreten sein, versuchen Sie, explizit das ursprüngliche App Engine SDK zu verwenden. Sie können den Eintrag für das ursprüngliche App Engine SDK in Ihrem PATH nach vorne verschieben, damit diese Befehle Vorrang haben. Alternativ können Sie den Befehl ausführen, indem Sie den vollständigen Verzeichnispfad angeben: [PATH_TO_APP_ENGINE_SDK]/java_dev_appserver.sh.
[400] The first service (module) you upload to a new application must be the 'default' service (module)
Damit Sie die Dienste der Anwendung erstellen und bereitstellen können, muss zuvor der default-Dienst erstellt und bereitgestellt werden. Weitere Informationen zum Bereitstellen einer Version für den default-Dienst finden Sie unter Mehrere Dienstanwendungen bereitstellen.
Too Many Versions (403)
In App Engine ist die Anzahl der bereitgestellten Versionen Ihrer Anwendung begrenzt. Die Grenzen für kostenlose und bereitgestellte Anwendungen unterscheiden sich. Sie können mit der Console eine ältere Version löschen und danach den neuesten Code hochladen. You do not have permission to modify this app (403)
Dieser Fehler kann auftreten, wenn das von Ihnen verwendete Konto keine Berechtigung zum Bereitstellen der Anwendungs-ID hat, die Sie im Befehl oder in der appengine-web.xml angeben. Prüfen Sie, ob die Anwendungs-ID richtig ist und mit dem Wert der Projekt-ID in der Console übereinstimmt. Prüfen Sie dann die Berechtigungen in der Console und achten Sie darauf, dass Ihr Konto eine ausreichende Berechtigungsstufe zum Bereitstellen von Anwendungen hat.
[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 die app.yaml-Konfigurationsdatei von App Engine unter dem Schlüssel vpc_access_connector eine ungültige name-Ressource enthält. Achten Sie darauf, dass das Feld name das richtige Projekt und die richtige Region enthält, in der der Connector für serverlosen VPC-Zugriff erstellt wird.

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.

Andere Bereitstellungsfehler

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.

Weitere Informationen