L'interfaccia a riga di comando gcloud fornisce un emulatore in-memory locale che puoi utilizzare per sviluppare e testare le tue applicazioni con un'istanza di prova gratuita senza creare un progetto Google Cloud o un account di fatturazione. Poiché l'emulatore immagazzina i dati solo in memoria, tutto lo stato, inclusi dati, schema e configurazioni, viene perso al riavvio. L'emulatore offre le stesse API del servizio di produzione Spanner ed è progettato per lo sviluppo e i test locali, non per gli implementazioni di produzione.
L'emulatore supporta i dialetti GoogleSQL e PostgreSQL. Supporta tutte le lingue delle librerie client. Puoi anche utilizzare l'emulatore con Google Cloud CLI e le API REST.
L'emulatore è disponibile anche come progetto open source su GitHub.
Limitazioni e differenze
L'emulatore non supporta quanto segue:
- TLS/HTTPS, autenticazione, Identity and Access Management, autorizzazioni o ruoli.
- Nelle modalità di query
PLAN
oPROFILE
, il piano di query restituito è vuoto. - L'istruzione
ANALYZE
. L'emulatore lo accetta, ma lo ignora. - Qualsiasi strumento di registrazione dei controlli e di monitoraggio.
L'emulatore si differenzia inoltre dal servizio di produzione Spanner per i seguenti aspetti:
- I messaggi di errore potrebbero non essere coerenti tra l'emulatore e il servizio di produzione.
- Le prestazioni e la scalabilità dell'emulatore non sono paragonabili al servizio di produzione.
- Le transazioni di lettura/scrittura e le modifiche allo schema bloccano l'intero database per l'accesso esclusivo fino al loro completamento.
- La DML partizionata e
partitionQuery
sono supportate, ma l'emulatore non verifica che le istruzioni siano partizionabili. Ciò significa che un'istruzione DML opartitionQuery
partizionata potrebbe essere eseguita nell'emulatore, ma potrebbe non riuscire nel servizio di produzione con l'errore di istruzione non partizionabile.
Per un elenco completo delle API e delle funzionalità supportate, non supportate e supportate parzialmente, consulta il file README su GitHub.
Opzioni per l'esecuzione dell'emulatore
Esistono due modi comuni per eseguire l'emulatore:
Scegli il metodo più adatto per lo sviluppo e il flusso di lavoro di test dell'applicazione.
Configura l'emulatore per l'interfaccia alla gcloud CLI
Gli utenti Windows e macOS devono eseguire i seguenti passaggi prima di installare l'emulatore:
Installa i componenti dell'interfaccia a riga di comando gcloud sulla tua workstation:
gcloud components install
Se gcloud CLI è già installato, esegui il seguente comando per assicurarti che tutti i relativi componenti siano aggiornati:
gcloud components update
Crea e configura l'emulatore utilizzando gcloud CLI
Per utilizzare l'emulatore con l'interfaccia alla gcloud CLI, devi disattivare l'autenticazione e sostituire l'endpoint. Ti consigliamo di creare una configurazione gcloud CLI separata in modo da poter passare rapidamente dall'emulatore al servizio di produzione e viceversa.
Crea e attiva una configurazione dell'emulatore:
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/
Una volta configurati, i comandi gcloud CLI vengono inviati all'emulatore anziché al servizio di produzione. Puoi verificarlo creando un'istanza con la configurazione dell'istanza dell'emulatore:
gcloud spanner instances create test-instance \ --config=emulator-config --description="Test Instance" --nodes=1
Per passare dall'emulatore alla configurazione predefinita e viceversa, esegui:
gcloud config configurations activate [emulator | default]
Avvia l'emulatore utilizzando gcloud CLI.
Installa l'emulatore in Docker
Installa Docker sul sistema e rendilo disponibile nel percorso di sistema.
Scarica l'immagine dell'emulatore più recente:
docker pull gcr.io/cloud-spanner-emulator/emulator
Esegui l'emulatore in Docker:
docker run -p 9010:9010 -p 9020:9020 gcr.io/cloud-spanner-emulator/emulator
Questo comando esegue l'emulatore e mappa le porte del contenitore alle stesse porte sull'host locale. L'emulatore utilizza due endpoint locali:
localhost:9010
per le richieste gRPC elocalhost:9020
per le richieste REST.Avvia l'emulatore utilizzando gcloud CLI.
Avvia l'emulatore utilizzando gcloud CLI
Avvia l'emulatore utilizzando il comando gcloud emulators spanner:
gcloud emulators spanner start
L'emulatore utilizza due endpoint locali:
localhost:9010
per le richieste gRPClocalhost:9020
per le richieste REST
Utilizzare le librerie client con l'emulatore
Puoi utilizzare le versioni supportate delle librerie client con l'emulatore impostando la variabile di ambiente SPANNER_EMULATOR_HOST
.
Esistono molti modi per farlo. Ad esempio:
Linux/macOS
export SPANNER_EMULATOR_HOST=localhost:9010
Windows
set SPANNER_EMULATOR_HOST=localhost:9010
In alternativa, con gcloud env-init:
Linux/macOS
$(gcloud emulators spanner env-init)
Windows
gcloud emulators spanner env-init > set_vars.cmd && set_vars.cmd
Quando l'applicazione si avvia, la libreria client cerca automaticamenteSPANNER_EMULATOR_HOST
e si connette all'emulatore se è in esecuzione.
Una volta impostato SPANNER_EMULATOR_HOST
, puoi testare l'emulatore seguendo le guide per iniziare. Ignora le istruzioni relative alla creazione del progetto, all'autenticazione e alle credenziali, poiché non sono necessarie per utilizzare l'emulatore.
Guida introduttiva a C#. Devi impostare le opzioni della stringa di connessione. Consulta le istruzioni aggiuntive per C#.
Versioni supportate
La tabella seguente elenca le versioni delle librerie client che supportano l'emulatore.
Libreria client | Versione minima |
---|---|
C++ | v0.9.x+ |
C# | v3.1.0 e versioni successive |
Vai | v1.5.0 e versioni successive |
Java | v1.51.0 e versioni successive |
Node.js | v4.5.0 e versioni successive |
PHP | v1.25.0 e versioni successive |
Python | v1.15.0 e versioni successive |
Ruby | v1.13.0 e versioni successive |
Istruzioni aggiuntive per C#
Per la libreria client C#, devi specificare anche l'opzione
emulatordetection
nella stringa di connessione.
A differenza delle altre librerie client, C# ignora la variabile di ambiente SPANNER_EMULATOR_HOST
per impostazione predefinita. Di seguito è riportato un esempio di stringa di connessione:
var builder = new SpannerConnectionStringBuilder
{
DataSource = $"projects/{projectId}/instances/{instanceId}/databases/{databaseId}";
EmulatorDetection = "EmulatorOnly"
};