Como migrar para o emulador do Cloud Datastore

O emulador do Cloud Datastore fornece a emulação local do ambiente de produção do Datastore. O emulador do Cloud Datastore está sendo implementado progressivamente como a implementação padrão do Datastore para o dev_appserver.

Benefícios de migrar para o emulador do Datastore

O emulador do Datastore pode ser compartilhado entre as bibliotecas de cliente de ambiente padrão do App Engine, como DB e NDB, e as bibliotecas de cliente do Cloud Datastore.

É possível usar o emulador do Datastore para compartilhar dados locais entre serviços em execução no ambiente padrão do App Engine e no ambiente flexível do App Engine.

Antes de começar

  1. Faça o download e instale o ambiente de execução Java (JRE) versão 11 ou posterior.

  2. Execute dev_appserver a partir do diretório google-cloud-sdk/bin.

Como escolher o ambiente de emulação

O emulador do Cloud Datastore é o emulador padrão para uma parte dos usuários do dev_appserver. Se você estiver usando o emulador do Cloud Datastore, o dev_appserver exibirá:

... Using Cloud Datastore Emulator.

É possível forçar o dev_appserver a usar o emulador do Cloud Datastore definindo a sinalização --support_datastore_emulator como verdadeira ao iniciar dev_appserver.py:

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

Substitua DEVAPPSERVER_ROOT pelo caminho para a pasta em que você extrai a versão arquivada de devapp_server.py. Para mais informações sobre como fazer o download e usar a versão arquivada de dev_appserver.py, consulte Como usar o servidor de desenvolvimento local.

Como usar o dev_appserver com o emulador do Datastore

O dev_appserver inicia ou não o emulador com base na variável de ambiente DATASTORE_EMULATOR_HOST.

  • Quando essa variável de ambiente existe, o dev_appserver se comunica com um processo emulador atual em execução no DATASTORE_EMULATOR_HOST.

  • Quando essa variável de ambiente não existe, o dev_appserver inicia um novo processo emulador. É possível especificar a porta para o emulador do Datastore definindo o --datastore_emulator_port ao iniciar o dev_appserver.py.

Alterações de comportamento

Conversão de formato de dados locais

Atualmente, o emulador local do Datastore armazena dados em sqlite3, enquanto o emulador do Cloud Datastore armazena dados como objetos Java.

Quando o dev_appserver é iniciado com dados sqlite3 legados, os dados serão convertidos em objetos Java. Os dados originais são armazenados em backup com o nome de arquivo {original-data-filename} .sqlitestub.

Localização do arquivo de dados locais

O arquivo de dados locais pode ser especificado com a sinalização --datastore_path.

  • Quando o dev_appserver inicia o emulador, a localização permanece inalterada.

  • Quando o dev_appserver usa o emulador atual do Cloud Datastore, o sinalizador é ignorado para a configuração do emulador.

index.yaml local

  • Um index.yaml vazio será considerado inválido. A sintaxe do index.yaml é o formato YAML. O arquivo index.yaml tem um único elemento de lista denominado indexes.

  • Quando o dev_appsever inicia o emulador, o index.yaml permanece no diretório do projeto do aplicativo.

  • Quando o dev_appserver usa o emulador atual do Cloud Datastore, o index.yaml é gerenciado pelo emulador.

Outros recursos do servidor local do datastore permanecem inalterados.

Solução de problemas

Como receber a saída do emulador

Por padrão, o dev_appserver executa o emulador do Datastore no modo silencioso. Para ver a saída do emulador do Datastore, execute dev_appserver com --dev_appserver_log_level=debug.

Falha nas importações de gRPC

O dev_appserver usa o gRPC para se comunicar com o emulador do Cloud Datastore. O gcloud CLI empacota o gRPC, mas a versão empacotada é incompatível com alguns sistemas operacionais, o que causa falhas de importação.

Para corrigir falhas de importação, instale o gRPC separadamente usando pip com a CLI gcloud 219.0.0 ou posterior:

pip install grpcio