Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
La nouvelle génération de l’émulateur Azure Cosmos DB est entièrement basée sur Linux et est disponible sous forme de conteneur Docker. Il prend en charge l’exécution sur une grande variété de processeurs et de systèmes d’exploitation.
Important
Cette version de l'émulateur prend uniquement en charge l'API pour NoSQL en mode passerelle, avec un sous-ensemble sélectionné de fonctionnalités. Pour plus d'informations, consultez le support des fonctionnalités.
Prerequisites
Installation
Obtenez l’image du conteneur Docker en utilisant docker pull. L'image du conteneur est publiée dans le Registre des artefacts Microsoft sous le nom mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:vnext-preview.
docker pull mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:vnext-preview
Course à pied
Pour exécuter le conteneur, utilisez docker run. Ensuite, utilisez docker ps pour valider que le conteneur est en cours d'exécution.
docker run --detach --publish 8081:8081 --publish 8080:8080 --publish 1234:1234 mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:vnext-preview
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c1bb8cf53f8a mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:vnext-preview "/bin/bash -c /home/…" 5 seconds ago Up 5 seconds 0.0.0.0:1234->1234/tcp, :::1234->1234/tcp, 0.0.0.0:8081->8081/tcp, :::8081->8081/tcp <container-name>
L’émulateur comprend deux composants :
-
Data Explorer : explorez de manière interactive les données dans l’émulateur. Par défaut, ce composant s’exécute sur le port
1234. -
Azure Cosmos DB émulateur : version locale du service de base de données Azure Cosmos DB. Par défaut, ce composant s’exécute sur le port
8081.
Le point de terminaison de passerelle de l’émulateur utilise le port 8081 à l’adresse http://localhost:8081. Pour accéder au Data Explorer, utilisez l’adresse http://localhost:1234 dans votre navigateur web. Le point de terminaison de passerelle est généralement disponible immédiatement, mais Data Explorer peut prendre quelques secondes pour démarrer.
Sonde de santé
L’émulateur expose un point de terminaison de sonde d’intégrité sur le port 8080. Utilisez ce point de terminaison pour déterminer quand l’émulateur est entièrement initialisé et prêt à accepter les demandes.
Les points de terminaison suivants sont disponibles :
- http://localhost:8080/alive — Sonde Liveness.
- http://localhost:8080/ready — Sonde de préparation.
- http://localhost:8080/status — État détaillé.
Note
Le message System is now fully ready to accept requests de journal hérité est toujours émis pour la compatibilité rétroactive, mais pourrait être supprimé dans une version ultérieure. Utilisez plutôt la sonde de santé pour les vérifications de préparation.
Mode HTTPS
Les Kits de développement logiciel (SDK) .NET et Java ne prennent pas en charge le mode HTTP dans l'émulateur. Étant donné que cette version de l’émulateur commence par HTTP par défaut, vous devez activer explicitement HTTPS lors du démarrage du conteneur (voir ci-dessous). Pour le SDK Java, vous devez également installer des certificats.
docker run --detach --publish 8081:8081 --publish 8080:8080 --publish 1234:1234 mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:vnext-preview --protocol https
Lorsque vous utilisez HTTPS avec des volumes de données persistants, l’émulateur régénère automatiquement les certificats SSL au démarrage. Vous n’avez donc pas besoin de gérer le renouvellement des certificats.
Commandes Docker
Le tableau suivant résume les commandes Docker disponibles pour configurer l'émulateur. Ce tableau détaille les arguments correspondants, les variables d'environnement, les valeurs autorisées, les paramètres par défaut et les descriptions de chaque commande.
| Prérequis | Arg | Env | Valeurs autorisées | Par défaut | Description |
|---|---|---|---|---|---|
| Imprimez les paramètres sur stdout à partir du conteneur |
--help, -h |
N/A | N/A | N/A | Affichez les informations sur la configuration disponible |
| Définissez le port du point de terminaison Cosmos | --port [INT] |
PORT | INT | 8081 | Le port du point de terminaison Cosmos sur le conteneur. Vous devez encore publier ce port (par exemple, -p 8081:8081). |
| Spécifiez le protocole utilisé par le point de terminaison Cosmos | --protocol |
PROTOCOLE |
https, http, https-insecure |
http |
Le protocole du point de terminaison Cosmos sur le conteneur. |
| Activez l'explorateur de données | --enable-explorer |
ENABLE_EXPLORER |
true, false |
true |
Activez l’exécution de Cosmos Data Explorer sur le même conteneur. |
| Définissez le port utilisé par l'explorateur de données | --explorer-port |
EXPLORER_PORT | INT | 1234 | Le port du Cosmos Data Explorer sur le conteneur. Vous devez encore publier ce port (par exemple, -p 1234:1234). |
| Spécifier le protocole utilisé par l’Explorateur de données | --explorer-protocol |
EXPLORER_PROTOCOL |
https, http, https-insecure |
<the value of --protocol> |
Le protocole du Cosmos Data Explorer sur le conteneur. La valeur par défaut est le paramètre de protocole sur le point de terminaison Cosmos. |
| Personnaliser le point de terminaison public de la passerelle | --gateway-endpoint |
GATEWAY_PUBLIC_ENDPOINT | N/A | localhost |
Point de terminaison de passerelle publique. La valeur par défaut est localhost. |
| Spécifiez la clé via le fichier | --key-file [PATH] |
KEY_FILE | CHEMIN | <default secret> |
Remplacez la clé par défaut par la clé spécifiée dans le fichier. Vous devez monter ce fichier dans le conteneur (par exemple, si KEY_FILE=/mykey, vous ajouteriez une option comme celle-ci à votre exécution de docker : --mount type=bind,source=./myKey,target=/myKey) |
| Définissez le chemin des données | --data-path [PATH] |
DATA_PATH | CHEMIN | /data |
Spécifiez un répertoire pour les données. Fréquemment utilisé avec l'option docker run --mount (par exemple, si DATA_PATH=/usr/cosmos/data, vous ajouteriez une option comme celle-ci à votre exécution de docker : --mount type=bind,source=./.local/data,target=/usr/cosmos/data) |
| Spécifiez le chemin du certificat à utiliser pour https | --cert-path [PATH] |
CERT_PATH | CHEMIN | <default cert> |
Spécifiez un chemin vers un certificat pour sécuriser le trafic. Vous devez monter ce fichier dans le conteneur (par exemple, si CERT_PATH=/mycert.pfx, vous ajouteriez une option comme celle-ci à votre exécution de docker : --mount type=bind,source=./mycert.pfx,target=/mycert.pfx) |
| Spécifiez le secret du certificat à utiliser pour https | N/A | CERT_SECRET | string | <default secret> |
Le secret du certificat spécifié sur CERT_PATH. |
| Définissez le niveau de journalisation | --log-level [LEVEL] |
LOG_LEVEL |
quiet, , error, warninfo, , debugtrace |
info |
Le niveau de verbosité des journaux émis par l’émulateur et l’Explorateur de données. |
| Activer l’exportateur OpenTelemetry OTLP | --enable-otlp |
ENABLE_OTLP_EXPORTER |
true, false |
false |
Activez l’intégration d’OpenTelemetry. |
| Activer l’exportateur de console | --enable-console |
ENABLE_CONSOLE_EXPORTER |
true, false |
false |
Activez la sortie de la console des données de télémétrie (utile pour le débogage). |
| Activer le mode détaillé | --verbose |
DÉTAILLÉ |
true, false |
false |
Activez le mode détaillé pour afficher les journaux PostgreSQL (pglog) dans la console. Utile pour le débogage. |
| Définir la taille de la mémoire tampon de requête | --query-buffer-size |
QUERY_BUFFER_SIZE_KB | INT | 4096 (4 Mo), max 65536 (64 Mo) | Taille maximale en Ko pour les mémoires tampons de résultats de requête. Augmentez cette valeur si vous rencontrez des erreurs HTTP 500 sur des requêtes volumineuses. |
| Activer l’envoi d’informations de diagnostic à Microsoft | --enable-telemetry |
ACTIVER_TÉLÉMÉTRIE |
true, false |
true |
Activez l’envoi de données d’utilisation à Microsoft pour nous aider à améliorer l’émulateur. |
Support des fonctionnalités
Cet émulateur est en développement actif et en aperçu. Par conséquent, toutes les fonctionnalités d’Azure Cosmos DB ne sont pas prises en charge. Certaines fonctionnalités ne seront pas non plus prises en charge à l’avenir. Ce tableau comprend l'état des différentes fonctionnalités et leur niveau de support.
| Fonctionnalité | Support |
|---|---|
| API Batch | ✅ Supporté |
| API en bloc | ✅ Supporté |
| Flux de modification | ✅ Supporté |
| Créez et lire un document avec des données utf | ✅ Supporté |
| Créer une collection | ✅ Supporté |
| Créez une collection deux fois en conflit | ✅ Supporté |
| Créez une collection avec une politique d'index personnalisée | ⚠️ No-op |
| Créez une collection avec une expiration TTL | ✅ Supporté |
| Créer une base de données | ✅ Supporté |
| Créez une base de données deux fois en conflit | ✅ Supporté |
| Créez un document | ✅ Supporté |
| Créez une collection partitionnée | ✅ Supporté |
| Supprimer une collection | ✅ Supporté |
| Supprimez la base de données | ✅ Supporté |
| Supprimer un document | ✅ Supporté |
| Obtenez et modifier les performances de la collection | ⚠️ Pas encore implémenté |
| Insérez un document volumineux | ✅ Supporté |
| Document de correctif | ✅ Supporté |
| Interroger une collection partitionnée en parallèle | ⚠️ Pas encore implémenté |
| Requête avec agrégats | ✅ Supporté |
| Requête avec filtre AND | ✅ Supporté |
| Requête avec filtre et projection | ✅ Supporté |
| Requête avec égalité | ✅ Supporté |
| Requête avec equals sur id | ✅ Supporté |
| Requête avec jointures | ✅ Supporté |
| Requête avec ordre par | ✅ Supporté |
| Requête avec ordre par pour une collection partitionnée | ✅ Supporté |
| Requête avec ordre par numéros | ✅ Supporté |
| Requête avec ordre par chaînes | ✅ Supporté |
| Requête avec pagination | ✅ Supporté |
| Requête avec opérateurs de plage date heures | ✅ Supporté |
| Requête avec opérateurs de plage sur les nombres | ✅ Supporté |
| Requête avec opérateurs de plage sur des chaînes | ✅ Supporté |
| Requête avec jointure unique | ✅ Supporté |
| Requête avec des opérateurs mathématiques de chaîne et de tableau | ✅ Supporté |
| Requête avec sous-documents | ✅ Supporté |
| Requête avec deux jointures | ✅ Supporté |
| Requête avec deux jointures et filtre | ✅ Supporté |
| Lire la collection | ✅ Supporté |
| Lisez le flux de la collection | ⚠️ Pas encore implémenté |
| Lisez la base de données | ✅ Supporté |
| Lisez le flux de la base de données | ⚠️ Pas encore implémenté |
| Lisez le document | ✅ Supporté |
| Lisez le flux de documents | ✅ Supporté |
| Remplacer le document | ✅ Supporté |
| Unités de requête | ⚠️ Pas encore implémenté |
| procédures stockées | ❌ Non prévu |
| Déclencheurs | ❌ Non prévu |
| Fonctions définies par l’utilisateur | ❌ Non prévu |
| Mettre à jour la collection | ⚠️ No-op |
| Mise à jour du document | ✅ Supporté |
| Offre un point de terminaison | ⚠️ No-op |
| Point de terminaison des utilisateurs | ⚠️ No-op |
| Point de terminaison d’autorisations | ⚠️ No-op |
| Clés de chiffrement client (CEK) | ⚠️ No-op |
Note
Les fonctionnalités marquées sans opération acceptent les demandes et retournent des codes d’état HTTP valides, mais n’exécutent pas l’opération sous-jacente. Votre code ne se cassera pas, mais ne comptez pas sur ces fonctionnalités pour un comportement fonctionnel. Les stratégies d’index personnalisées et les mises à jour de collection sont acceptées pour la compatibilité, mais les requêtes ne sont pas optimisées par des index personnalisés.
Limitations
En plus des fonctionnalités non encore prises en charge ou non prévues, la liste suivante inclut les limitations actuelles de l'émulateur.
- Le SDK .NET pour Azure Cosmos DB ne prend pas en charge l’exécution en masse dans l’émulateur.
- Si vous obtenez des erreurs HTTP 500 sur des résultats de requête volumineux, augmentez la taille de la mémoire tampon de requête avec l’indicateur
--query-buffer-sizeou laQUERY_BUFFER_SIZE_KBvariable d’environnement. La valeur par défaut est4096Ko (4Mo) et la valeur maximale est65536Ko (64Mo).
Installation de certificats pour le SDK Java
Lorsque vous utilisez le Kit de développement logiciel (SDK) Java pour Azure Cosmos DB avec cette version de l’émulateur en mode https, il est nécessaire d’installer ses certificats dans votre magasin d’approbation Java local.
Obtention de certificat
Dans une fenêtre bash, exécutez ce qui suit :
# If the emulator was started with /AllowNetworkAccess, replace localhost with the actual IP address of it:
EMULATOR_HOST=localhost
EMULATOR_PORT=8081
EMULATOR_CERT_PATH=/tmp/cosmos_emulator.cert
openssl s_client -connect ${EMULATOR_HOST}:${EMULATOR_PORT} </dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > $EMULATOR_CERT_PATH
Installer le certificat
Accédez au répertoire de votre installation Java où se trouve le fichier cacerts (remplacez ci-dessous par le bon répertoire) :
cd "C:/Program Files/Eclipse Adoptium/jdk-17.0.10.7-hotspot/bin"
Importez le certificat (vous pouvez être invité à indiquer un mot de passe, la valeur par défaut est « changeit ») :
keytool -cacerts -importcert -alias cosmos_emulator -file $EMULATOR_CERT_PATH
Si vous obtenez une erreur parce que l’alias existe déjà, supprimez-le, puis exécutez à nouveau la commande ci-dessus :
keytool -cacerts -delete -alias cosmos_emulator
Prise en charge d’OpenTelemetry
OpenTelemetry est un framework d’observabilité open source qui fournit une collection d’outils, d’API et de kits SDK pour l’instrumentation, la génération, la collecte et l’exportation de données de télémétrie. Le protocole OTLP (OpenTelemetry Protocol) est le protocole utilisé par OpenTelemetry pour transmettre des données de télémétrie entre les composants.
Vous pouvez utiliser OpenTelemetry avec l’émulateur pour surveiller et suivre votre application. L’émulateur prend en charge les options de télémétrie, qui peuvent être configurées via des variables d’environnement ou des indicateurs de ligne de commande lors de l’exécution du conteneur Docker.
L’émulateur exporte les métriques suivantes. Celles-ci sont disponibles via n’importe quel back-end de métriques qui prend en charge OTLP et fournit des insights précieux sur les performances et l’intégrité de la base de données :
- Taux de requête : affiche les modèles de trafic pour différents types d’opérations
- Temps d’exécution des requêtes : mesure le temps nécessaire pour exécuter différentes requêtes
- Utilisation des ressources : métriques de processeur, d’utilisation de la mémoire et de pool de connexions
- Taux d’erreur : suivi des erreurs par type et point de terminaison
Note
L’émulateur prend en charge le protocole TLS conditionnel pour l’exportateur OTLP, ce qui vous permet d’intégrer des plateformes d’observabilité qui nécessitent des connexions sécurisées.
Des instructions détaillées avec des exemples sont disponibles dans le référentiel GitHub.
Utiliser dans le flux de travail d’intégration continue
Il existe de nombreux avantages à utiliser des conteneurs Docker dans des pipelines CI/CD, en particulier pour les systèmes avec état comme les bases de données. Cela peut être en termes de rentabilité, de performances, de fiabilité et de cohérence de vos suites de tests.
L’émulateur peut être incorporé dans le cadre de pipelines CI/CD. Vous pouvez vous référer à ce référentiel GitHub qui fournit des exemples d'utilisation de l'émulateur dans le cadre d'un workflow CI GitHub Actions pour les applications .NET, Python, Java et Go sur les architectures x64 et ARM64 (illustré pour un exécuteur Linux utilisant ubuntu).
Voici un exemple de flux de travail CI GitHub Actions qui montre comment configurer l’émulateur en tant que conteneur de service GitHub Actions dans le cadre d’un travail dans le flux de travail. GitHub s’occupe du démarrage du conteneur Docker et le détruit une fois le travail terminé, sans avoir besoin d’intervention manuelle (par exemple, à l’aide de la docker run commande).
name: CI demo app
on:
push:
branches: [main]
paths:
- 'java-app/**'
pull_request:
branches: [main]
paths:
- 'java-app/**'
jobs:
build-and-test:
runs-on: ubuntu-latest
services:
cosmosdb:
image: mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:vnext-preview
ports:
- 8081:8081
env:
PROTOCOL: https
env:
COSMOSDB_CONNECTION_STRING: ${{ secrets.COSMOSDB_CONNECTION_STRING }}
COSMOSDB_DATABASE_NAME: ${{ vars.COSMOSDB_DATABASE_NAME }}
COSMOSDB_CONTAINER_NAME: ${{ vars.COSMOSDB_CONTAINER_NAME }}
steps:
- name: Set up Java
uses: actions/setup-java@v3
with:
distribution: 'microsoft'
java-version: '21.0.0'
- name: Export Cosmos DB Emulator Certificate
run: |
sudo apt update && sudo apt install -y openssl
openssl s_client -connect localhost:8081 </dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > cosmos_emulator.cert
cat cosmos_emulator.cert
$JAVA_HOME/bin/keytool -cacerts -importcert -alias cosmos_emulator -file cosmos_emulator.cert -storepass changeit -noprompt
- name: Checkout repository
uses: actions/checkout@v4
- name: Run tests
run: cd java-app && mvn test
Ce travail s’exécute sur un exécuteur Ubuntu et utilise l’image mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:vnext-preview Docker en tant que conteneur de service. Il utilise des variables d’environnement pour configurer la chaîne de connexion, le nom de la base de données et le nom du conteneur. Étant donné que, dans ce cas, le travail s’exécute directement sur l’ordinateur exécuteur GitHub Actions, l’étape Exécuter les tests du travail peut accéder à l’émulateur qui est accessible via localhost:8081 (8081 étant le port exposé par l’émulateur).
L'étape ExportEr le certificat de l'émulateur Cosmos DB est spécifique aux applications Java, car le sdk Azure Cosmos DB Java ne prend actuellement pas en charge le mode HTTP dans l'émulateur. La variable d’environnement PROTOCOL est définie sur https dans la section services et cette étape exporte le certificat de l’émulateur et l’importe dans le magasin de clés Java. La même chose s’applique également à .NET.
Signaler des problèmes
Si vous rencontrez des problèmes lors de l’utilisation de cette version de l’émulateur, ouvrez un problème dans le référentiel GitHub (https://github.com/Azure/azure-cosmos-db-emulator-docker) et étiquetez-le avec l’étiquette cosmosEmulatorVnextPreview.