Bermigrasi ke Emulator Cloud Datastore

Emulator Cloud Datastore menyediakan emulasi lokal lingkungan Datastore produksi. Cloud Datastore Emulator secara bertahap diluncurkan sebagai implementasi Datastore default untuk dev_appserver.

Manfaat melakukan migrasi ke Emulator Datastore

Emulator Datastore dapat digunakan bersama antara library klien lingkungan standar App Engine seperti DB dan NDB, serta Library Klien Cloud Datastore.

Anda dapat menggunakan Emulator Datastore untuk berbagi data lokal antara layanan yang berjalan di lingkungan standar App Engine dan lingkungan fleksibel App Engine.

Sebelum memulai

  1. Download dan instal Java runtime (JRE) versi 11 atau yang lebih baru.

  2. Jalankan dev_appserver dari direktori google-cloud-sdk/bin.

Memilih lingkungan emulasi Anda

Emulator Cloud Datastore adalah emulator default untuk sebagian pengguna dev_appserver. Jika Anda menggunakan Emulator Cloud Datastore, dev_appserver akan menampilkan:

... Using Cloud Datastore Emulator.

Anda dapat memaksa dev_appserver untuk menggunakan emulator Cloud Datastore dengan menetapkan flag --support_datastore_emulator ke benar (true) saat memulai dev_appserver.py:

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

Ganti DEVAPPSERVER_ROOT dengan jalur ke folder tempat Anda mengekstrak versi devapp_server.py yang diarsipkan. Untuk informasi selengkapnya tentang cara mendownload dan menggunakan versi dev_appserver.py yang diarsipkan, lihat Menggunakan server pengembangan lokal.

Menggunakan dev_appserver dengan Emulator Datastore

Dev_appserver memutuskan apakah akan meluncurkan emulator berdasarkan variabel lingkungan DATASTORE_EMULATOR_HOST.

  • Jika variabel lingkungan ini ada, dev_appserver akan berkomunikasi dengan proses emulator yang ada dan berjalan di DATASTORE_EMULATOR_HOST.

  • Jika variabel lingkungan ini tidak ada, dev_appserver akan meluncurkan proses emulator baru. Anda dapat menentukan port untuk Emulator Datastore dengan menetapkan --datastore_emulator_port saat memulai dev_appserver.py.

Perubahan perilaku

Konversi format data lokal

Saat ini, emulator Datastore lokal menyimpan data di sqlite3 sedangkan Emulator Cloud Datastore menyimpan data sebagai objek Java.

Saat dev_appserver diluncurkan dengan data sqlite3 lama, data akan dikonversi ke objek Java. Data asli dicadangkan dengan nama file {original-data-filename}.sqlitestub.

Lokasi file data lokal

File data lokal dapat ditentukan dengan flag --datastore_path.

  • Saat dev_appserver meluncurkan emulator, lokasi tetap tidak berubah.

  • Saat dev_appserver menggunakan Emulator Cloud Datastore yang ada, flag ini akan diabaikan untuk mendukung setelan emulator.

index.yaml lokal

  • Index.yaml kosong akan dianggap tidak valid. Sintaksis index.yaml adalah format YAML. File index.yaml memiliki satu elemen daftar yang disebut index.

  • Saat dev_appsever meluncurkan emulator, index.yaml akan tetap berada di direktori project aplikasi.

  • Saat dev_appserver menggunakan Emulator Cloud Datastore yang ada, index.yaml akan dikelola oleh emulator tersebut.

Fitur untuk server datastore lokal lainnya tidak berubah.

Pemecahan masalah

Mendapatkan output emulator

Secara default, dev_appserver menjalankan Emulator Datastore dalam mode senyap. Untuk melihat output Emulator Datastore, jalankan dev_appserver dengan --dev_appserver_log_level=debug.

Impor gRPC yang gagal

dev_appserver menggunakan gRPC untuk berkomunikasi dengan Emulator Cloud Datastore. gcloud CLI mengemas gRPC, tetapi versi paketnya tidak kompatibel dengan beberapa sistem operasi sehingga menyebabkan kegagalan impor.

Untuk memperbaiki kegagalan impor, Anda dapat menginstal gRPC secara terpisah menggunakan pip dengan gcloud CLI 219.0.0 atau yang lebih baru:

pip install grpcio