Lokaal ontwikkelen met behulp van de Azure Cosmos DB-emulator
Artikel
Een veelvoorkomend gebruiksvoorbeeld voor de emulator is om te fungeren als een ontwikkelingsdatabase terwijl u uw toepassingen bouwt. Het gebruik van de emulator voor ontwikkeling kan u helpen bij het leren van kenmerken van het maken en modelleren van gegevens voor een database zoals Azure Cosmos DB zonder dat er servicekosten in rekening worden gebracht. Daarnaast kan het gebruik van de emulator als onderdeel van een automatiseringswerkstroom ervoor zorgen dat u dezelfde reeks integratietests kunt uitvoeren. U kunt ervoor zorgen dat dezelfde tests zowel lokaal worden uitgevoerd op uw ontwikkelcomputer als op afstand in een continue integratietaak.
Om aan de slag te gaan, haalt u de Linux-variant van de containerinstallatiekopieën op uit microsoft containerregister (MCR).
Haal de Installatiekopie van de mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator Linux-container uit het containerregister op naar de lokale Docker-host.
Haal de mcr.microsoft.com/cosmosdb/windows/azure-cosmos-emulator Windows-containerinstallatiekopie uit het containerregister op naar de lokale Docker-host.
Controleer of de emulatorinstallatiekopie beschikbaar is op uw lokale Docker-host.
docker images
Download en installeer de nieuwste versie van Azure Cosmos DB Emulator op uw lokale computer om aan de slag te gaan.
Tip
In het artikel met releaseopmerkingen voor de emulator worden alle beschikbare versies en de functie-updates vermeld die in elke release zijn aangebracht.
Om aan de slag te gaan, haalt u de Linux-variant van de containerinstallatiekopieën op uit microsoft containerregister (MCR).
Haal de mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator Linux-containerinstallatiekopie op met behulp van de mongodb tag uit het containerregister naar de lokale Docker-host.
Controleer of de emulatorinstallatiekopie beschikbaar is op uw lokale Docker-host.
docker images
De Docker-containerinstallatiekopieën (Windows) bieden geen ondersteuning voor de API voor MongoDB.
Download en installeer de nieuwste versie van Azure Cosmos DB Emulator op uw lokale computer om aan de slag te gaan.
Tip
In het artikel met releaseopmerkingen voor de emulator worden alle beschikbare versies en de functie-updates vermeld die in elke release zijn aangebracht.
De Docker-containervariant (Linux of Windows) van de emulator biedt geen ondersteuning voor de API voor Apache Cassandra, API voor Apache Gremlin of API voor Table.
Download en installeer de nieuwste versie van Azure Cosmos DB Emulator op uw lokale computer om aan de slag te gaan.
Tip
In het artikel met releaseopmerkingen voor de emulator worden alle beschikbare versies en de functie-updates vermeld die in elke release zijn aangebracht.
De Docker-containervariant van de emulator biedt geen ondersteuning voor de API voor Apache Cassandra.
Start het uitvoerbare bestand van de emulator (Microsoft.Azure.Cosmos.Emulator.exe) op het %ProgramFiles%\Azure Cosmos DB Emulator pad. Gebruik deze parameters om de emulator te configureren:
Beschrijving
EnableCassandraEndpoint
Hiermee schakelt u DE API voor het Apache Cassandra-eindpunt in.
CassandraPort
Poortnummer dat moet worden gebruikt voor eindpunt.
De Docker-containervariant van de emulator biedt geen ondersteuning voor de API voor Apache Gremlin.
Start het uitvoerbare bestand van de emulator (Microsoft.Azure.Cosmos.Emulator.exe) op het %ProgramFiles%\Azure Cosmos DB Emulator pad. Gebruik deze parameters om de emulator te configureren:
Beschrijving
EnableGremlinEndpoint
Hiermee schakelt u API voor Apache Gremlin-eindpunt in.
GremlinPort
Poortnummer dat moet worden gebruikt voor eindpunt.
De Docker-containervariant van de emulator biedt geen ondersteuning voor de API voor Table.
Start het uitvoerbare bestand van de emulator (Microsoft.Azure.Cosmos.Emulator.exe) op het %ProgramFiles%\Azure Cosmos DB Emulator pad. Gebruik deze parameters om de emulator te configureren:
Beschrijving
EnableTableEndpoint
Hiermee schakelt u API voor Table-eindpunt in.
TablePort
Poortnummer dat moet worden gebruikt voor eindpunt.
Navigeer naar https://localhost:8081/_explorer/index.html toegang tot data explorer.
De Docker-containerinstallatiekopieën (Windows) bieden geen ondersteuning voor de API voor MongoDB.
Start het uitvoerbare bestand van de emulator (Microsoft.Azure.Cosmos.Emulator.exe) op het %ProgramFiles%\Azure Cosmos DB Emulator pad. Gebruik deze parameters om de emulator te configureren:
Beschrijving
EnableMongoDbEndpoint
Hiermee schakelt u API voor MongoDB-eindpunt in op de opgegeven MongoDB-versie.
MongoPort
Poortnummer dat moet worden gebruikt voor eindpunt.
De emulator opent de Data Explorer automatisch met behulp van de URL https://localhost:8081/_explorer/index.html.
TLS/SSL-certificaat van de emulator importeren
Importeer het TLS/SSL-certificaat van de emulator om de emulator te gebruiken met uw favoriete ontwikkelaars-SDK zonder TLS/SSL op de client uit te schakelen.
De Docker-containervariant (Linux of Windows) van de emulator biedt geen ondersteuning voor de API voor Apache Cassandra, API voor Apache Gremlin of API voor Table.
De lokale Windows-installatie van de emulator importeert automatisch de TLS/SSL-certificaten. Er is geen verdere actie nodig.
Het certificaat voor de emulator is beschikbaar op het pad _explorer/emulator.pem in de actieve container. Gebruik curl dit om het certificaat te downloaden van de actieve container naar uw lokale computer.
Mogelijk moet u de host (of het IP-adres) en het poortnummer wijzigen als u deze waarden eerder hebt gewijzigd.
Installeer het certificaat volgens het proces dat doorgaans wordt gebruikt voor uw besturingssysteem. In Linux kopieert u bijvoorbeeld het certificaat naar het /usr/local/share/ca-certificates/ pad.
Voor Linux-systemen genereert u de certificaatbundel opnieuw met behulp van de juiste opdracht voor uw Linux-distributie.
Gebruik voor Linux-systemen op basis van Debian (bijvoorbeeld Ubuntu):
sudo update-ca-certificates
Gebruik voor Op Red Hat gebaseerde Linux-systemen (bijvoorbeeld CentOS, Fedora):
sudo update-ca-trust
Raadpleeg de documentatie die specifiek is voor uw besturingssysteem voor meer gedetailleerde instructies.
Het certificaat voor de emulator is beschikbaar in de map C:\CosmosDB.Emulator\bind-mount in de actieve container. De map bevat ook een script om het certificaat automatisch te installeren.
Gebruik docker cp dit om de hele map naar uw lokale computer te kopiëren.
De lokale Windows-installatie van de emulator importeert automatisch de TLS/SSL-certificaten. Er is geen verdere actie nodig.
Verbinding maken met de emulator vanuit de SDK
Elke SDK bevat een clientklasse die doorgaans wordt gebruikt om de SDK te verbinden met uw Azure Cosmos DB-account. Met behulp van de referenties van de emulator kunt u in plaats daarvan de SDK verbinden met het emulatorexemplaren.
Maak een nieuw item in de container met behulp van UpsertItemAsync.
var item = new
{
id = "68719518371",
name = "Kiama classic surfboard"
};
await container.UpsertItemAsync(item);
Voer de .NET-toepassing uit.
dotnet run
Waarschuwing
Als u een SSL-fout krijgt, moet u TLS/SSL mogelijk uitschakelen voor uw toepassing. Dit gebeurt meestal als u ontwikkelt op uw lokale computer, met behulp van de Azure Cosmos DB-emulator in een container en het SSL-certificaat van de container niet hebt geïmporteerd. U kunt dit oplossen door de opties van de client te configureren om TLS/SSL-validatie uit te schakelen voordat u de client maakt:
Als u een SSL-fout krijgt, moet u TLS/SSL mogelijk uitschakelen voor uw toepassing. Dit gebeurt meestal als u ontwikkelt op uw lokale computer, met behulp van de Azure Cosmos DB-emulator in een container en het SSL-certificaat van de container niet hebt geïmporteerd. U kunt dit oplossen door de toepassing zo te configureren dat TLS/SSL-validatie wordt uitgeschakeld voordat u de client maakt:
import urllib3
urllib3.disable_warnings()
Als u nog steeds SSL-fouten ondervindt, is het mogelijk dat Python de certificaten opzoekt uit een ander certificaatarchief. Volg deze stappen om het pad te bepalen waar Python naar de certificaten zoekt:
Belangrijk
Als u een virtuele Python-omgeving (venv) gebruikt, moet u ervoor zorgen dat deze wordt geactiveerd voordat u de opdrachten uitvoert.
Open een terminal
Start de Python-interpreter door Python of Python3 te typen, afhankelijk van uw Python-versie.
Voer in de Python-interpreter de volgende opdrachten uit:
from requests.utils import DEFAULT_CA_BUNDLE_PATH
print(DEFAULT_CA_BUNDLE_PATH)
In een virtuele omgeving kan het pad zich bevinden (ten minste in Ubuntu):
Buiten een virtuele omgeving kan het pad zich bevinden (ten minste in Ubuntu):
/etc/ssl/certs/ca-certificates.crt
Nadat u de DEFAULT_CA_BUNDLE_PATH hebt geïdentificeerd, opent u een nieuwe terminal en voert u de volgende opdrachten uit om het emulatorcertificaat toe te voegen aan de certificaatbundel:
Belangrijk
Als DEFAULT_CA_BUNDLE_PATH variabele verwijst naar een systeemmap, treedt er mogelijk een fout 'Machtiging geweigerd' op. In dit geval moet u de opdrachten uitvoeren met verhoogde bevoegdheden (als hoofdmap). U moet ook de certificaatbundel bijwerken en opnieuw genereren nadat u de opgegeven opdrachten hebt uitgevoerd.
# 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
Als u een SSL-fout krijgt, moet u TLS/SSL mogelijk uitschakelen voor uw toepassing. Dit gebeurt meestal als u ontwikkelt op uw lokale computer, met behulp van de Azure Cosmos DB-emulator in een container en het SSL-certificaat van de container niet hebt geïmporteerd. U kunt dit oplossen door de toepassing zo te configureren dat TLS/SSL-validatie wordt uitgeschakeld voordat u de client maakt:
Voeg een using-blok toe voor de MongoDB.Driver naamruimte.
using MongoDB.Driver;
Maak een nieuw exemplaar van het gebruik van de referenties van MongoClient de emulator.
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"})
Hiermee update_one maakt u een nieuw item in de container.
Gebruik het MongoDB-stuurprogramma Node.js om vanuit een Node.js/JavaScript-toepassing verbinding te maken met de emulator.
Begin in een lege map.
Initialiseer een nieuwe module.
npm init es6 --yes
Installeer het mongodb pakket vanuit Node Pakketbeheer.
npm install --save mongodb
Maak het app.js-bestand .
Importeer het MongoClient type uit de mongodb module.
import { MongoClient } from 'mongodb'
Gebruik MongoClient dit om een nieuw clientexemplaren te maken met behulp van de referenties van de emulator. Gebruik connect dit om verbinding te maken met de emulator.
const client = new MongoClient(
'mongodb://localhost:C2y6yDjf5%2FR%2Bob0N8A7Cgv30VRDJIWEHLM%2B4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw%2FJw%3D%3D@localhost:10255/admin?ssl=true&retrywrites=false'
)
await client.connect()
Gebruik db en collection maak een database en container.
Als u een SSL-fout krijgt, moet u TLS/SSL mogelijk uitschakelen voor uw toepassing. Dit gebeurt meestal als u ontwikkelt op uw lokale computer, met behulp van de Azure Cosmos DB-emulator in een container en het SSL-certificaat van de container niet hebt geïmporteerd. U kunt dit oplossen door de toepassing zo te configureren dat TLS/SSL-validatie wordt uitgeschakeld voordat u de client maakt:
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());
Maak een nieuw item in de tabel met behulp van ExecuteAsync. Hiermee Bind kunt u eigenschappen toewijzen aan het item.
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);
Voer de .NET-toepassing uit.
dotnet run
Gebruik het Python-stuurprogramma van Apache Cassandra om vanuit een Python-toepassing verbinding te maken met de emulator.
Begin in een lege map.
Importeer het cassandra-driver pakket uit de Python-pakketindex.
pip install cassandra-driver
Maak het bestand app.py .
Importeer PROTOCOL_TLS_CLIENT, SSLContexten CERT_NONE uit de ssl module. Importeer vervolgens Cluster uit de cassandra.cluster module. Importeer ten slotte PlainTextAuthProvider uit de cassandra.auth module.
from ssl import PROTOCOL_TLS_CLIENT, SSLContext, CERT_NONE
from cassandra.cluster import Cluster
from cassandra.auth import PlainTextAuthProvider
Maak een nieuwe TLS/SSL-contextvariabele met behulp van SSLContext. Configureer de context om het zelfondertekende certificaat van de emulator niet te verifiëren.
Maak een nieuwe keyspace en tabel met behulp van 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)"
)
Hiermee session.execute maakt u een nieuw item in de tabel.
Gebruik het stuurprogramma van de Apache Cassandra-Node.js om de emulator te gebruiken vanuit een Node.js/JavaScript-toepassing.
Begin in een lege map.
Initialiseer een nieuwe module.
npm init es6 --yes
Installeer het cassandra-driver pakket vanuit Node Pakketbeheer.
npm install --save cassandra-driver
Maak het app.js-bestand .
Importeer het type en auth de Client naamruimte uit de cassandra-driver module.
import { Client, auth } from 'cassandra-driver'
Hiermee PlainTextAuthProvider maakt u een nieuw object voor de referenties van de emulator. Gebruik Client dit om verbinding te maken met de emulator met behulp van de referenties.
const credentials = new auth.PlainTextAuthProvider(
'localhost',
'C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw=='
)
const client = new Client({
contactPoints: [
'localhost:10350'
],
authProvider: credentials,
localDataCenter: 'South Central US'
})
Hiermee execute kunt u een opdrachtserver uitvoeren om een keyspace en tabel te maken.
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)'
)
Gebruik execute opnieuw om een nieuw item met parameters te maken.
Als u een SSL-fout krijgt, moet u TLS/SSL mogelijk uitschakelen voor uw toepassing. Dit gebeurt meestal als u ontwikkelt op uw lokale computer, met behulp van de Azure Cosmos DB-emulator in een container en het SSL-certificaat van de container niet hebt geïmporteerd. U kunt dit oplossen door de client zo te configureren dat TLS/SSL-validatie wordt uitgeschakeld:
Voordat u begint, moet u voor de API voor Apache Gremlin uw resources maken in de emulator. Maak een database met de naam db1 en een container met de naam coll1. De doorvoerinstellingen zijn niet relevant voor deze handleiding en kunnen zo laag worden ingesteld als u wilt.
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()
);
Gebruik het Apache Gremlin-stuurprogramma Node.js om de emulator te gebruiken vanuit een Node.js/JavaScript-toepassing.
Begin in een lege map.
Initialiseer een nieuwe module.
npm init es6 --yes
Installeer het gremlin pakket vanuit Node Pakketbeheer.
npm install --save gremlin
Maak het app.js-bestand .
Importeer de gremlin module.
import gremlin from 'gremlin'
Hiermee PlainTextSaslAuthenticator maakt u een nieuw object voor de referenties van de emulator. Gebruik Client dit om verbinding te maken met de emulator met behulp van de referenties.
Maak een nieuw exemplaar van het gebruik van de referenties van TableServiceClient de emulator.
var serviceClient = new TableServiceClient(
connectionString: "DefaultEndpointsProtocol=http;AccountName=localhost;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==;TableEndpoint=http://localhost:8902/;"
);
Als u een SSL-fout krijgt, moet u TLS/SSL mogelijk uitschakelen voor uw toepassing. Dit gebeurt meestal als u ontwikkelt op uw lokale computer, met behulp van de Azure Cosmos DB-emulator in een container en het SSL-certificaat van de container niet hebt geïmporteerd. U kunt dit oplossen door de client zo te configureren dat TLS/SSL-validatie wordt uitgeschakeld:
De emulator gebruiken in een CI-werkstroom voor GitHub Actions
Als u een workload voor continue integratie wilt uitvoeren waarmee uw toepassing automatisch wordt gevalideerd, gebruikt u de Azure Cosmos DB-emulator met een testpakket van uw keuzeframework. De Azure Cosmos DB-emulator is vooraf geïnstalleerd in de windows-latest variant van de gehoste hardlopers van GitHub Action.
Voer een testpakket uit met behulp van het ingebouwde teststuurprogramma voor .NET en een testframework zoals MSTest, NUnit of XUnit.
Controleer of het eenheidstestpakket voor uw toepassing werkt zoals verwacht.
dotnet test
Maak een nieuwe werkstroom in uw GitHub-opslagplaats in een bestand met de naam .github/workflows/ci.yml.
Voeg een taak toe aan uw werkstroom om de Azure Cosmos DB-emulator te starten met behulp van PowerShell en uw eenheidstestpakket uit te voeren.
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
Notitie
Start de emulator vanaf de opdrachtregel met behulp van verschillende argumenten of PowerShell-opdrachten. Zie opdrachtregelargumenten van de emulator voor meer informatie.
Test uw Python-toepassings- en databasebewerkingen met behulp van pytest.
Controleer of het eenheidstestpakket voor uw toepassing werkt zoals verwacht.
pip install -U pytest
pytest
Maak een nieuwe werkstroom in uw GitHub-opslagplaats in een bestand met de naam .github/workflows/ci.yml.
Voeg een taak toe aan uw werkstroom om de Azure Cosmos DB-emulator te starten met behulp van PowerShell en uw eenheidstestpakket uit te voeren.
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
Notitie
Start de emulator vanaf de opdrachtregel met behulp van verschillende argumenten of PowerShell-opdrachten. Zie opdrachtregelargumenten van de emulator voor meer informatie.
Gebruik mocha dit om uw Node.js-toepassing en de bijbehorende databasewijzigingen te testen.
Controleer of het eenheidstestpakket voor uw toepassing werkt zoals verwacht.
npm install --global mocha
mocha
Maak een nieuwe werkstroom in uw GitHub-opslagplaats in een bestand met de naam .github/workflows/ci.yml.
Voeg een taak toe aan uw werkstroom om de Azure Cosmos DB-emulator te starten met behulp van PowerShell en uw eenheidstestpakket uit te voeren.
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
Notitie
Start de emulator vanaf de opdrachtregel met behulp van verschillende argumenten of PowerShell-opdrachten. Zie opdrachtregelargumenten van de emulator voor meer informatie.