gcloud CLI にはローカルなインメモリのエミュレータが用意されています。このエミュレータを使用すると、Google Cloud プロジェクトや請求先アカウントを作成することなく、無料トライアル インスタンスでアプリケーションを開発してテストできます。エミュレータはメモリにのみデータを格納するため、再起動するとデータ、スキーマ、構成など、すべての状態が失われます。このエミュレータは Spanner の本番環境サービスと同じ API を提供し、本番環境へのデプロイではなく、ローカルでの開発とテストを目的として作られています。
エミュレータは、GoogleSQL と PostgreSQL の両方の言語をサポートしています。クライアント ライブラリのすべての言語をサポートしています。エミュレータは Google Cloud CLI と REST API で使用することもできます。
エミュレータは、GitHub でオープンソース プロジェクトとしても利用できます。
制限事項と相違点
エミュレータでは、次の機能はサポートされていません。
- TLS/HTTPS、認証、Identity and Access Management、権限、ロール。
PLAN
またはPROFILE
のクエリモードでは、返されるクエリプランは空です。ANALYZE
ステートメントエミュレータは受け取りますが、無視します。- 監査ログとモニタリング ツール。
また、エミュレータは、次の点で Spanner 本番環境サービスと異なります。
- エミュレータと本番環境サービスでエラー メッセージが一致しない場合があります。
- エミュレータのパフォーマンスとスケーラビリティは、本番環境サービスと同等ではありません。
- 読み取り / 書き込みトランザクションとスキーマ変更は、完了するまでデータベース全体を排他的にのみアクセスできるようにロックします。
- パーティション化 DML と
partitionQuery
はサポートされていますが、エミュレータはステートメントが分割可能かどうかは確認しません。つまり、パーティション化 DML またはpartitionQuery
ステートメントがエミュレータで実行される場合でも、本番環境ではパーティション化できないステートメント エラーにより失敗する可能性があります。
サポートされている、サポートされていない、部分的にサポートされている API と機能の完全なリストについては、GitHub の README ファイルをご覧ください。
エミュレータを実行するためのオプション
エミュレータを実行する一般的な方法は 2 つあります。
実際のアプリケーション開発とテスト ワークフローに適した方法を選択してください。
gcloud CLI 用のエミュレータをセットアップする
Windows と macOS のユーザーは、エミュレータをインストールする前に、次の操作を行います。
ワークステーションに gcloud CLI コンポーネントをインストールします。
gcloud components install
gcloud CLI がすでにインストールされている場合は、次のコマンドを実行してすべてのコンポーネントが更新されていることを確認します。
gcloud components update
gcloud CLI を使用してエミュレータを作成して構成する
エミュレータを gcloud CLI で使用するには、認証を無効にしてエンドポイントをオーバーライドする必要があります。エミュレータと本番環境サービスをすばやく切り替えることができるように、別の gcloud CLI 構成を作成することをおすすめします。
エミュレータの構成を作成して有効にします。
gcloud config configurations create emulator gcloud config set auth/disable_credentials true gcloud config set project your-project-id gcloud config set api_endpoint_overrides/spanner http://localhost:9020/
構成が完了すると、gcloud CLI コマンドが本番環境サービスではなくエミュレータに送信されます。これを確認するには、エミュレータのインスタンス構成を使用してインスタンスを作成します。
gcloud spanner instances create test-instance \ --config=emulator-config --description="Test Instance" --nodes=1
エミュレータとデフォルト構成を切り替えるには、次のコマンドを実行します。
gcloud config configurations activate [emulator | default]
gcloud CLI を使用してエミュレータを起動します。
Docker にエミュレータをインストールする
システムに Docker をインストールし、システムパスで使用できるようにします。
最新のエミュレータ イメージを取得します。
docker pull gcr.io/cloud-spanner-emulator/emulator
Docker でエミュレータを実行します。
docker run -p 9010:9010 -p 9020:9020 gcr.io/cloud-spanner-emulator/emulator
このコマンドはエミュレータを実行し、コンテナ内のポートをローカルホスト上の同じポートにマッピングします。エミュレータは、gRPC リクエスト用の
localhost:9010
と REST リクエスト用のlocalhost:9020
の 2 つのローカル エンドポイントを使用します。gcloud CLI を使用してエミュレータを起動します。
gcloud CLI を使用してエミュレータを起動する
gcloud emulators spanner コマンドを使用してエミュレータを起動します。
gcloud emulators spanner start
エミュレータは、次の 2 つのローカル エンドポイントを使用します。
- gRPC リクエストの
localhost:9010
localhost:9020
: REST リクエスト用
エミュレータでのクライアント ライブラリの使用
SPANNER_EMULATOR_HOST
環境変数を設定すると、サポート対象バージョンのクライアント ライブラリをエミュレータで使用できます。アップロードの方法は数多くあります。次に例を示します。
Linux / macOS
export SPANNER_EMULATOR_HOST=localhost:9010
Windows
set SPANNER_EMULATOR_HOST=localhost:9010
または、gcloud env-init を使用します。
Linux / macOS
$(gcloud emulators spanner env-init)
Windows
gcloud emulators spanner env-init > set_vars.cmd && set_vars.cmd
アプリケーションが起動すると、クライアント ライブラリは自動的に SPANNER_EMULATOR_HOST
をチェックし、エミュレータが実行されている場合は接続します。
SPANNER_EMULATOR_HOST
が設定されていると、スタートガイドに沿ってエミュレータをテストできます。プロジェクトの作成、認証、認証情報に関連した手順は、エミュレータの使用に必要ないため、無視してかまいません。
C# で使ってみる。接続文字列オプションを設定する必要があります。C#の場合の追加手順をご覧ください。
サポート対象のバージョン
下の表に、エミュレータをサポートするクライアント ライブラリのバージョンを示します。
クライアント ライブラリ | 最小バージョン |
---|---|
C++ | v0.9.x+ |
C# | v3.1.0+ |
Go | v1.5.0+ |
Java | v1.51.0+ |
Node.js | v4.5.0+ |
PHP | v1.25.0+ |
Python | v1.15.0+ |
Ruby | v1.13.0+ |
C# の場合の追加手順
C# クライアント ライブラリの場合は、接続文字列で emulatordetection
オプションも指定する必要があります。
他のクライアント ライブラリとは異なり、C# は、デフォルトで SPANNER_EMULATOR_HOST
環境変数を無視します。接続文字列の例を次に示します。
var builder = new SpannerConnectionStringBuilder
{
DataSource = $"projects/{projectId}/instances/{instanceId}/databases/{databaseId}";
EmulatorDetection = "EmulatorOnly"
};