Dienste von der Standardumgebung zur flexiblen Umgebung migrieren

Die flexible App Engine-Umgebung bietet nicht die API-Bibliotheken des App Engine SDK. Wenn Sie Ihre Anwendung von der App Engine-Standardumgebung zur flexiblen Umgebung migrieren möchten, müssen Sie Ihren Code so aktualisieren, dass nur Dienste und APIs verwendet werden, die in allen Google Cloud-Umgebungen verfügbar sind.

In den folgenden Abschnitten finden Sie Anleitungen zur Migration bestimmter alter, gebündelter Dienste und APIs von der Standardumgebung zur flexiblen Umgebung.

Unterschiede zwischen Standardumgebung und flexibler Umgebung

Zusätzlich zu den hier dargestellten Hauptunterschieden werden Pfade mit /_ah/ in der flexiblen Umgebung nicht blockiert. Wenn Ihre Anwendung in der Standardumgebung für den Zugriff auf bestimmte Dienste Pfade mit /_ah/ verwendet, finden Sie Informationen im Abschnitt für den entsprechenden Dienst weiter unten.

Anwendungsidentität

In der flexiblen Umgebung können Sie mit einer Kombination aus Umgebungsvariablen und dem Compute Engine-Metadatendienst Informationen zur Anwendung abrufen:

Anwendungsdaten Zugriff
Anwendungs-/Projekt-ID Entweder die Umgebungsvariable GOOGLE_CLOUD_PROJECT oder die Ressource /project/project-id im Metadatenserver
Standardhostname apps.get-Methode der App Engine Admin API
Name des Dienstkontos Ressource /instance/service-accounts im Metadatenserver
OAuth 2.0-Zugriffstoken Ressource /instances/service-accounts im Metadatenserver. Weitere Informationen finden Sie in der Compute Engine-Dokumentation zur Authentifizierung mit den Anmeldedaten des Dienstkontos.

Die folgende Funktionalität ist nicht direkt verfügbar:

  • Für Ihr Projekt ist kein Cloud Storage-Standard-Bucket vorhanden. Sie können einen Cloud Storage-Bucket erstellen und die Projekt-ID als Bucket-Namen verwenden, um einen Bucket in Ihrer Anwendung zu nutzen. Sie haben dann die Möglichkeit, die Umgebungsvariable GOOGLE_CLOUD_PROJECT in der Anwendung als Bucket-Namen einzusetzen.
  • Sie können Blobs nicht mit dem Standarddienstkonto signieren. Stattdessen können Sie die Identity and Access Management (IAM) API verwenden oder bei der Bereitstellung für die Anwendung einen privaten Schlüssel für das Dienstkonto zur Verfügung stellen.
  • Es ist auch keine integrierte API zum Abrufen öffentlicher Zertifikate für die Überprüfung von Signaturen vorhanden. Die öffentlichen Zertifikate aller Dienstkonten sind jedoch unter https://www.googleapis.com/robot/v1/metadata/x509/{service account email} verfügbar.
  • Wenn Sie die Java-Laufzeit verwenden, sind die App Engine SystemProperty APIs für die flexible App Engine-Umgebung nicht verfügbar. Sie können jedoch Umgebungsvariablen in app.yaml festlegen und die Werte mit System.env abrufen, wie unter Umgebungsvariablen definieren beschrieben.

Weitere Informationen zu Umgebungsvariablen finden Sie auf den Laufzeitübersichtsseiten oder der app.yaml-Referenzseite.

Hintergrundthreads

Da für die flexible Umgebung keine Sandbox-Beschränkungen gelten, können Sie Threads und Prozesse erstellen, die außerhalb der Anfrageumgebung ausgeführt werden. In der Regel benötigen Sie dazu nur die integrierten Threading- oder Multiprocessing-Tools Ihrer Sprache.

Blobstore

Die Nutzung des Blobstore-Dienstes wurde sowohl in der Standardumgebung als auch in der flexiblen Umgebung weitgehend durch Cloud Storage ersetzt. Verwenden Sie zum Speichern und Abrufen von Daten in Cloud Storage die Google Cloud-Clientbibliotheken.

