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.
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.
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 :
sudo update-ca-certificates
Pour les systèmes Linux basés sur Red Hat (par exemple CentOS, Fedora), utilisez :
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.
.\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.
var item = new
{
id = "68719518371",
name = "Kiama classic surfboard"
};
await container.UpsertItemAsync(item);
Exécutez l’application .NET.
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 :
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 :
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) :
/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.
# Add a new line to the certificate bundle
echo >> /path/to/ca_bundle
# 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.
using MongoDB.Driver;
Créez un instance d’utilisation des MongoClient informations d’identification de l’émulateur.
var client = new MongoClient(
"mongodb://localhost:C2y6yDjf5%2FR%2Bob0N8A7Cgv30VRDJIWEHLM%2B4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw%2FJw%3D%3D@localhost:10255/admin?ssl=true&retrywrites=false"
);
db = client["cosmicworks"]
if "cosmicworks" not in client.list_database_names():
db.command(
{
"customAction": "CreateDatabase",
"offerThroughput": 400,
}
)
collection = db["products"]
if "products" not in db.list_collection_names():
db.command({"customAction": "CreateCollection", "collection": "products"})
Utilisez update_one pour créer un élément dans le conteneur.
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.
npm init es6 --yes
Installez le package mongodb à partir du Gestionnaire de package Node.
npm install --save mongodb
Créez le fichier app.js.
Importez le MongoClient type à partir du mongodb module.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
var server = new GremlinServer(
hostname: "localhost",
port: 8901,
username: "/dbs/db1/colls/coll1",
password: "C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw=="
);
using var client = new GremlinClient(
gremlinServer: server,
messageSerializer: new Gremlin.Net.Structure.IO.GraphSON.GraphSON2MessageSerializer()
);
Installez le package gremlin à partir du Gestionnaire de package Node.
npm install --save gremlin
Créez le fichier app.js.
Importez le module gremlin.
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.
using Azure.Data.Tables;
Créez un instance d’utilisation des TableServiceClient informations d’identification de l’émulateur.
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.
Exécutez une suite de tests à l’aide du pilote de test intégré pour .NET et d’une infrastructure de test telle que MSTest, NUnit ou XUnit.
Vérifiez que la suite de tests unitaires pour votre application fonctionne comme prévu.
dotnet test
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.
name: Continuous Integration
on:
push:
branches:
- main
jobs:
unit_tests:
name: Run .NET unit tests
runs-on: windows-latest
steps:
- name: Checkout (GitHub)
uses: actions/checkout@v3
- name: Start Azure Cosmos DB emulator
run: |
Write-Host "Launching Cosmos DB Emulator"
Import-Module "$env:ProgramFiles\Azure Cosmos DB Emulator\PSModules\Microsoft.Azure.CosmosDB.Emulator"
Start-CosmosDbEmulator
- name: Run .NET tests
run: dotnet test
Remarque
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.
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.
name: Continuous Integration
on:
push:
branches:
- main
jobs:
unit_tests:
name: Run Python unit tests
runs-on: windows-latest
steps:
- name: Checkout (GitHub)
uses: actions/checkout@v3
- name: Start Azure Cosmos DB emulator
run: |
Write-Host "Launching Cosmos DB Emulator"
Import-Module "$env:ProgramFiles\Azure Cosmos DB Emulator\PSModules\Microsoft.Azure.CosmosDB.Emulator"
Start-CosmosDbEmulator
- name: Install test runner
run: pip install pytest
- name: Run Python tests
run: pytest
Remarque
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.
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.
name: Continuous Integration
on:
push:
branches:
- main
jobs:
unit_tests:
name: Run Node.js unit tests
runs-on: windows-latest
steps:
- name: Checkout (GitHub)
uses: actions/checkout@v3
- name: Start Azure Cosmos DB emulator
run: |
Write-Host "Launching Cosmos DB Emulator"
Import-Module "$env:ProgramFiles\Azure Cosmos DB Emulator\PSModules\Microsoft.Azure.CosmosDB.Emulator"
Start-CosmosDbEmulator
- name: Install test runner
run: npm install --global mocha
- name: Run Node.js tests
run: mocha
Remarque
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.