Migra al emulador de Cloud Datastore

El emulador de Cloud Datastore permite la emulación local del entorno de producción de Datastore. El emulador de Cloud Datastore se está implantando progresivamente como la implementación predeterminada de Datastore para dev_appserver.

Beneficios de migrar al emulador de Datastore

El emulador de Datastore puede compartirse entre bibliotecas cliente del entorno estándar de App Engine, como DB y NDB, y las Bibliotecas cliente de Cloud Datastore.

Puedes usar el emulador de Datastore para compartir datos locales entre servicios que se ejecutan en el entorno estándar de App Engine y el entorno flexible de App Engine.

Antes de comenzar

  1. Descarga y, luego, instala la versión 11 o superior del entorno de ejecución de Java (JRE).

  2. Ejecuta dev_appserver desde el directorio google-cloud-sdk/bin.

Elige tu entorno de emulación

El emulador Cloud Datastore es el emulador predeterminado para una parte de los usuarios de dev_appserver. Si usas el emulador de Cloud Datastore, dev_appserver mostrará lo siguiente:

... Using Cloud Datastore Emulator.

Para obligar a dev_appserver a usar el emulador de Cloud Datastore, puedes configurar la marca --support_datastore_emulator como verdadera cuando se inicie dev_appserver.py:

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

Reemplaza DEVAPPSERVER_ROOT por la ruta a la carpeta en la que extraes la versión archivada de devapp_server.py. Para obtener más información sobre cómo descargar y usar la versión archivada de dev_appserver.py, consulta Usa el servidor de desarrollo local.

Usa dev_appserver con el emulador de Datastore

Dev_appserver decide si el emulador se ejecutará sobre la base de la variable de entorno DATASTORE_EMULATOR_HOST.

  • Cuando esta variable de entorno existe, dev_appserver se comunica con un proceso de emulador existente que se ejecuta en DATASTORE_EMULATOR_HOST.

  • Cuando la variable de entorno no existe, dev_appserver ejecuta un nuevo proceso de emulador. Puedes especificar el puerto para el emulador de Datastore si configuras --datastore_emulator_port cuando se inicia dev_appserver.py.

Cambios en los comportamientos

Conversión de formatos de datos locales

Actualmente, el emulador de Datastore local almacena los datos en SQLite3, mientras que el emulador de Cloud Datastore los almacena como objetos Java.

Cuando se inicia dev_appserver con los datos sqlite3 heredados, los datos se convertirán en objetos Java. Se crea una copia de seguridad de los datos originales con el nombre de archivo {original-data-filename}.sqlitestub.

Ubicación del archivo de datos locales

El archivo de datos locales se puede especificar con la marca --datastore_path.

  • Cuando dev_appserver ejecuta el emulador, la ubicación no se modifica.

  • Cuando dev_appserver usa el emulador de Cloud Datastore existente, esta marca será ignorada en favor de la configuración del emulador.

Index.yaml local

  • Un archivo index.yaml vacío se considerará no válido. La sintaxis de index.yaml usa el formato YAML. El archivo index.yaml posee un único elemento de lista llamado indexes.

  • Cuando dev_appsever ejecute el emulador, index.yaml se mantendrá en el directorio del proyecto de la aplicación.

  • Cuando dev_appserver use el emulador de Cloud Datastore existente, index.yaml será administrado por ese emulador.

Las otras características del servidor del almacén de datos locales no se modifican.

Soluciona problemas

Cómo obtener el resultado del emulador

De manera predeterminada, dev_appserver ejecuta el emulador de Datastore en modo silencioso. Para ver el resultado del emulador de Datastore, ejecuta dev_appserver con --dev_appserver_log_level=debug.

Importaciones de gRPC con error

Dev_appserver usa gRPC para comunicarse con el emulador de Cloud Datastore. La CLI de gcloud empaqueta gRPC, sin embargo, la versión empaquetada es incompatible con algunos sistemas operativos y causa errores de importación.

Para solucionar errores de importación, puedes instalar gRPC por separado mediante pip con la CLI de gcloud, versión 219.0.0 o superior:

pip install grpcio