Gebündelte App Engine-Dienste migrieren

Google Cloud bietet eigenständige Produkte, die ähnliche Funktionen wie einige der gebündelten Dienste in der Python 2-Laufzeit bieten. Für gebündelte Dienste, die nicht als eigene Produkte in Google Cloud verfügbar sind, wie z. B. Bildverarbeitung, Suche und Messaging, enthält dieser Leitfaden Empfehlungen für Drittanbieter oder andere Problemumgehungen.

Auf dieser Seite wird der Migrationspfad für jeden gebündelten Dienst erläutert.

Informationen zu Google Cloud-Berechtigungen

Da Ihre migrierte Anwendung und die von ihr verwendeten Google Cloud-Dienste nicht mehr in derselben Sandbox-Umgebung ausgeführt werden, benötigt Ihre Anwendung eine Autorisierung für den Zugriff auf die einzelnen Dienste. Wenn Sie beispielsweise mit Firestore im Datastore-Modus (Datastore) oder Cloud Tasks interagieren möchten, muss Ihre Anwendung die Anmeldedaten eines Kontos bereitstellen, das zum Zugriff auf diese Dienste berechtigt ist.

Anwendungen in der App Engine-Standardlaufzeit stellen standardmäßig die Anmeldedaten des App Engine-Standarddienstkontos bereit, das für den Zugriff auf Datenbanken im selben Projekt wie die Anwendung autorisiert ist.

Wenn eine der folgenden Bedingungen erfüllt ist, müssen Sie eine alternative Authentifizierungsmethode verwenden, die Anmeldedaten explizit bereitstellt:

  • Ihre Anwendung und die Memorystore-Datenbank befinden sich in verschiedenen Google Cloud-Projekten.

  • Sie haben die Rollen geändert, die dem App Engine-Standarddienstkonto zugewiesen sind.

Informationen zu alternativen Authentifizierungsmethoden finden Sie unter Authentifizierung für Server-zu-Server-Produktionsanwendungen einrichten.

Authentifizierung für die lokale Entwicklung

Wenn Sie Ihre Anwendung lokal entwickeln oder testen möchten, empfehlen wir die Verwendung eines Dienstkontos. Verwenden Sie aber nicht das App Engine-Standarddienstkonto, da es eine hohe Berechtigungsstufe für alle Aktivitäten in Ihrem Projekt hat. Erstellen und nutzen Sie stattdessen ein Dienstkonto mit der niedrigsten Berechtigungsstufe, die Sie für Ihre jeweilige Entwicklungs- und Testaufgabe benötigen.

Eine Anleitung zum Einrichten eines Dienstkontos und zum Verknüpfen des Dienstkontos mit Ihrer Anwendung finden Sie unter Dienstkonto-Anmeldedaten manuell abrufen und bereitstellen.

Clientbibliotheken installieren

Um Google Cloud-Dienste aus einer Python-Anwendung zu verwenden, ist es am einfachsten, wenn Sie die Python-Clientbibliothek des Dienstes installieren. Die Google Cloud-Dienste bieten auch JSON REST und andere Schnittstellen. Die Schritte zum Installieren der Clientbibliotheken in der App Engine-Laufzeit unterscheiden sich für Python 2- und Python 3-Anwendungen.

Bibliotheken für Python 2-Anwendungen installieren