Weitere Informationen finden Sie unter Cloud Storage verwenden.

Leistungsspektrum

Außerhalb der Standardumgebung ist keine dem Capabilities-Dienst vergleichbare Funktionalität verfügbar.

WebSockets

Die flexible App Engine-Umgebung unterstützt Websockets. Weitere Informationen finden Sie unter Nichtflüchtige Verbindungen mit WebSockets erstellen.

Firestore im Datastore-Modus (Datastore)

Sie können von überall aus mit der Datastore API auf Datastore zugreifen. Verwenden Sie die Google Cloud-Clientbibliotheken zum Speichern und Abrufen von Daten aus dem Datenspeicher.

Dieselben Datastore-daten sind verfügbar, unabhängig davon, ob Sie die App Engine-Bibliotheken oder die Google Cloud-Clientbibliotheken verwenden oder die API direkt aufrufen.

Wenn Sie die Python-Bibliothek ndb verwenden und den NDB-ähnlichen Datastore-Zugriff bevorzugen, empfehlen wir, zu Cloud NDB zu migrieren. Weitere Informationen finden Sie im Cloud NDB-Repository.

Sowohl die Cloud NDB- als auch die Datastore-Clientbibliotheken werden von Python 2 und 3 unterstützt und funktionieren sowohl für die App Engine-Standardumgebung oder die flexible App Engine-Umgebung als auch für Nicht-App Engine-Anwendungen. So können sich Python 2-Entwickler von gebündelten Legacy-Diensten wie App Engine ndb lösen. Cloud NDB hat das zusätzliche Ziel, weiterhin die Nutzerfreundlichkeit von NDB zu gewährleisten.

Weitere Informationen finden Sie unter Datastore verwenden.

Bilder

Der Bildbearbeitungsdienst ist außerhalb der Standardumgebung nicht verfügbar. Sie können Bilder aber direkt aus Ihrer Anwendung oder direkt aus Cloud Storage bereitstellen.

Wenn Sie Bilder verarbeiten müssen, können Sie dazu eine Bildverarbeitungsbibliothek wie Pillow installieren und verwenden.

Der Bilderdienst bietet außerdem Funktionen zur Vermeidung dynamischer Anfragen an Ihre Anwendung. Dazu erfolgt die Änderung der Bildgröße über eine Bereitstellungs-URL. 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.

Weitere Informationen finden Sie in diesen Leitfäden:

Logging

Wie in der Standardumgebung ist das Logging in der flexiblen Umgebung automatisch aktiviert. Allerdings erfolgt die Erfassung der Logs in einem unterschiedlichen Format. Sie werden nicht nach Anfragen gebündelt und Logs von stdout und stderr werden gesondert erfasst.

Wenn Sie mehr Kontrolle über das Anwendungs-Logging, die Möglichkeit zum Log-Gruppieren und die Möglichkeit haben möchten, zusätzliche Metadaten in Logs zu erfassen, können Sie die Cloud Logging API direkt mit den Google Cloud-Clientbibliotheken verwenden.

Weitere Informationen finden Sie unter Anwendungslogs schreiben.

E-Mail

Der App Engine Mail-Dienst ist außerhalb der Standardumgebung nicht verfügbar. Zum Senden von E-Mails benötigen Sie einen externen E-Mail-Anbieter wie SendGrid, Mailgun oder Mailjet. Diese Dienste bieten APIs zum Senden von E-Mails aus Anwendungen, die in beliebigen Umgebungen ausgeführt werden.

Weitere Informationen finden Sie unter Nachrichten mit Drittanbieterdiensten senden.

Memcache

Der Memcache-Dienst ist in der flexiblen App Engine-Umgebung nicht verfügbar. Verwenden Sie Memorystore for Redis zum Speichern von Anwendungsdaten im Cache.

Module

Die Modules API ist außerhalb der Standardumgebung nicht verfügbar. Sie können aber mit Umgebungsvariablen und der App Engine Admin API Informationen zu den ausgeführten Diensten der Anwendung abrufen und ändern:

