Migrer vers l'émulateur Cloud Datastore

L'émulateur Cloud Datastore fournit une émulation locale de l'environnement de production du datastore. Il est progressivement déployé en tant que datastore par défaut pour l'outil dev_appserver.

Avantages de la migration vers l'émulateur Datastore

L'émulateur Datastore peut être partagé entre les bibliothèques clientes de l'environnement standard App Engine, telles que DB et NDB, et les bibliothèques clientes de Cloud Datastore.

Vous pouvez utiliser l'émulateur Datastore pour partager des données locales entre des services s'exécutant dans les environnements standard et flexible d'App Engine.

Avant de commencer

  1. Téléchargez et installez l'environnement d'exécution Java (JRE) version 8 ou ultérieure.

  2. Exécutez dev_appserver à partir du répertoire google-cloud-sdk/bin.

Choisir votre environnement d'émulation

L'émulateur Cloud Datastore est l'émulateur par défaut pour une partie des utilisateurs de dev_appserver. Si vous utilisez l'émulateur Cloud Datastore, dev_appserver affiche le message suivant :

... Using Cloud Datastore Emulator.

Vous pouvez forcer dev_appserver à utiliser l'émulateur Cloud Datastore en définissant l'indicateur "--support_datastore_emulator" sur "true" lors du démarrage de dev_appserver comme suit :

dev_appserver.py --support_datastore_emulator=[true|false] app.yaml

Utiliser dev_appserver avec l'émulateur Datastore

Dev_appserver décide de lancer l'émulateur en fonction de la variable d'environnement DATASTORE_EMULATOR_HOST.

  • Lorsque cette variable d'environnement existe, dev_appserver communique avec un processus d'émulateur existant s'exécutant sur DATASTORE_EMULATOR_HOST.

  • Lorsque cette variable d'environnement n'existe pas, dev_appserver lance un nouveau processus d'émulateur. Vous pouvez spécifier le port de l'émulateur Datastore en définissant --datastore_emulator_port lors du démarrage de dev_appserver.py.

Nouveaux comportements

Conversion de format de données locales

Actuellement, l'émulateur Datastore local stocke les données dans sqlite3, tandis que l'émulateur Cloud Datastore les stocke sous forme d'objets Java.

Lorsque dev_appserver est lancé avec des données sqlite3 existantes, ces données sont converties en objets Java. Les données d'origine sont sauvegardées sous un nom de fichier tel que {original-data-filename}.sqlitestub.

Emplacement du fichier de données locales

Vous pouvez spécifier le fichier de données locales avec l'indicateur --datastore_path.

  • Lorsque dev_appserver lance l'émulateur, l'emplacement demeure inchangé.

  • Lorsque dev_appserver utilise un émulateur Cloud Datastore existant, cet indicateur est ignoré en faveur du paramètre de l'émulateur.

Fichier index.yaml local

  • Un fichier index.yaml vide est considéré comme non valide. La syntaxe utilisée dans index.yaml est au format YAML. Ce fichier contient un seul élément de liste appelé "index".

  • Lorsque dev_appserver lance l'émulateur, le fichier index.yaml demeure dans le répertoire du projet de l'application.

  • Lorsque dev_appserver utilise un émulateur Cloud Datastore existant, le fichier index.yaml est alors géré par cet émulateur.

Les autres fonctionnalités du serveur de datastore local demeurent inchangées.

Dépannage

Obtenir la sortie de l'émulateur

Par défaut, dev_appserver exécute l'émulateur Datastore en mode silencieux. Pour voir la sortie de l'émulateur Datastore, exécutez dev_appserver avec --dev_appserver_log_level=debug.

Échec des importations gRPC

Dev_appserver utilise le framework gRPC pour communiquer avec l'émulateur Cloud Datastore. Or, le framework gRPC des packages du SDK Cloud, quelle que soit leur version, est incompatible avec certains systèmes d'exploitation, ce qui entraîne des erreurs d'importation.

Pour résoudre les problèmes d'importation, vous pouvez installer le framework gRPC séparément à l'aide de pip avec le SDK Cloud 219.0.0 ou une version ultérieure :

pip install grpcio
Cette page vous a-t-elle été utile ? Évaluez-la :

Envoyer des commentaires concernant…

Environnement standard App Engine pour Python 2