Développer localement avec l’émulateur Azure Cosmos DB
Article
Un cas d’usage courant pour l’émulateur consiste à servir de base de données de développement pendant que vous générez vos applications. L’utilisation de l’émulateur pour le développement peut vous aider à découvrir les caractéristiques de création et de modélisation des données pour une base de données comme Azure Cosmos DB sans entraîner de coûts de service. En outre, l’utilisation de l’émulateur dans le cadre d’un workflow d’automatisation peut vous permettre d’exécuter la même suite de tests d’intégration. Vous pouvez vous assurer que les mêmes tests s’exécutent localement sur votre ordinateur de développement et à distance dans un travail d’intégration continue.
Vérifiez si l’image de l’émulateur est disponible sur votre hôte Docker local.
PowerShell
docker images
Pour commencer, téléchargez et installez la dernière version de l’émulateur Azure Cosmos DB sur votre ordinateur local.
Conseil
L’article Notes de publication de l’émulateur répertorie toutes les versions disponibles et les mises à jour de fonctionnalités qui ont été effectuées dans chaque version.
Extrayez l’image mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator conteneur Linux à l’aide de la mongodb balise du registre de conteneurs vers l’hôte Docker local.
Vérifiez si l’image de l’émulateur est disponible sur votre hôte Docker local.
Bash
docker images
L’image conteneur Docker (Windows) ne prend pas en charge l’API pour MongoDB.
Pour commencer, téléchargez et installez la dernière version de l’émulateur Azure Cosmos DB sur votre ordinateur local.
Conseil
L’article Notes de publication de l’émulateur répertorie toutes les versions disponibles et les mises à jour de fonctionnalités qui ont été effectuées dans chaque version.
La variante de conteneur Docker (Linux ou Windows) de l’émulateur ne prend pas en charge l’API pour Apache Cassandra, l’API pour Apache Gremlin ou l’API pour Table.
Pour commencer, téléchargez et installez la dernière version de l’émulateur Azure Cosmos DB sur votre ordinateur local.
Conseil
L’article Notes de publication de l’émulateur répertorie toutes les versions disponibles et les mises à jour de fonctionnalités qui ont été effectuées dans chaque version.
La variante de conteneur Docker de l’émulateur ne prend pas en charge l’API pour Apache Cassandra.
Démarrez l’exécutable de l’émulateur (Microsoft.Azure.Cosmos.Emulator.exe) au niveau du chemin d’accès %ProgramFiles%\Azure Cosmos DB Emulator. Utilisez ces paramètres pour configurer l’émulateur :
Description
EnableCassandraEndpoint
Active le point de terminaison API pour Apache Cassandra.
CassandraPort
Numéro de port à utiliser pour le point de terminaison.
La variante de conteneur Docker de l’émulateur ne prend pas en charge l’API pour Apache Gremlin.
Démarrez l’exécutable de l’émulateur (Microsoft.Azure.Cosmos.Emulator.exe) au niveau du chemin d’accès %ProgramFiles%\Azure Cosmos DB Emulator. Utilisez ces paramètres pour configurer l’émulateur :
Description
EnableGremlinEndpoint
Active l’API pour le point de terminaison Apache Gremlin.
GremlinPort
Numéro de port à utiliser pour le point de terminaison.
La variante de conteneur Docker de l’émulateur ne prend pas en charge l’API pour Table.
Démarrez l’exécutable de l’émulateur (Microsoft.Azure.Cosmos.Emulator.exe) au niveau du chemin d’accès %ProgramFiles%\Azure Cosmos DB Emulator. Utilisez ces paramètres pour configurer l’émulateur :
Description
EnableTableEndpoint
Active l’API pour le point de terminaison Table.
TablePort
Numéro de port à utiliser pour le point de terminaison.
Accédez à https://localhost:8081/_explorer/index.html pour accéder à l’Explorateur de données.
Démarrez l’émulateur en sélectionnant l’application dans le menu Démarrer de Windows.
Vous pouvez également démarrer l’exécutable de l’émulateur (Microsoft.Azure.Cosmos.Emulator.exe) au niveau du chemin d’accès %ProgramFiles%\Azure Cosmos DB Emulator.
Vous pouvez également démarrer l’émulateur à partir de la ligne de commande. Utilisez ces paramètres pour configurer l’émulateur :
Description
Port
Numéro de port à utiliser pour le point de terminaison API for NoSQL.
Accédez à https://localhost:8081/_explorer/index.html pour accéder à l’Explorateur de données.
L’image conteneur Docker (Windows) ne prend pas en charge l’API pour MongoDB.
Démarrez l’exécutable de l’émulateur (Microsoft.Azure.Cosmos.Emulator.exe) au niveau du chemin d’accès %ProgramFiles%\Azure Cosmos DB Emulator. Utilisez ces paramètres pour configurer l’émulateur :
Description
EnableMongoDbEndpoint
Active l’API pour le point de terminaison MongoDB à la version MongoDB spécifiée.
MongoPort
Numéro de port à utiliser pour le point de terminaison.
Pour plus d’informations sur les arguments de ligne de commande et les versions MongoDB prises en charge par l’émulateur, consultez Paramètres de ligne de commande.
L’émulateur ouvre automatiquement l’Explorateur de données à l’aide de l’URL https://localhost:8081/_explorer/index.html.
Importer le certificat TLS/SSL de l'émulateur
Importez le certificat TLS/SSL de l'émulateur pour utiliser l'émulateur avec votre kit SDK de développement préféré sans désactiver TLS/SSL sur le client.
La variante de conteneur Docker (Linux ou Windows) de l’émulateur ne prend pas en charge l’API pour Apache Cassandra, l’API pour Apache Gremlin ou l’API pour Table.
L’installation locale Windows de l’émulateur importe automatiquement les certificats TLS/SSL. Aucune action supplémentaire n’est nécessaire.
Le certificat de l'émulateur est disponible sur le chemin d'accès _explorer/emulator.pem sur le conteneur en cours d'exécution. Utilisez curl pour télécharger le certificat depuis conteneur en cours d’exécution sur votre ordinateur local.
Obtenez le certificat à partir du conteneur en cours d’exécution.
Il peut être nécessaire de changer l’hôte (ou l’adresse IP) et le numéro de port si vous avez déjà modifié ces valeurs.
Installez le certificat selon le processus généralement utilisé pour votre système d’exploitation. Par exemple dans Linux, vous copiez le certificat dans le chemin /usr/local/share/ca-certificates/.
Pour les systèmes Linux, regénérez le bundle de certificats à l’aide de la commande appropriée pour votre distribution Linux.
Pour les systèmes Linux basés sur Debian (par exemple Ubuntu), utilisez :
Bash
sudo update-ca-certificates
Pour les systèmes Linux basés sur Red Hat (par exemple CentOS, Fedora), utilisez :
Bash
sudo update-ca-trust
Pour obtenir des instructions plus détaillées, consultez la documentation spécifique à votre système d’exploitation.
Le certificat de l’émulateur est disponible dans le dossier C:\CosmosDB.Emulator\bind-mount du conteneur en cours d’exécution. Le dossier contient également un script permettant d’installer automatiquement le certificat.
Utilisez docker cp pour copier l’ensemble du dossier sur votre machine locale.
Exécutez le script importcert.ps1 dans le dossier.
PowerShell
.\bind-mount\importcert.ps1
L’installation locale Windows de l’émulateur importe automatiquement les certificats TLS/SSL. Aucune action supplémentaire n’est nécessaire.
Se connecter à l’émulateur à partir du Kit de développement logiciel (SDK)
Chaque KIT de développement logiciel (SDK) inclut une classe de client généralement utilisée pour connecter le KIT de développement logiciel (SDK) à votre compte Azure Cosmos DB. En utilisant les informations d'identification de l'émulateur, vous pouvez connecter le kit SDK à l'instance de l'émulateur à la place.
Créez un élément dans le conteneur à l’aide de UpsertItemAsync.
C#
var item = new
{
id = "68719518371",
name = "Kiama classic surfboard"
};
await container.UpsertItemAsync(item);
Exécutez l’application .NET.
Bash
dotnet run
Avertissement
Si vous obtenez une erreur SSL, vous devrez peut-être désactiver TLS/SSL pour votre application. Cela se produit généralement si vous développez sur votre ordinateur local, que vous utilisez l’émulateur Azure Cosmos DB dans un conteneur et que vous n’avez pas importé le certificat SSL du conteneur. Pour résoudre ce problème, configurez les options du client pour désactiver la validation TLS/SSL avant de créer le client :
Si vous obtenez une erreur SSL, vous devrez peut-être désactiver TLS/SSL pour votre application. Cela se produit généralement si vous développez sur votre ordinateur local, que vous utilisez l’émulateur Azure Cosmos DB dans un conteneur et que vous n’avez pas importé le certificat SSL du conteneur. Pour résoudre ce problème, configurez l’application pour désactiver la validation TLS/SSL avant de créer le client :
Python
import urllib3
urllib3.disable_warnings()
Si vous êtes toujours confronté à des erreurs SSL, il est possible que Python récupère les certificats à partir d’un autre magasin de certificats. Pour déterminer le chemin d'accès où Python recherche les certificats, procédez comme suit :
Important
Si vous utilisez un environnement virtuel (venv) Python assurez-vous qu'il est activé avant d'exécuter les commandes !
Ouvrez un terminal.
Démarrez l'interpréteur Python en tapant Python ou Python3, en fonction de votre version de Python.
Dans l'interpréteur Python, exécutez les commandes suivantes :
Python
from requests.utils import DEFAULT_CA_BUNDLE_PATH
print(DEFAULT_CA_BUNDLE_PATH)
Dans un environnement virtuel, le chemin d’accès peut être (au moins dans Ubuntu) :
En dehors d’un environnement virtuel, le chemin d’accès peut être (au moins dans Ubuntu) :
Bash
/etc/ssl/certs/ca-certificates.crt
Une fois que vous avez identifié le DEFAULT_CA_BUNDLE_PATH, ouvrez un nouveau terminal, puis exécutez les commandes suivantes pour ajouter le certificat d’émulateur au bundle de certificats :
Important
Si DEFAULT_CA_BUNDLE_PATH variable pointe vers un répertoire système, vous pouvez rencontrer une erreur « Autorisation refusée ». Dans ce cas, vous devez exécuter les commandes avec des privilèges élevés (en tant que racine). En outre, vous devez mettre à jour et régénérer le pack de certificats après l'exécution des commandes fournies.
Bash
# Add a new line to the certificate bundleecho >> /path/to/ca_bundle
Bash
# Append the emulator certificate to the certificate bundle
cat /path/to/emulatorcert.crt >> /path/to/ca_bundle
Si vous obtenez une erreur SSL, vous devrez peut-être désactiver TLS/SSL pour votre application. Cela se produit généralement si vous développez sur votre ordinateur local, que vous utilisez l’émulateur Azure Cosmos DB dans un conteneur et que vous n’avez pas importé le certificat SSL du conteneur. Pour résoudre ce problème, configurez l’application pour désactiver la validation TLS/SSL avant de créer le client :
Ajouter un bloc d'utilisation pour l'espace de noms MongoDB.Driver.
C#
using MongoDB.Driver;
Créez un instance d’utilisation des MongoClient informations d’identification de l’émulateur.
C#
var client = new MongoClient("mongodb://localhost:C2y6yDjf5%2FR%2Bob0N8A7Cgv30VRDJIWEHLM%2B4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw%2FJw%3D%3D@localhost:10255/admin?ssl=true&retrywrites=false");
Utilisez le pilote Node.js MongoDB pour vous connecter à l’émulateur à partir d’une application /JavaScript Node.js.
Démarrez dans un dossier vide.
Initialiser un nouveau module.
Bash
npm init es6 --yes
Installez le package mongodb à partir du Gestionnaire de package Node.
Bash
npm install --save mongodb
Créez le fichier app.js.
Importez le MongoClient type à partir du mongodb module.
JavaScript
import { MongoClient } from'mongodb'
Utilisez MongoClient pour créer un client instance à l’aide des informations d’identification de l’émulateur. Utilisez connect pour vous connecter à l’émulateur.
JavaScript
const client = new MongoClient('mongodb://localhost:C2y6yDjf5%2FR%2Bob0N8A7Cgv30VRDJIWEHLM%2B4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw%2FJw%3D%3D@localhost:10255/admin?ssl=true&retrywrites=false')
await client.connect()
Utilisez db et collection pour créer une base de données et un conteneur.
Si vous obtenez une erreur SSL, vous devrez peut-être désactiver TLS/SSL pour votre application. Cela se produit généralement si vous développez sur votre ordinateur local, que vous utilisez l’émulateur Azure Cosmos DB dans un conteneur et que vous n’avez pas importé le certificat SSL du conteneur. Pour résoudre ce problème, configurez l’application pour désactiver la validation TLS/SSL avant de créer le client :
var createKeyspace = await session.PrepareAsync("CREATE KEYSPACE IF NOT EXISTS cosmicworks WITH replication = {'class':'basicclass', 'replication_factor': 1};");await session.ExecuteAsync(createKeyspace.Bind());
var createTable = await session.PrepareAsync("CREATE TABLE IF NOT EXISTS cosmicworks.products (id text PRIMARY KEY, name text)");await session.ExecuteAsync(createTable.Bind());
Créez un élément dans la table à l’aide de ExecuteAsync. Utilisez Bind pour affecter des propriétés à l’élément.
C#
var item = new
{
id = "68719518371",
name = "Kiama classic surfboard"
};
var createItem = await session.PrepareAsync("INSERT INTO cosmicworks.products (id, name) VALUES (?, ?)");
var createItemStatement = createItem.Bind(item.id, item.name);
await session.ExecuteAsync(createItemStatement);
Importez le cassandra-driver package à partir de l’index de package Python.
Bash
pip install cassandra-driver
Ouvrez le fichier app.py.
Importez PROTOCOL_TLS_CLIENT, SSLContextet CERT_NONE à partir du module ssl. Ensuite, importez Cluster à partir du modulecassandra.cluster. Enfin, importez PlainTextAuthProvider à partir du cassandra.auth module.
Python
from ssl import PROTOCOL_TLS_CLIENT, SSLContext, CERT_NONE
from cassandra.cluster import Cluster
from cassandra.auth import PlainTextAuthProvider
Créez une variable de contexte TLS/SSL à l’aide de SSLContext. Configurez le contexte pour ne pas vérifier le certificat auto-signé de l’émulateur.
Créez un espace de clés et une table à l’aide de session.execute.
Python
session.execute(
"CREATE KEYSPACE IF NOT EXISTS cosmicworks WITH replication = {'class':'ba""sicclass', 'replication_factor': 1};"
)
session.execute(
"CREATE TABLE IF NOT EXISTS cosmicworks.products (id text PRIMARY KEY, nam""e text)"
)
Utilisez session.execute pour créer un élément dans la table.
Installez le package cassandra-driver à partir du Gestionnaire de package Node.
Bash
npm install --save cassandra-driver
Créez le fichier app.js.
Importez le Client type et auth l’espace de noms à partir du module cassandra-driver.
JavaScript
import { Client, auth } from'cassandra-driver'
Utilisez PlainTextAuthProvider pour créer un objet pour les informations d’identification de l’émulateur. Utilisez Client pour vous connecter à l’émulateur à l’aide des informations d’identification.
JavaScript
const credentials = new auth.PlainTextAuthProvider('localhost',
'C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==')
const client = new Client({
contactPoints: [
'localhost:10350'
],
authProvider: credentials,
localDataCenter: 'South Central US'
})
Permet execute d’exécuter une commande côté serveur pour créer un espace de clés et une table.
JavaScript
await client.execute(
'CREATE KEYSPACE IF NOT EXISTS cosmicworks WITH replication = {\'class\':\'basicclass\', \'replication_factor\': 1};'
)
await client.execute(
'CREATE TABLE IF NOT EXISTS cosmicworks.products (id text PRIMARY KEY, name text)'
)
Utilisez execute à nouveau pour créer un élément avec des paramètres.
Si vous obtenez une erreur SSL, vous devrez peut-être désactiver TLS/SSL pour votre application. Cela se produit généralement si vous développez sur votre ordinateur local, que vous utilisez l’émulateur Azure Cosmos DB dans un conteneur et que vous n’avez pas importé le certificat SSL du conteneur. Pour résoudre ce problème, configurez le client pour désactiver la validation TLS/SSL :
Avant de commencer, l’API pour Apache Gremlin vous oblige à créer vos ressources dans l’émulateur. Créez une base de données nommée db1 et un conteneur nommé coll1. Les paramètres de débit ne sont pas pertinents pour ce guide et peuvent être définis aussi bas que vous le souhaitez.
Créez une instance de GremlinServer et GremlinClient à l’aide des informations d’identification de l’émulateur.
C#
var server = new GremlinServer(
hostname: "localhost",
port: 8901,
username: "/dbs/db1/colls/coll1",
password: "C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw=="
);
usingvar client = new GremlinClient(
gremlinServer: server,
messageSerializer: new Gremlin.Net.Structure.IO.GraphSON.GraphSON2MessageSerializer()
);
Installez le package gremlin à partir du Gestionnaire de package Node.
Bash
npm install --save gremlin
Créez le fichier app.js.
Importez le module gremlin.
JavaScript
import gremlin from'gremlin'
Utilisez PlainTextSaslAuthenticator pour créer un objet pour les informations d’identification de l’émulateur. Utilisez Client pour vous connecter à l’émulateur à l’aide des informations d’identification.
Ajouter un bloc d'utilisation pour l'espace de noms Azure.Data.Tables.
C#
using Azure.Data.Tables;
Créez un instance d’utilisation des TableServiceClient informations d’identification de l’émulateur.
C#
var serviceClient = new TableServiceClient(
connectionString: "DefaultEndpointsProtocol=http;AccountName=localhost;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==;TableEndpoint=http://localhost:8902/;");
Si vous obtenez une erreur SSL, vous devrez peut-être désactiver TLS/SSL pour votre application. Cela se produit généralement si vous développez sur votre ordinateur local, que vous utilisez l’émulateur Azure Cosmos DB dans un conteneur et que vous n’avez pas importé le certificat SSL du conteneur. Pour résoudre ce problème, configurez le client pour désactiver la validation TLS/SSL :
Utiliser l’émulateur dans un flux de travail CI GitHub Actions
Pour exécuter une charge de travail d’intégration continue qui valide automatiquement votre application, utilisez l’émulateur Azure Cosmos DB avec une suite de tests de l’infrastructure de votre choix. L’émulateur Azure Cosmos DB est préinstallé dans la windows-latest variante des exécuteurs hébergés de GitHub Action.
Démarrez l’émulateur à partir de la ligne de commande à l’aide de différents arguments ou commandes PowerShell. Pour plus d’informations, consultez Arguments de ligne de commande de l’émulateur.
Testez votre application Python et vos opérations de base de données à l’aide de pytest.
Vérifiez que la suite de tests unitaires pour votre application fonctionne comme prévu.
Bash
pip install -U pytest
pytest
Créez un flux de travail dans votre référentiel GitHub dans un fichier nommé .github/workflows/ci.yml.
Ajoutez un travail à votre workflow pour démarrer l’émulateur Azure Cosmos DB à l’aide de PowerShell et exécuter votre suite de tests unitaires.
Démarrez l’émulateur à partir de la ligne de commande à l’aide de différents arguments ou commandes PowerShell. Pour plus d’informations, consultez Arguments de ligne de commande de l’émulateur.
Utilisez mocha pour tester votre application Node.js et ses modifications de base de données.
Vérifiez que la suite de tests unitaires pour votre application fonctionne comme prévu.
Bash
npm install --global mocha
mocha
Créez un flux de travail dans votre référentiel GitHub dans un fichier nommé .github/workflows/ci.yml.
Ajoutez un travail à votre workflow pour démarrer l’émulateur Azure Cosmos DB à l’aide de PowerShell et exécuter votre suite de tests unitaires.
Démarrez l’émulateur à partir de la ligne de commande à l’aide de différents arguments ou commandes PowerShell. Pour plus d’informations, consultez Arguments de ligne de commande de l’émulateur.
Écrivez des requêtes efficaces, créez des stratégies d’indexation, gérez et approvisionnez des ressources dans l’API SQL et le Kit de développement logiciel (SDK) avec Microsoft Azure Cosmos DB.
Découvrez comment résoudre les problèmes liés à l’indisponibilité du service, au chiffrement des certificats et au contrôle de version lorsque vous utilisez l’émulateur Azure Cosmos DB.
Tutoriel sur la configuration des workflows de création et de mise en production dans Azure DevOps à l’aide de la tâche de génération de l’émulateur Azure Cosmos DB
Estefani Arroyo rejoint Scott Hanselman pour parler et démonstration des outils de bureau Azure Cosmos DB pour le développement, l’interrogation et le test de vos applications. L’émulateur Azure Cosmos DB pour Linux fournit une émulation haute fidélité du service Azure Cosmos DB. L’extension d’API Azure Data Studio Cosmos DB pour Mongo DB vous permet de vous connecter à vos ressources Mongo et d’interroger vos données à l’aide de l’interpréteur de commandes mongo. Chapitres 00:00 : Introduction 01 :03 - Op