Le gcloud CLI fournit un émulateur local en mémoire pour développer et tester vos applications. Étant donné que l'émulateur stocke les données uniquement en mémoire, tous les états, y compris les données, le schéma et les configurations, sont perdus au redémarrage. L'émulateur propose les mêmes API que le service de production Spanner. Il est destiné au développement et aux tests locaux, et non aux déploiements en production.
L'émulateur est compatible avec les dialectes GoogleSQL et PostgreSQL. Il est compatible avec tous les langages des bibliothèques clientes. Vous pouvez également utiliser l'émulateur avec le Google Cloud CLI et les API REST.
L'émulateur est également disponible en tant que projet Open Source dans GitHub.
Limites et différences
L'émulateur n'est pas compatible avec les éléments suivants :
- TLS/HTTPS, authentification, Identity and Access Management (IAM), autorisations ou rôles
- Dans les modes de requête
PLANouPROFILE, le plan de requête renvoyé est vide. - L'
ANALYZEinstruction. L'émulateur l'accepte, mais l'ignore. - N'importe quel outil de journalisation d'audit et de surveillance
- Protection contre la suppression de bases de données L'émulateur accepte le champ
enable_drop_protection, mais il autorise la suppression de bases de données même si cette propriété est activée.
L'émulateur diffère également du service de production Spanner des manières suivantes :
- Les messages d'erreur peuvent différer entre l'émulateur et le service de production.
- Les performances et l'évolutivité de l'émulateur ne sont pas comparables à celles du service de production.
- Les transactions en lecture/écriture et les modifications de schéma bloquent l'intégralité de la base de données pour y accéder de manière exclusive jusqu'à ce qu'elles soient terminées.
- L'émulateur est compatible avec le LMD partitionné et
partitionQuery, mais il ne vérifie pas que les instructions sont partitionnables. Cela signifie qu'une instruction de LMD partitionné oupartitionQuerypeut s'exécuter dans l'émulateur, mais peut échouer dans le service de production avec une erreur d'instruction non partitionnable.
Pour obtenir la liste complète des API et des fonctionnalités compatibles, non compatibles et partiellement compatibles, consultez le README dans GitHub.
Options d'exécution de l'émulateur
Il existe deux façons courantes d'exécuter l'émulateur :
Choisissez la méthode la plus adaptée au workflow de développement et de test de votre application.
Exécuter l'émulateur à l'aide de gcloud CLI
Pour exécuter l'émulateur à l'aide de Google Cloud CLI :
Installez le composant
cloud-spanner-emulator:gcloud components install cloud-spanner-emulatorSi gcloud CLI est déjà installé, exécutez la commande suivante pour vous assurer que tous ses composants sont à jour :
gcloud components updateDémarrez l'émulateur :
gcloud emulators spanner startL'émulateur utilise deux points de terminaison locaux :
localhost:9010pour les requêtes gRPClocalhost:9020pour les requêtes REST
Exécuter l'émulateur à l'aide de Docker
Pour exécuter l'émulateur à l'aide de Docker :
Installez Docker sur votre système et mettez-le à disposition sur le chemin d'accès au système.
Obtenez la dernière image de l'émulateur :
docker pull gcr.io/cloud-spanner-emulator/emulatorExécutez l'émulateur dans Docker :
docker run -p 9010:9010 -p 9020:9020 gcr.io/cloud-spanner-emulator/emulatorCette commande exécute l'émulateur et mappe les ports du conteneur aux mêmes ports sur l'hôte local. L'émulateur utilise deux points de terminaison locaux :
localhost:9010pour les requêtes gRPC etlocalhost:9020pour les requêtes REST.
Configurer gcloud CLI pour utiliser l'émulateur
Pour utiliser l'émulateur avec gcloud CLI, désactivez l'authentification et remplacez le point de terminaison. Créez une configuration gcloud CLI distincte pour basculer rapidement entre l'émulateur et le service de production.
Créez et activez une configuration d'émulateur :
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/Une fois configuré, gcloud CLI envoie vos commandes à l'émulateur au lieu du service de production. Vérifiez que c'est bien le cas en créant une instance à l'aide de la configuration d'instance de l'émulateur :
gcloud spanner instances create test-instance \ --config=emulator-config --description="Test Instance" --nodes=1
Basculer entre les configurations
Pour basculer entre l'émulateur et votre configuration par défaut, exécutez la commande suivante :
# To switch to default (production) configuration:
gcloud config configurations activate default
# To switch back to emulator configuration:
gcloud config configurations activate emulator
Utiliser les bibliothèques clientes avec l'émulateur
Vous pouvez utiliser les versions compatibles des bibliothèques clientes
avec l'émulateur en définissant la variable d'environnement SPANNER_EMULATOR_HOST.
Pour ce faire, il existe plusieurs méthodes : Exemple :
Linux/macOS
export SPANNER_EMULATOR_HOST=localhost:9010
Windows
set SPANNER_EMULATOR_HOST=localhost:9010
Ou avec gcloud env-init :
Linux/macOS
$(gcloud emulators spanner env-init)
Windows
gcloud emulators spanner env-init > set_vars.cmd && set_vars.cmd
Lorsque votre application démarre, la bibliothèque cliente recherche automatiquement SPANNER_EMULATOR_HOST et se connecte à l'émulateur s'il est en cours d'exécution.
Une fois SPANNER_EMULATOR_HOST défini, vous pouvez tester l'émulateur en suivant les guides de démarrage. Ignorez les instructions concernant la création, l'authentification et les identifiants du projet, car elles ne sont pas nécessaires pour utiliser l'émulateur.
Premiers pas avec C# Vous devez définir des options de chaîne de connexion. Consultez les instructions supplémentaires pour C#.
Versions compatibles
Le tableau suivant répertorie les versions des bibliothèques clientes compatibles avec l'émulateur.
| Bibliothèque cliente | Version minimale |
|---|---|
| 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+ |
Instructions supplémentaires pour C#
Pour la bibliothèque cliente C#, spécifiez l'
emulatordetection
option dans la chaîne de connexion.
Contrairement aux autres bibliothèques clientes, C# ignore la variable d'environnement SPANNER_EMULATOR_HOST par défaut. L'exemple suivant montre la chaîne de connexion :
var builder = new SpannerConnectionStringBuilder
{
DataSource = $"projects/{projectId}/instances/{instanceId}/databases/{databaseId}",
EmulatorDetection = "EmulatorOnly"
};