Migrazione all'emulatore Cloud Datastore

Cloud Datastore Emulator fornisce l'emulazione locale dell'ambiente Datastore di produzione. L'emulatore Cloud Datastore viene implementato progressivamente come implementazione predefinita di Datastore per dev_appserver.

Vantaggi della migrazione a Datastore Emulator

L'emulatore Datastore può essere condiviso tra le librerie client dell'ambiente standard di App Engine, come DB e NDB, e le librerie client Cloud Datastore.

Puoi utilizzare Datastore Emulator per condividere i dati locali tra i servizi in esecuzione nell'ambiente standard di App Engine e nell'ambiente App Engine Flexible.

Prima di iniziare

  1. Scarica e installa Java Runtime (JRE) versione 11 o successive.

  2. Esegui dev_appserver dalla directory google-cloud-sdk/bin.

Scegliere l'ambiente di emulazione

L'emulatore Cloud Datastore è l'emulatore predefinito per una parte degli utenti dev_appserver. Se utilizzi l'emulatore Cloud Datastore, dev_appserver mostrerà:

... Using Cloud Datastore Emulator.

Puoi forzare dev_appserver a utilizzare l'emulatore Cloud Datastore impostando il flag --support_datastore_emulator su true all'avvio di dev_appserver.py:

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

Sostituisci DEVAPPSERVER_ROOT con il percorso della cartella in cui estrarre la versione archiviata di devapp_server.py. Per ulteriori informazioni sul download e sull'utilizzo della versione archiviata di dev_appserver.py, consulta Utilizzare il server di sviluppo locale.

Utilizzo di dev_appserver con l'emulatore Datastore

Dev_appserver decide se avviare l'emulatore in base alla variabile di ambiente DATASTORE_EMULATOR_HOST.

  • Se questa variabile di ambiente esiste, dev_appserver comunica con un processo di emulatore esistente in esecuzione su DATASTORE_EMULATOR_HOST.

  • Se questa variabile di ambiente non esiste, dev_appserver avvia un nuovo processo di emulatore. Puoi specificare la porta per l'emulatore Datastore impostando --datastore_emulator_port all'avvio di dev_appserver.py.

Modifiche al funzionamento

Conversione del formato dei dati locali

Al momento, l'emulatore Datastore locale archivia i dati in sqlite3, mentre l'emulatore Cloud Datastore li archivia come oggetti Java.

Quando dev_appserver viene avviato con i dati sqlite3 precedenti, i dati vengono convertiti in oggetti Java. Il backup dei dati originali viene eseguito con il nome file {original-data-filename}.sqlitestub.

Posizione del file di dati locali

Il file di dati locale può essere specificato con il flag --datastore_path.

  • Quando dev_appserver avvia l'emulatore, la posizione rimane invariata.

  • Quando dev_appserver utilizza l'emulatore Cloud Datastore esistente, questo flag verrà ignorato a favore dell'impostazione dell'emulatore.

File index.yaml locale

  • Un file index.yaml vuoto verrà considerato non valido. La sintassi di index.yaml è il formato YAML. Il file index.yaml contiene un singolo elemento dell'elenco denominato indici.

  • Quando dev_appserver avvia l'emulatore, index.yaml rimarrà nella directory del progetto dell'applicazione.

  • Quando dev_appserver utilizza l'emulatore Cloud Datastore esistente, index.yaml sarà gestito dall'emulatore.

Le altre funzionalità per il server del datastore locale rimangono invariate.

Risoluzione dei problemi

Ottenere l'output dell'emulatore

Per impostazione predefinita, dev_appserver esegue l'emulatore Datastore in modalità silenziosa. Per visualizzare l'output dell'emulatore Datastore, esegui dev_appserver con --dev_appserver_log_level=debug.

Importazioni gRPC non riuscite

dev_appserver utilizza gRPC per comunicare con l'emulatore Cloud Datastore. gcloud CLI esegue il packaging di gRPC, ma la versione pacchettizzata non è compatibile con alcuni sistemi operativi, causando errori di importazione.

Per correggere gli errori di importazione, puoi installare gRPC separatamente utilizzando pip con gcloud CLI 219.0.0 o versioni successive:

pip install grpcio