Cloud Datastore エミュレータは、Datastore 本番環境のローカル エミュレーションを可能にします。Cloud Datastore エミュレータは、dev_appserver 用のデフォルトの Datastore 実装として段階的に導入されています。
Datastore エミュレータに移行するメリット
Datastore エミュレータは、App Engine スタンダード環境のクライアント ライブラリ(DB や NDB など)と Cloud Datastore のクライアント ライブラリの間で共有できます。
Datastore エミュレータを使用すると、App Engine スタンダード環境で動作するサービスと App Engine フレキシブル環境で動作するサービスの間でローカルデータを共有できます。
始める前に
Java ランタイム(JRE)バージョン 11 以降をダウンロードしてインストールします。
google-cloud-sdk/bin
ディレクトリから dev_appserver を実行します。
エミュレーション環境の選択
Cloud Datastore エミュレータは、一部の dev_appserver ユーザーのためのデフォルト エミュレータです。Cloud Datastore エミュレータを使用している場合は、dev_appserver に次のメッセージが表示されます。
... Using Cloud Datastore Emulator.
dev_appserver.py
の起動時に --support_datastore_emulator
フラグを true に設定すると、dev_appserver で Cloud Datastore エミュレータを強制的に使用できます。
python2 DEVAPPSERVER_ROOT/google_appengine/dev_appserver.py --support_datastore_emulator=[true|false] app.yaml
DEVAPPSERVER_ROOT は、devapp_server.py
のアーカイブ バージョンを抽出するフォルダのパスに置き換えます。アーカイブ バージョンの dev_appserver.py
のダウンロードと使用の詳細については、ローカル開発用サーバーの使用をご覧ください。
dev_appserver での Datastore エミュレータの使用
dev_appserver は、環境変数 DATASTORE_EMULATOR_HOST
に基づいてエミュレータを起動するかどうかを決定します。
この環境変数が存在する場合、dev_appserver は
DATASTORE_EMULATOR_HOST
で実行されている既存のエミュレータ プロセスと通信します。この環境変数が存在しない場合、dev_appserver は新しいエミュレータ プロセスを起動します。Datastore エミュレータのポートを指定するには、dev_appserver.py の起動時に
--datastore_emulator_port
を設定します。
動作の変更点
ローカルデータ形式の変換
現在、ローカルの Datastore エミュレータは sqlite3 にデータを保存しますが、Cloud Datastore エミュレータはデータを Java オブジェクトとして保存します。
dev_appserver が従来の sqlite3 データを使って起動された場合、そのデータは Java オブジェクトに変換されます。元のデータは、{元のデータファイル名}.sqlitestub というファイル名でバックアップされます。
ローカル データファイルの場所
ローカル データファイルは --datastore_path
フラグで指定できます。
dev_appserver がエミュレータを起動する場合、この場所は変更されません。
dev_appserver が既存の Cloud Datastore エミュレータを使用する場合、このフラグは無視され、エミュレータの設定が優先されます。
ローカルの index.yaml
空の index.yaml は無効と見なされます。index.yaml の構文は YAML 形式です。index.yaml ファイルには、indexes という名前のリスト要素が 1 つだけあります。
dev_appserver がエミュレータを起動すると、index.yaml はアプリケーション プロジェクト ディレクトリに残ります。
dev_appserver が既存の Cloud Datastore エミュレータを使用する場合、index.yaml はそのエミュレータによって管理されます。
ローカル Datastore サーバーのその他の機能は変更されません。
トラブルシューティング
エミュレータ出力の取得
デフォルトでは、dev_appserver は Datastore エミュレータをサイレント モードで実行します。Datastore エミュレータの出力を表示するには、--dev_appserver_log_level=debug
で dev_appserver を実行します。
gRPC のインポート エラー
dev_appserver は、gRPC を使用して Cloud Datastore エミュレータと通信します。gcloud CLI は gRPC をパッケージ化しますが、パッケージ化されたバージョンは一部のオペレーティング システムと互換性がないため、インポート エラーが発生します。
インポート エラーを修正するには、gcloud CLI 219.0.0 以降で pip
を使用して gRPC を個別にインストールします。
pip install grpcio