Émulateur Linux - vNext (préversion)

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 :

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-size ou la QUERY_BUFFER_SIZE_KB variable d’environnement. La valeur par défaut est 4096 Ko (4 Mo) et la valeur maximale est 65536 Ko (64 Mo).

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.