Google Cloud CLI 提供記憶體內的本機模擬器,可用於開發及測試應用程式。由於模擬器只會將資料儲存在記憶體中,因此重新啟動時會遺失所有狀態,包括資料、結構定義和設定。模擬器提供與 Spanner 正式環境服務相同的 API,可用於本機開發和測試,而非正式環境部署。
模擬器支援 GoogleSQL 和 PostgreSQL 方言。支援用戶端程式庫的所有語言。您也可以搭配使用模擬器與 gcloud CLI 和 REST API。
模擬器也以開放原始碼專案的形式提供,可在 GitHub 取得。
限制和差異
模擬器不支援下列項目:
- TLS/HTTPS、驗證、Identity and Access Management (IAM)、權限或角色。
- 在
PLAN或PROFILE查詢模式中,傳回的查詢計畫為空白。 ANALYZE陳述式。模擬器會接受但忽略該值。- 任何稽核記錄和監控工具。
- 資料庫捨棄保護。模擬器接受
enable_drop_protection欄位,但即使啟用這項屬性,仍允許捨棄資料庫。
模擬器與 Spanner 正式環境服務還有以下差異:
- 模擬器和正式環境服務的錯誤訊息可能不同。
- 模擬器的效能和擴充性不如正式版服務。
- 讀寫交易和結構定義變更會鎖定整個資料庫,直到完成為止。
- 模擬器支援分區 DML 和
partitionQuery,但不會驗證陳述式是否可分區。這表示分區 DML 或partitionQuery陳述式可能會在模擬器中執行,但在正式環境服務中失敗,並顯示無法分區的陳述式錯誤。
如需支援、不支援和部分支援的 API 和功能完整清單,請參閱 GitHub 中的 README 檔案。
執行模擬器的選項
執行模擬器的方法有兩種:
請選擇適合您應用程式開發和測試工作流程的方式。
使用 gcloud CLI 執行模擬器
如要使用 gcloud CLI 執行模擬器,請按照下列步驟操作:
安裝
cloud-spanner-emulator元件:gcloud components install cloud-spanner-emulator如果已安裝 gcloud CLI,請執行下列指令,確保所有元件都已更新:
gcloud components update啟動模擬器:
gcloud emulators spanner start模擬器會使用兩個本機端點:
- gRPC 要求的
localhost:9010 - REST 要求的
localhost:9020
- gRPC 要求的
使用 Docker 執行模擬器
如要使用 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 要求。
設定 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
切換設定
如要在模擬器和預設設定之間切換,請執行:
# To switch to default (production) configuration:
gcloud config configurations activate default
# To switch back to emulator configuration:
gcloud config configurations activate emulator
搭配模擬器使用用戶端程式庫
您可以設定 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 | 1.15.0 以上版本 |
| 小茹 | v1.13.0+ |
C 的其他操作說明
如果是 C# 用戶端程式庫,請在連線字串中指定 emulatordetection 選項。與其他用戶端程式庫不同,C# 預設會忽略 SPANNER_EMULATOR_HOST 環境變數。以下範例顯示連線字串:
var builder = new SpannerConnectionStringBuilder
{
DataSource = $"projects/{projectId}/instances/{instanceId}/databases/{databaseId}",
EmulatorDetection = "EmulatorOnly"
};