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
このコマンドはエミュレータを実行し、コンテナ内のポートをローカルホスト上の同じポートにマッピングします。エミュレータは、
localhost:9010
(gRPC リクエスト用)とlocalhost:9020
(REST リクエスト用)の 2 つのローカル エンドポイントを使用します。gcloud CLI を使用してエミュレータを起動します。
gcloud CLI でエミュレータを起動する
gcloud emulators spanner コマンドを使用してエミュレータを起動します。
gcloud emulators spanner start
エミュレータは次の 2 つのローカル エンドポイントを使用します。
localhost:9010
(gRPC リクエスト用)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"
};