La gcloud CLI fournit un émulateur local en mémoire, que vous pouvez utiliser pour développer et tester vos applications gratuitement, sans créer de projet Google Cloud ni compte de facturation Google Cloud. É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 API GoogleSQL et PostgreSQL dialectes. Il est compatible avec toutes les langues bibliothèques clientes. Vous pouvez également utiliser l'émulateur avec la CLI Google Cloud 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, IAM, autorisations ou rôles
- Modes de requête
PLAN
ouPROFILE
. Compatible uniquement avecNORMAL
. - L'instruction
ANALYZE
. L'émulateur l'accepte, mais l'ignore. - N'importe quel outil de journalisation d'audit et de surveillance
L'émulateur diffère également du service de production Spanner des manières suivantes :
- Il est possible que les messages d'erreur ne soient pas cohérents entre l'émulateur et le service de production.
- Les performances et l'évolutivité de l'émulateur ne sont pas comparables au 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.
- Le LMD partitionné et l'interrogation de partition sont compatibles, mais l'émulateur ne vérifie pas que les instructions sont partitionnables. Cela signifie qu'une instruction de LMD partitionné ou d'interrogation de partition peut 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 fichier README dans GitHub.
Installer et exécuter l'émulateur
Les deux méthodes les plus courantes pour exécuter l'émulateur sont l'utilisation de la CLI gcloud et de Docker. Vous pouvez choisir la méthode la plus adaptée au workflow de développement et de test de votre application.
CLI gcloud
Pour les utilisateurs de Windows et MacOS, l'émulateur nécessite que Docker soit installé sur votre système et disponible sur le chemin d'accès du système.
Mettez à jour
gcloud
pour obtenir la dernière version :gcloud components update
Démarrez l'émulateur :
gcloud emulators spanner start
Si l'émulateur n'est pas déjà installé, vous serez invité à télécharger et installer le fichier binaire de l'émulateur.
Par défaut, l'émulateur héberge deux points de terminaison locaux :
localhost:9010
pour les requêtes gRPC etlocalhost:9020
pour les requêtes REST.Pour en savoir plus sur cette commande, consultez la page gcloud emulators spanner.
Docker
Assurez-vous que Docker est installé sur votre système et disponible sur le chemin d'accès au système.
Obtenez la dernière image de l'émulateur :
docker pull gcr.io/cloud-spanner-emulator/emulator
Démarrez l'émulateur :
docker run -p 9010:9010 -p 9020:9020 gcr.io/cloud-spanner-emulator/emulator
Cette commande exécute l'émulateur et mappe les ports du conteneur aux mêmes ports sur l'hôte local. Vous disposerez de deux points de terminaison locaux :
localhost:9010
pour les requêtes gRPC etlocalhost:9020
pour les requêtes REST.
Utiliser la gcloud CLI avec l'émulateur
Pour utiliser l'émulateur avec gcloud, vous devez désactiver l'authentification et remplacer le point de terminaison.
Nous vous recommandons de créer une configuration gcloud distincte afin de pouvoir basculer rapidement entre l'émulateur et le service de production. Pour créer et activer une configuration d'émulateur, exécutez les commandes suivantes :
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 cette configuration réalisée, les commandes gcloud sont envoyées à l'émulateur au lieu du service de production. Vous pouvez vérifier 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
Pour basculer entre l'émulateur et la configuration par défaut, exécutez la commande suivante :
gcloud config configurations activate [emulator | default]
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 l'hôte SPANNER_EMULATOR_HOST
défini, vous pouvez tester l'émulateur en suivant les guides de démarrage ci-dessous. Vous pouvez ignorer 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#, vous devez également spécifier l'option emulatordetection
dans la chaîne de connexion.
Contrairement aux autres bibliothèques clientes, C# ignore la variable d'environnement SPANNER_EMULATOR_HOST
par défaut. Voici la procédure à suivre :
var builder = new SpannerConnectionStringBuilder
{
DataSource = $"projects/{projectId}/instances/{instanceId}/databases/{databaseId}";
EmulatorDetection = "EmulatorOnly"
};