Zum Cloud Datastore-Emulator migrieren

Mit dem Cloud Datastore-Emulator können Sie die Datastore-Produktionsumgebung lokal emulieren. Der Cloud Datastore-Emulator wird schrittweise als Datastore-Standardimplementierung für dev_appserver eingeführt.

Vorteile der Migration zum Datastore-Emulator

Der Datastore-Emulator kann von den Clientbibliotheken der App Engine-Standardumgebung wie DB und NDB sowie den Cloud Datastore-Clientbibliotheken gemeinsam verwendet werden.

Der Datastore-Emulator ermöglicht Diensten, die in der App Engine-Standardumgebung und der flexiblen App Engine-Umgebung ausgeführt werden, lokale Daten gemeinsam zu verwenden.

Vorbereitung

  1. Laden Sie die Java-Laufzeit (JRE) ab Version 11 herunter und installieren Sie sie.

  2. Führen Sie dev_appserver aus dem Verzeichnis google-cloud-sdk/bin aus.

Emulationsumgebung auswählen

Der Cloud Datastore-Emulator ist der Standardemulator für einen Teil der dev_appserver-Nutzer. Wenn Sie den Cloud Datastore-Emulator verwenden, zeigt dev_appserver Folgendes an:

... Using Cloud Datastore Emulator.

Sie können erzwingen, dass dev_appserver den Cloud Datastore-Emulator verwendet. Legen Sie dazu das --support_datastore_emulator-Flag beim Starten von dev_appserver.py auf "true" fest:

python2 DEVAPPSERVER_ROOT/google_appengine/dev_appserver.py --support_datastore_emulator=[true|false] app.yaml

Ersetzen Sie DEVAPPSERVER_ROOT durch den Pfad zu dem Ordner, in den Sie die archivierte Version von devapp_server.py extrahieren. Weitere Informationen zum Herunterladen und Verwenden der archivierten Version von dev_appserver.py finden Sie unter Lokalen Entwicklungsserver verwenden.

dev_appserver mit dem Datastore-Emulator verwenden

Anhand der Umgebungsvariable DATASTORE_EMULATOR_HOST entscheidet dev_appserver, ob der Emulator gestartet wird.

  • Wenn diese Umgebungsvariable vorhanden ist, kommuniziert dev_appserver mit einem vorhandenen Emulatorprozess, der auf DATASTORE_EMULATOR_HOST ausgeführt wird.

  • Wenn diese Umgebungsvariable nicht vorhanden ist, startet dev_appserver einen neuen Emulatorprozess. Sie können den Port für den Datastore-Emulator angeben, wenn Sie beim Starten von dev_appserver.py den Wert --datastore_emulator_port festlegen.

Geändertes Verhalten

Lokales Datenformat konvertieren

Derzeit speichert der lokale Datastore-Emulator Daten in sqlite3, während der Cloud Datastore-Emulator Daten als Java-Objekte speichert.

Wenn Sie dev_appserver mit sqlite3-Legacy-Daten starten, werden die Daten in Java-Objekte konvertiert. Die Originaldaten werden mit dem Dateinamen {Dateiname der Originaldaten}.sqlitestub gesichert.

Speicherort der lokalen Datendatei

Die lokale Datendatei kann mit dem Flag --datastore_path angegeben werden.

  • Wenn dev_appserver den Emulator startet, bleibt der Speicherort unverändert.

  • Wenn dev_appserver den vorhandenen Cloud Datastore-Emulator verwendet, wird dieses Flag ignoriert und die Einstellung des Emulators verwendet.

Lokale Datei index.yaml

  • Eine leere index.yaml wird als ungültig betrachtet. Für die Syntax von index.yaml wird das YAML-Format verwendet. Die Datei index.yaml hat ein einzelnes Listenelement namens "indexes".

  • Wenn dev_appsever den Emulator startet, bleibt index.yaml im Anwendungsprojektverzeichnis.

  • Wenn dev_appserver den vorhandenen Cloud Datastore-Emulator verwendet, wird index.yaml von diesem Emulator verwaltet.

Andere Funktionen des lokalen Datenspeicherservers bleiben unverändert.

Fehlerbehebung

Emulatorausgabe abrufen

Der Datastore-Emulator wird von dev_appserver standardmäßig im Lautlos-Modus ausgeführt. Um die Ausgabe des Datastore-Emulators anzusehen, führen Sie dev_appserver mithilfe von --dev_appserver_log_level=debug aus.

Fehlerhafte gRPC-Importe

Für die Kommunikation mit dem Cloud Datastore-Emulator verwendet dev_appserver gRPC. Die gcloud CLI verpackt gRPC, die Paketversion ist jedoch mit einigen Betriebssystemen nicht kompatibel, was zu Importfehlern führt.

Wenn Sie Importfehler beheben möchten, können Sie gRPC separat mit pip über die gcloud CLI 219.0.0 oder höher installieren:

pip install grpcio