Migrar al emulador de Cloud Datastore

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

Ventajas de migrar al emulador de Datastore

El emulador de Datastore se puede compartir entre las bibliotecas de cliente del entorno estándar de App Engine, como DB y NDB, y las bibliotecas de 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 en el entorno flexible de App Engine.

Antes de empezar

  1. Descarga e instala la versión 11 o una posterior del tiempo de ejecución de Java (JRE).

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

Elegir el entorno de emulación

El emulador de 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.

Puedes obligar a dev_appserver a usar el emulador de Cloud Datastore definiendo el valor true en la marca --support_datastore_emulator al iniciar dev_appserver.py:

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

Sustituye 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 el artículo Utilizar el servidor de desarrollo local.

Usar dev_appserver con el emulador de Datastore

Dev_appserver decide si inicia el emulador en función de la variable de entorno DATASTORE_EMULATOR_HOST.

  • Cuando existe esta variable de entorno, dev_appserver se comunica con un proceso de emulador que se está ejecutando en DATASTORE_EMULATOR_HOST.

  • Si esta variable de entorno no existe, dev_appserver inicia un nuevo proceso de emulador. Puedes especificar el puerto del emulador de Datastore configurando --datastore_emulator_port al iniciar dev_appserver.py.

Cambios en el comportamiento

Conversión de formato 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 datos de sqlite3 antiguos, los datos se convierten en objetos Java. Los datos originales se guardan en una copia de seguridad con el nombre de archivo {original-data-filename}.sqlitestub.

Ubicación del archivo de datos local

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

  • Cuando dev_appserver inicia el emulador, la ubicación no cambia.

  • Cuando dev_appserver usa el emulador de Cloud Datastore, esta marca se ignora en favor del ajuste del emulador.

index.yaml local

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

  • Cuando dev_appserver inicie el emulador, index.yaml permanecerá en el directorio del proyecto de la aplicación.

  • Cuando dev_appserver usa el emulador de Cloud Datastore, index.yaml se gestiona mediante ese emulador.

El resto de las funciones del servidor del almacén de datos local no cambian.

Solución de problemas

Obtener la salida del emulador

De forma predeterminada, dev_appserver ejecuta el emulador de Datastore en modo Silencio. Para ver la salida del emulador de Datastore, ejecuta dev_appserver con --dev_appserver_log_level=debug.

Fallo en las importaciones de gRPC

El servidor dev_appserver usa gRPC para comunicarse con el emulador de Cloud Datastore. La gcloud CLI empaqueta gRPC, pero la versión empaquetada no es compatible con algunos sistemas operativos, lo que provoca errores de importación.

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

pip install grpcio