So installieren Sie eine Bibliothek für Ihre Anwendung, wenn diese in der Python 2-Laufzeit ausgeführt wird:

  1. Erstellen Sie ein Verzeichnis, in dem Sie die Bibliotheken von Drittanbietern speichern können, beispielsweise lib/.

  2. Erstellen Sie im Ordner mit der Datei app.yaml eine Datei requirements.txt und fügen Sie den Namen einer Clientbibliothek hinzu.

    Die folgende Datei kann beispielsweise zum Installieren von Bibliotheken für Pub/Sub und Cloud Tasks verwendet werden:

    google-cloud-pubsub
    google-cloud-tasks
    
  3. Zum Installieren von Bibliotheken in dem von Ihnen erstellten Ordner verwenden Sie pip install. Beispiel:

    pip install -t lib -r requirements.txt
    
  4. Geben Sie in der Datei app.yaml Ihrer Anwendung im Abschnitt libraries die erforderlichen Google RPC- und setuptools-Bibliotheken sowie die optionale SSL-Bibliothek an:

    libraries:
    - name: grpcio
      version: 1.0.0
    - name: setuptools
      version: 36.6.0
    - name: ssl
      version: latest
    

    Für einige Clientbibliotheken ist die SSL-Bibliothek nicht erforderlich. Wenn Sie die SSL-Bibliothek für eine Clientbibliothek, die sie benötigt, nicht einbeziehen, wird im Logs Explorer ein SSL-Fehler angezeigt, wenn die Anwendung eine Anfrage erhält.

  5. Erstellen Sie eine Datei appengine_config.py im selben Ordner wie die Datei app.yaml, falls Sie noch keine haben. Fügen Sie der Datei appengine_config.py Folgendes hinzu:

    # appengine_config.py
    import pkg_resources
    from google.appengine.ext import vendor
    
    # Set path to your libraries folder.
    path = 'lib'
    # Add libraries installed in the path folder.
    vendor.add(path)
    # Add libraries to pkg_resources working set to find the distribution.
    pkg_resources.working_set.add_entry(path)
    

    Achten Sie darauf, dass das Modul pkg_resources verwendet wird. Dieses Modul sorgt dafür, dass Ihre Anwendung die richtige Verteilung der Clientbibliotheken nutzt.

    Für die Datei appengine_config.py im obigen Beispiel wird davon ausgegangen, dass sich der Ordner lib im aktuellen Arbeitsverzeichnis befindet. Wenn Sie nicht garantieren können, dass sich lib immer im aktuellen Arbeitsverzeichnis befindet, geben Sie den vollständigen Pfad zum Ordner lib an. Beispiel:

    import os
    path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'lib')
    
  6. Stellen Sie die Anwendung bereit.

App Engine lädt alle Bibliotheken im Verzeichnis, das Sie in der Datei appengine_config.py angegeben haben, in die Python 2-Laufzeit hoch.

Bibliotheken für Python 3-Anwendungen installieren

So installieren Sie eine Bibliothek für Ihre Anwendung, wenn diese in der Python 3-Laufzeit ausgeführt wird:

  1. Fügen Sie den Bibliotheksnamen der Datei requirements.txt Ihrer Anwendung hinzu. Beispiel:

    google-cloud-ndb
    
  2. App bereitstellen.

App Engine lädt automatisch alle in der Datei requirements.txt aufgeführten Bibliotheken in die Python 3-Laufzeit hoch.

Migrationspfade für gebündelte App Engine-Dienste

Blobstore

Verwenden Sie zum Speichern und Abrufen von Daten Cloud Storage über die Cloud-Clientbibliotheken. Für die ersten Schritte erhalten Sie Informationen unter Zur Cloud-Clientbibliothek für Storage migrieren.

Datastore

Wenn Ihre Python 2-Anwendung NDB zur Interaktion mit Datastore verwendet, migrieren Sie zur Cloud NDB-Bibliothek. Cloud NDB ist hauptsächlich als Umstellungstool für die Migration von Python 2-Anwendungen gedacht. Wir empfehlen, dass Python 3-Anwendungen die Clientbibliothek im Datastore-Modus verwenden.

Weitere Informationen finden Sie unter:

Bilder

Sie können Bilder aus Cloud Storage bereitstellen, entweder direkt oder mit einem Content Delivery Network (CDN) eines Drittanbieters.

Zum Ändern der Bildgröße und zum Konvertieren bzw. Bearbeiten von Bildern verwenden Sie eine Bildverarbeitungsbibliothek wie z. B. Pillow oder eine Python-Schnittstelle für ImageMagick. Wenn Sie eine dieser Drittanbieterbibliotheken nutzen möchten, fügen Sie die Bibliothek als Abhängigkeit hinzu und aktualisieren Sie Ihren Code, um die APIs der Bibliothek aufzurufen.

Mit dem App Engine-Bilderdienst können Sie auch dynamische Anfragen an Ihre Anwendung vermeiden. Damit wird die Größe von Bildern mithilfe einer Bereitstellungs-URL geändert. Sie können stattdessen auch die Bilder mit der neuen Größe im Voraus generieren und dann zur Bereitstellung in Cloud Storage hochladen. Alternativ haben Sie die Möglichkeit, die Bildgröße mit einem entsprechenden externen CDN-Dienst (Content Delivery Network) zu ändern.

Logging