Dienstinformation Zugriff
Aktueller Dienstname Umgebungsvariable GAE_SERVICE
Aktuelle Dienstversion Umgebungsvariable GAE_VERSION
Aktuelle Instanz-ID Umgebungsvariable GAE_INSTANCE
Standardhostname apps.get-Methode der App Engine Admin API
Liste der Dienste apps.services.list-Methode der App Engine Admin API
Liste der Versionen für einen Dienst apps.services.versions.list-Methode der App Engine Admin API
Standardversion für einen Dienst, inklusive Traffic-Aufteilung apps.services.get-Methode der App Engine Admin API
Liste der für eine Version ausgeführten Instanzen apps.services.versions.instances.list-Methode der App Engine Admin API

Mit der App Engine Admin API können Sie auch Dienste und Versionen in der Anwendung bereitstellen und verwalten.

Weitere Informationen zu Umgebungsvariablen finden Sie auf den Laufzeitübersichtsseiten oder der app.yaml-Referenzseite.

Namespaces

Außerhalb der Standardumgebung wird die Mehrinstanzenfähigkeit nur von Datastore direkt unterstützt. Bei anderen Diensten müssen Sie die Mehrinstanzenfähigkeit manuell verwalten. 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

Der OAuth-Dienst ist in der flexiblen Umgebung nicht verfügbar. Sie können OAuth 2.0-Tokens mit der oauth2.tokeninfo-Methode der OAuth 2.0 API verifizieren.

Remote

Der Remote API-Dienst ist in der flexiblen Umgebung nicht anwendbar. Die überwiegende Anzahl der Datensicherungsdienste wie Cloud Datastore, auf die aus der flexiblen Umgebung zugegriffen werden kann, sind von überall aus zugänglich.

Der Suchdienst ist aktuell außerhalb der flexiblen Umgebung nicht verfügbar. Sie können eine beliebige Datenbank mit Volltextsuche wie Apache Solr in Compute Engine oder Elasticsearch Service in Elastic Cloud hosten und darauf sowohl von der Standard- als auch von der flexiblen Umgebung aus zugreifen.

Sockets

Für die flexible Umgebung gelten keine Sandbox-Beschränkungen. Sie können ausgehende Sockets ganz normal öffnen und verwenden.

Aufgabenwarteschlange

Mit Google Tasks können Sie den Push-Dienst der Aufgabenwarteschlange außerhalb der Standardumgebung der ersten Generation verwenden.

In vielen Fällen, in denen Sie Pull-Warteschlangen verwenden können, z. B. für Aufgaben oder Nachrichten, die von unterschiedlichen Workern abgerufen und verarbeitet werden, ist Pub/Sub eine empfehlenswerte Alternative, die ähnliche Funktionen und Zustellgarantien bietet.

URL-Abruf

Der URL-Abrufdienst ist in der flexiblen Umgebung nicht verfügbar. Es gibt aber keine Sandbox-Einschränkungen. Daher kann Ihre Anwendung eine beliebige HTTP-Bibliothek für die URL-Abruffunktion verwenden.

Wenn Sie Python verwenden, empfehlen wir die Verwendung von Anfragen. Wenn Sie Java verwenden, empfehlen wir die Verwendung der Google-HTTP-Clientbibliothek für Java oder OkHttp.

Nutzer

Der Nutzerdienst ist außerhalb der Standardumgebung nicht verfügbar. Sie können in der flexiblen Umgebung aber jeden HTTP-basierten Authentifizierungsmechanismus verwenden. Beispiele:

Da der Nutzerdienst nicht zur Verfügung steht, kann appengine-web.xml für Java bzw. app.yaml für andere Laufzeiten nicht verwendet werden, um URLs nur für Administratoren zugänglich zu machen. Sie müssen dies über Ihre Anwendung festlegen.

Nächste Schritte

Eine Übersicht der wichtigsten Unterschiede zwischen der flexiblen Umgebung und der Standardumgebung mit Richtlinien für Anwendungen, die beide Umgebungen verwenden, finden Sie unter Flexible App Engine-Umgebung für Nutzer der Standardumgebung.