Migrar para o emulador do Cloud Datastore

O emulador do Armazenamento de dados do Cloud oferece uma emulação local do ambiente de produção do Armazenamento de dados. O emulador do Cloud Datastore está a ser implementado progressivamente como a implementação predefinida do Datastore para o dev_appserver.

Vantagens da migração para o Datastore Emulator

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

Pode usar o emulador do Datastore para partilhar 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. Transfira e instale a versão 11 ou superior do tempo de execução Java (JRE).

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

Escolher o ambiente de emulação

O emulador do Cloud Datastore é o emulador predefinido para uma parte dos utilizadores do dev_appserver. Se estiver a usar o emulador do Cloud Datastore, o dev_appserver apresenta:

... Using Cloud Datastore Emulator.

Pode forçar o dev_appserver a usar o emulador do Cloud Datastore definindo a flag --support_datastore_emulator como true quando iniciar o 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 onde extrai a versão arquivada de devapp_server.py. Para mais informações sobre como transferir e usar a versão arquivada do dev_appserver.py, consulte o artigo Usar o servidor de desenvolvimento local.

Usar o dev_appserver com o emulador do Datastore

O dev_appserver decide se deve iniciar o emulador com base na variável de ambiente DATASTORE_EMULATOR_HOST.

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

  • Quando esta variável de ambiente não existe, o dev_appserver inicia um novo processo do emulador. Pode especificar a porta para o emulador do Datastore definindo o --datastore_emulator_port quando iniciar o dev_appserver.py.

Alterações de comportamento

Conversão do formato de dados locais

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

Quando o dev_appserver é iniciado com dados sqlite3 antigos, os dados são convertidos em objetos Java. Os dados originais são copiados com o nome de ficheiro {original-data-filename}.sqlitestub.

Localização do ficheiro de dados local

O ficheiro de dados local pode ser especificado com a flag --datastore_path.

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

  • Quando o dev_appserver usa o Cloud Datastore Emulator existente, esta flag é ignorada em favor da definição do emulador.

Local index.yaml

  • Um ficheiro index.yaml vazio é considerado inválido. A sintaxe de index.yaml está no formato YAML. O ficheiro index.yaml tem um único elemento de lista denominado indexes.

  • Quando o dev_appserver inicia o emulador, o ficheiro index.yaml permanece no diretório do projeto da aplicação.

  • Quando o dev_appserver usa o emulador do Cloud Datastore existente, o index.yaml é gerido por esse emulador.

Outras funcionalidades do servidor de armazenamento de dados local permanecem inalteradas.

Resolução de problemas

Obter resultados do emulador

Por predefinição, o dev_appserver executa o Datastore Emulator no modo silencioso. Para ver o resultado do emulador do Datastore, execute o dev_appserver com --dev_appserver_log_level=debug.

Falha nas importações de gRPC

O dev_appserver usa o gRPC para comunicar com o emulador do Cloud Datastore. No entanto, a CLI gcloud inclui o gRPC, mas a versão incluída é incompatível com alguns sistemas operativos, o que provoca falhas de importação.

Para corrigir falhas de importação, pode instalar o gRPC separadamente através do pip com a CLI gcloud 219.0.0 ou superior:

pip install grpcio