Wir empfehlen Ihnen, Ihre Anwendung auf die Verwendung von Cloud Logging zu aktualisieren. Diese unterstützt Funktionen wie das Aufrufen von Logs im Logs Explorer, das Herunterladen von Logs, das Filtern von Nachrichten nach Schweregrad und die Korrelation von Anwendungsnachrichten mit bestimmten Anfragen. Alternativ können Sie diese Funktionen aktivieren, indem Sie Lognachrichten schreiben, die bestimmte in einem JSON-Objekt strukturierte Daten enthalten.

Weitere Informationen finden Sie unter Zu Cloud Logging migrieren.

Mail

Verwenden Sie zum Senden von E-Mails einen Drittanbieter wie SendGrid, Mailgun oder Mailjet. Alle diese Dienste bieten APIs zum Senden von E-Mails aus Anwendungen.

Memcache

Wenn Ihre Python 2-Anwendung explizit Memcache verwendet, empfehlen wir die Verwendung von Memorystore for Redis als Caching-Dienst. Weitere Informationen finden Sie unter Memcache zu Memorystore migrieren.

Module

Zum Abrufen von Informationen und zum Ändern der ausgeführten Dienste Ihrer Anwendung verwenden Sie eine Kombination aus Umgebungsvariablen und der App Engine Admin API:

Dienstinformation Zugriff
Aktuelle Anwendungs-ID Umgebungsvariable GAE_APPLICATION
Aktuelle Projekt-ID Umgebungsvariable GOOGLE_CLOUD_PROJECT
Aktueller Dienstname Umgebungsvariable GAE_SERVICE
Aktuelle Dienstversion Umgebungsvariable GAE_VERSION
Aktuelle Instanz-ID Umgebungsvariable GAE_INSTANCE
Standardhostname Admin API-Methode apps.get
Liste der Dienste Admin API-Methode apps.services.list
Liste der Versionen für einen Dienst Admin API-Methode apps.services.versions.list
Standardversion für einen Dienst, inklusive Traffic-Aufteilung Admin API-Methode apps.services.get
Liste der für eine Version ausgeführten Instanzen Admin API-Methode apps.services.versions.instances.list
Weitere Informationen zu den Daten, die für die ausgeführten Dienste Ihrer Anwendung in der Python 3-Laufzeit verfügbar sind, finden Sie unter Python 3-Laufzeitumgebung.

Namespaces

Mit der Namespaces API konnten mehrinstanzenfähige Anwendungen Daten nach Mandanten partitionieren. Dazu wurde für jeden Mandanten einfach ein eindeutiger Namespace-String festgelegt.

Datastore unterstützt die Mehrinstanzenfähigkeit direkt, andere Google Cloud-Dienste dagegen nicht. Wenn Ihre mehrinstanzenfähige Anwendung andere Google Cloud-Dienste verwendet, müssen Sie die Mehrinstanzenfähigkeit manuell festlegen. Sie können mit der Cloud Resource Manager API programmatisch neue Projekte erstellen und projektübergreifend auf Ressourcen zugreifen, um Dienstinstanzen vollständig zu isolieren.

OAuth

Verwenden Sie zum Prüfen von OAuth 2.0-Tokens nicht den App Engine-OAuth-Dienst, sondern die Methode oauth2.tokeninfo der OAuth 2.0-API.

Hosten Sie eine Volltextsuchdatenbank wie Elasticsearch in Compute Engine und greifen Sie von Ihrem Dienst aus darauf zu.

Aufgabenwarteschlange

Migrieren Sie Pull-Warteschlangen zu Pub/Sub und Push-Warteschlangen zu Cloud Tasks. Wenn Ihre Anwendung sowohl Pull- als auch Push-Warteschlangen verwendet, migrieren Sie Pull-Warteschlangen zuerst, um ein unerwartetes Verhalten mit Cloud Tasks zu vermeiden.

Weitere Informationen zu diesen Migrationen finden Sie unter:

URL-Abruf

Standardmäßig verwendet die Python 2.7-Laufzeit den URL-Abrufdienst zur Verarbeitung ausgehender HTTP(S)-Anfragen, auch wenn Sie zur Verarbeitung dieser Anfragen Standard-Python-Bibliotheken verwenden.

Wenn Ihre Anwendung URL Fetch APIs direkt verwendet, z. B. für asynchrone Anfragen, empfehlen wir die Migration zu einer Standard-Python-Bibliothek, z. B. zur Bibliothek "requests".

Weitere Informationen finden Sie unter Ausgehende Anfragen migrieren.

Nutzerauthentifizierung

Verwenden Sie als Alternative zur Users API einen beliebigen HTTP-basierten Authentifizierungsmechanismus, beispielsweise: