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 archivia i dati solo in memoria, tutti gli stati, inclusi dati, schema e configurazioni, va perso al riavvio. L'emulatore offre le stesse API del servizio di produzione Spanner ed è previsto per lo sviluppo e i test locali, non per i deployment di produzione.
L'emulatore supporta sia GoogleSQL che PostgreSQL dialetti. 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 su GitHub.
Limitazioni e differenze
L'emulatore non supporta quanto segue:
- TLS/HTTPS, autenticazione, IAM, autorizzazioni o ruoli.
PLAN
oPROFILE
modalità di query. Supporta soloNORMAL
.- L'istruzione
ANALYZE
. L'emulatore accetta, ma lo ignora. - Qualsiasi strumento di audit logging e 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 la produzione completamente gestito di Google Cloud.
- Le prestazioni e la scalabilità dell'emulatore non sono paragonabili alla un 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.
- DML partizionata e query di partizione sono supportati, ma l'emulatore non verifica che le istruzioni siano partizionabile. 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 sono parzialmente supportati, README in GitHub.
Installa ed esegui l'emulatore
I due modi più comuni per eseguire l'emulatore sono utilizzare gcloud CLI e Docker. Puoi scegliere il modo più appropriato per lo sviluppo delle tue applicazioni e flusso di lavoro di test.
Interfaccia a riga di comando gcloud
Per gli utenti di Windows e MacOS, l'emulatore è necessario installare Docker sul sistema e 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 scaricarlo e installo il programma binario dell'emulatore.
Per impostazione predefinita, l'emulatore ospita due endpoint locali:
localhost:9010
per Richieste gRPC elocalhost:9020
per le richieste REST.Per ulteriori dettagli su vedi 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é il 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]
Utilizza 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 verifica automaticamente la presenza di
SPANNER_EMULATOR_HOST
e si connette all'emulatore, se è in esecuzione.
Dopo aver impostato SPANNER_EMULATOR_HOST
, puoi testare l'emulatore seguendo le istruzioni riportate in
di seguito sono riportate alcune guide introduttive. Puoi ignorare le istruzioni relative al progetto
creazione, autenticazione e credenziali poiché non sono necessarie per utilizzare
un emulatore.
Getting Started in C#. Devi impostare le opzioni per la 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++ | Versione 0.9.x+ |
C# | Versione 3.1.0 e successive |
Vai | Versione 1.5.0 e successive |
Java | Versione 1.51.0 e successive |
Node.js | Versione 4.5.0 o successiva |
PHP | Versione 1.25.0 e successive |
Python | Versione 1.15.0 e successive |
Ruby | Versione 1.13.0 e 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 SPANNER_EMULATOR_HOST
variabile di ambiente per impostazione predefinita. Ecco come fare:
var builder = new SpannerConnectionStringBuilder
{
DataSource = $"projects/{projectId}/instances/{instanceId}/databases/{databaseId}";
EmulatorDetection = "EmulatorOnly"
};