Python-Anwendung 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:

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.

Anwendung bereitstellen

Um Ihre Anwendung in App Engine bereitzustellen, verwenden Sie den Befehl gcloud app deploy im Verzeichnis Ihrer Konfigurationsdatei, z. B. app.yaml.

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.

gcloud app deploy [CONFIGURATION_FILES]

Standardmäßig wird mit dem Befehl die Konfigurationsdatei app.yaml aus dem aktuellen Verzeichnis bereitgestellt. Wenn Sie den Befehl aus einem Verzeichnis ausführen, das die Datei app.yaml Ihrer Anwendung nicht enthält, oder wenn Sie mehrere Anwendungen bereitstellen möchten, 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. App Engine generiert standardmäßig eine Versions-ID.
  • --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.

Beispiele:

gcloud app deploy
gcloud app deploy app.yaml dos.yaml index.yaml
gcloud app deploy --version [YOUR_VERSION_ID] --no-promote --project [YOUR_PROJECT_ID]

Wenn die ID der bereitgestellten Version mit einer anderen Version übereinstimmt, die in App Engine bereits vorhanden ist, wird die vorhandene Version mit den neu bereitgestellten Dateien überschrieben. Dies kann problematisch sein, wenn die Version Traffic verarbeitet, da der Traffic zur Anwendung möglicherweise unterbrochen wird. Das können Sie vermeiden, wenn Sie die neue Version mit einer anderen Versions-ID bereitstellen und dann den Traffic auf diese Version verschieben.

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 app.yaml der entsprechenden Version angeben. Fügen Sie dazu in jede Konfigurationsdatei die Elementdefinition service: [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 app.yaml-Konfigurationsdateien im Bereitstellungsbefehl angeben, damit Sie mehrere Dienste gleichzeitig bereitstellen können.

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 app.yaml-Datei jedes Diensts an:

gcloud app deploy [CONFIGURATION_FILES]

Bei [CONFIGURATION_FILES] handelt es sich um den Pfad und den Namen einer oder mehrerer Konfigurationsdateien, die durch ein einzelnes Leerzeichen getrennt sind.

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

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 index.yaml 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:

  • Laden Sie die Konfigurationsdatei index.yaml in Datastore hoch, bevor Sie Ihre Version bereitstellen:

    1. Laden Sie die Datei index.yaml in Datastore hoch:

        <pre class="prettyprint lang-sh">gcloud datastore indexes create index.yaml</pre>
        For information, see the <a
        href="/sdk/gcloud/reference/datastore/"><code>gcloud
        datastore</code> reference</a>.
      
    2. Verwenden Sie die Console, um den Status aller Ihrer Indexe zu überwachen:

      Zur Datenspeicher-Seite gehen

    3. Nachdem alle Indexe erstellt wurden, stellen Sie die neue Version in App Engine bereit.

  • Erstellen Sie die Indexe, bevor Sie den Traffic auf Ihre Version migrieren oder aufteilen:

    1. Stellen Sie die neue Version bereit, ohne Traffic an diese Version weiterzuleiten: Sie müssen sowohl die app.yaml- als auch die index.yaml-Datei sowie das Flag --no-promote angeben, damit kein Traffic an die Version weitergeleitet wird:
      gcloud app deploy app.yaml index.yaml --no-promote
    2. Verwenden Sie die Console, um den Status aller Ihrer Indexe zu überwachen:

      Zur Datenspeicher-Seite gehen

    3. Nachdem alle Indexe erstellt wurden, verwenden Sie die Console, um den Traffic zu Ihrer Version zu migrieren oder aufzuteilen:

      Zur Seite „Versionen“

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_CLOUD_SDK]/bin/dev_appserver.py.
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]/dev_appserver.py.
[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.
[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