gcloud CLI fornisce un emulatore in memoria locale, che puoi utilizzare per sviluppare e testare le tue applicazioni gratuitamente senza creare un progetto Google Cloud o account di fatturazione. Poiché l'emulatore memorizza 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 i deployment di produzione.
L'emulatore supporta i dialetti GoogleSQL e PostgreSQL. Supporta tutte le lingue delle librerie client. Puoi anche usare l'emulatore con Google Cloud CLI e API REST.
L'emulatore è disponibile anche come progetto open source in GitHub.
Limitazioni e differenze
L'emulatore non supporta quanto segue:
- TLS/HTTPS, autenticazione, IAM, autorizzazioni o ruoli.
- Modalità di query
PLAN
oPROFILE
. Supporta soloNORMAL
. - L'istruzione
ANALYZE
. L'emulatore lo accetta, ma lo ignora. - Qualsiasi strumento di registrazione dei controlli e di monitoraggio.
L'emulatore si differenzia anche dal servizio di produzione Spanner per nei seguenti modi:
- 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 bloccheranno l'intero database per l'accesso esclusivo fino al loro completamento.
- Le istruzioni DML partizionate e Query di partizione sono supportate, ma l'emulatore non verifica che le istruzioni siano partizionabili. Ciò significa che un'istruzione DML partizionata o Query di partizione potrebbe essere eseguito nell'emulatore, ma potrebbe non riuscire nel servizio di produzione non partizionabile.
Per un elenco completo delle API e delle funzionalità supportate, non supportate e supportate parzialmente, consulta il file README su GitHub.
Installa ed esegui l'emulatore
I due modi più comuni per eseguire l'emulatore sono utilizzare gcloud CLI e Docker. Puoi scegliere il metodo più adatto per lo sviluppo e il flusso di lavoro di test delle applicazioni.
Interfaccia a riga di comando gcloud
Per gli utenti di Windows e MacOS, l'emulatore è necessario installare Docker sul sistema disponibili sul percorso di sistema.
Aggiorna
gcloud
per ottenere l'ultima versione:gcloud components update
Avvia l'emulatore:
gcloud emulators spanner start
Se l'emulatore non è già installato, ti verrà chiesto di scaricare e installare il file binario per l'emulatore.
Per impostazione predefinita, l'emulatore ospita due endpoint locali:
localhost:9010
per le richieste gRPC elocalhost:9020
per le richieste REST.Per maggiori dettagli su questo comando, consulta gcloud emulators spanner.
Docker
Assicurati che Docker sia installata sul sistema e disponibile nel percorso di sistema.
Scarica l'immagine dell'emulatore più recente:
docker pull gcr.io/cloud-spanner-emulator/emulator
Avvia l'emulatore:
docker run -p 9010:9010 -p 9020:9020 gcr.io/cloud-spanner-emulator/emulator
Questo comando esegue l'emulatore e mappa le porte nel container le stesse porte sull'host locale. Avrai due endpoint locali:
localhost:9010
per le richieste gRPC elocalhost:9020
per le richieste REST.
Utilizza gcloud CLI con l'emulatore
Per utilizzare l'emulatore con gcloud, devi disattivare l'autenticazione e sostituire l'endpoint.
Ti consigliamo di creare una configurazione gcloud separata, in modo da poter passare rapidamente dall'emulatore al servizio di produzione e viceversa. Per creare e attivare una configurazione dell'emulatore, esegui:
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 verranno inviati all'emulatore anziché al servizio di produzione. Puoi verificarlo creando un'istanza con 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]
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
.
Ci sono 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
All'avvio dell'applicazione, 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 introduttive riportate di seguito. Puoi ignorare le istruzioni relative al progetto
creazione, autenticazione e credenziali poiché non sono necessarie per utilizzare
un emulatore.
Guida introduttiva a C#. Devi impostare le opzioni della stringa di connessione. Consulta 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 | Versione 1.5.0 e successive |
Java | Versione 1.51.0 e 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 il parametro
emulatordetection
nella stringa di connessione.
A differenza delle altre librerie client, C# ignora la variabile di ambiente SPANNER_EMULATOR_HOST
per impostazione predefinita. Ecco come fare:
var builder = new SpannerConnectionStringBuilder
{
DataSource = $"projects/{projectId}/instances/{instanceId}/databases/{databaseId}";
EmulatorDetection = "EmulatorOnly"
};