Vývoj místně pomocí emulátoru služby Azure Cosmos DB
Článek
Běžným případem použití emulátoru je sloužit jako vývojová databáze při vytváření aplikací. Použití emulátoru pro vývoj vám může pomoct naučit se charakteristiky vytváření a modelování dat pro databázi, jako je Azure Cosmos DB, aniž by vám vznikly jakékoli náklady na služby. Kromě toho můžete pomocí emulátoru v rámci pracovního postupu automatizace zajistit, abyste mohli spustit stejnou sadu integračních testů. Můžete zajistit, aby se stejné testy spouštěly místně na vývojovém počítači i vzdáleně v úloze kontinuální integrace.
Stáhněte image kontejneru mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator Linuxu pomocí mongodb značky z registru kontejneru do místního hostitele Dockeru.
Varianta kontejneru Dockeru (Linux nebo Windows) emulátoru nepodporuje rozhraní API pro Apache Cassandra, rozhraní API pro Apache Gremlin nebo api for Table.
Začněte tím, že si stáhnete a nainstalujete nejnovější verzi emulátoru služby Azure Cosmos DB na místní počítač.
Tip
Článek poznámky k verzi emulátoru obsahuje všechny dostupné verze a aktualizace funkcí, které byly provedeny v jednotlivých verzích.
Varianta kontejneru Dockeru emulátoru nepodporuje rozhraní API pro Apache Cassandra.
Spusťte spustitelný soubor emulátoru (Microsoft.Azure.Cosmos.Emulator.exe) na cestě %ProgramFiles%\Azure Cosmos DB Emulator . Ke konfiguraci emulátoru použijte tyto parametry:
Popis
EnableCassandraEndpoint
Povolí rozhraní API pro koncový bod Apache Cassandra.
Varianta kontejneru Dockeru emulátoru nepodporuje rozhraní API pro Apache Gremlin.
Spusťte spustitelný soubor emulátoru (Microsoft.Azure.Cosmos.Emulator.exe) na cestě %ProgramFiles%\Azure Cosmos DB Emulator . Ke konfiguraci emulátoru použijte tyto parametry:
Popis
EnableGremlinEndpoint
Povolí rozhraní API pro koncový bod Apache Gremlin.
Varianta kontejneru Dockeru emulátoru nepodporuje rozhraní API pro tabulku.
Spusťte spustitelný soubor emulátoru (Microsoft.Azure.Cosmos.Emulator.exe) na cestě %ProgramFiles%\Azure Cosmos DB Emulator . Ke konfiguraci emulátoru použijte tyto parametry:
Přejděte do https://localhost:8081/_explorer/index.html Průzkumníka dat.
Image kontejneru Dockeru (Windows) nepodporuje rozhraní API pro MongoDB.
Spusťte spustitelný soubor emulátoru (Microsoft.Azure.Cosmos.Emulator.exe) na cestě %ProgramFiles%\Azure Cosmos DB Emulator . Ke konfiguraci emulátoru použijte tyto parametry:
Popis
EnableMongoDbEndpoint
Povolí rozhraní API pro koncový bod MongoDB v zadané verzi MongoDB.
Varianta kontejneru Dockeru (Linux nebo Windows) emulátoru nepodporuje rozhraní API pro Apache Cassandra, rozhraní API pro Apache Gremlin nebo api for Table.
Místní instalace emulátoru systému Windows automaticky importuje certifikáty TLS/SSL. Není nutná žádná další akce.
Certifikát pro emulátor je k dispozici v cestě _explorer/emulator.pem spuštěného kontejneru. Slouží curl ke stažení certifikátu ze spuštěného kontejneru do místního počítače.
Pokud jste tyto hodnoty dříve upravili, možná budete muset změnit hostitele (nebo IP adresu) a číslo portu.
Nainstalujte certifikát podle procesu, který se obvykle používá pro váš operační systém. V Linuxu byste například zkopírovali certifikát do /usr/local/share/ca-certificates/ cesty.
V případě linuxových systémů znovu vygenerujte sadu certifikátů pomocí příslušného příkazu pro distribuci Linuxu.
Pro linuxové systémy založené na Debianu (například Ubuntu) použijte:
sudo update-ca-certificates
V systémech Linux založených na Red Hatu (například CentOS, Fedora) použijte:
sudo update-ca-trust
Podrobnější pokyny najdete v dokumentaci specifické pro váš operační systém.
Certifikát pro emulátor je k dispozici ve složce C:\CosmosDB.Emulator\bind-mount spuštěného kontejneru. Složka obsahuje také skript pro automatickou instalaci certifikátu.
Slouží docker cp ke zkopírování celé složky do místního počítače.
Místní instalace emulátoru systému Windows automaticky importuje certifikáty TLS/SSL. Není nutná žádná další akce.
Připojení k emulátoru ze sady SDK
Každá sada SDK obsahuje klientskou třídu, která se obvykle používá k připojení sady SDK k vašemu účtu služby Azure Cosmos DB. Pomocí přihlašovacích údajů emulátoru můžete místo toho připojit sadu SDK k instanci emulátoru.
var item = new
{
id = "68719518371",
name = "Kiama classic surfboard"
};
await container.UpsertItemAsync(item);
Spusťte aplikaci .NET.
dotnet run
Upozorňující
Pokud se zobrazí chyba SSL, možná budete muset pro svou aplikaci zakázat protokol TLS/SSL. K tomu obvykle dochází v případě, že vyvíjíte na místním počítači, používáte emulátor služby Azure Cosmos DB v kontejneru a nenaimportovali certifikát SSL kontejneru. Pokud chcete tento problém vyřešit, nakonfigurujte možnosti klienta tak, aby před vytvořením klienta zakázaly ověřování TLS/SSL:
Pokud se zobrazí chyba SSL, možná budete muset pro svou aplikaci zakázat protokol TLS/SSL. K tomu obvykle dochází v případě, že vyvíjíte na místním počítači, používáte emulátor služby Azure Cosmos DB v kontejneru a nenaimportovali certifikát SSL kontejneru. Pokud chcete tento problém vyřešit, nakonfigurujte aplikaci tak, aby před vytvořením klienta zakázala ověřování TLS/SSL:
import urllib3
urllib3.disable_warnings()
Pokud stále dochází k chybám SSL, je možné, že Python načítá certifikáty z jiného úložiště certifikátů. Pokud chcete určit cestu, ve které Python hledá certifikáty, postupujte takto:
Důležité
Pokud používáte virtuální prostředí Pythonu (venv), před spuštěním příkazů se ujistěte, že je aktivovaný.
Otevření terminálu
V závislosti na verzi Pythonu spusťte interpret Pythonu zadáním pythonu nebo Python3.
V interpretu Pythonu spusťte následující příkazy:
from requests.utils import DEFAULT_CA_BUNDLE_PATH
print(DEFAULT_CA_BUNDLE_PATH)
Ve virtuálním prostředí může být cesta (alespoň v Ubuntu):
Mimo virtuální prostředí může být cesta (alespoň v Ubuntu):
/etc/ssl/certs/ca-certificates.crt
Jakmile identifikujete DEFAULT_CA_BUNDLE_PATH, otevřete nový terminál a spuštěním následujících příkazů připojte certifikát emulátoru k sadě certifikátů:
Důležité
Pokud DEFAULT_CA_BUNDLE_PATH proměnná odkazuje na systémový adresář, může dojít k chybě "Oprávnění odepřeno" . V takovém případě budete muset spustit příkazy se zvýšenými oprávněními (jako kořen). Po spuštění zadaných příkazů budete také muset sadu certifikátů aktualizovat a znovu vygenerovat.
# 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
Pokud se zobrazí chyba SSL, možná budete muset pro svou aplikaci zakázat protokol TLS/SSL. K tomu obvykle dochází v případě, že vyvíjíte na místním počítači, používáte emulátor služby Azure Cosmos DB v kontejneru a nenaimportovali certifikát SSL kontejneru. Pokud chcete tento problém vyřešit, nakonfigurujte aplikaci tak, aby před vytvořením klienta zakázala ověřování TLS/SSL:
Vytvořte novou instanci pomocí přihlašovacích MongoClient údajů emulátoru.
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"})
Slouží update_one k vytvoření nové položky v kontejneru.
Pokud se zobrazí chyba SSL, možná budete muset pro svou aplikaci zakázat protokol TLS/SSL. K tomu obvykle dochází v případě, že vyvíjíte na místním počítači, používáte emulátor služby Azure Cosmos DB v kontejneru a nenaimportovali certifikát SSL kontejneru. Pokud chcete tento problém vyřešit, nakonfigurujte aplikaci tak, aby před vytvořením klienta zakázala ověřování TLS/SSL:
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());
Vytvoření nové položky v tabulce pomocí ExecuteAsync. Slouží Bind k přiřazení vlastností k položce.
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);
Spusťte aplikaci .NET.
dotnet run
Pomocí ovladače Apache Cassandra Python se připojte k emulátoru z aplikace v Pythonu.
Import PROTOCOL_TLS_CLIENT, SSLContexta CERT_NONE z ssl modulu. Potom importujte Cluster z cassandra.cluster modulu. Nakonec importujte PlainTextAuthProvider z cassandra.auth modulu.
from ssl import PROTOCOL_TLS_CLIENT, SSLContext, CERT_NONE
from cassandra.cluster import Cluster
from cassandra.auth import PlainTextAuthProvider
Vytvořte novou kontextovou proměnnou PROTOKOLU TLS/SSL pomocí SSLContext. Nakonfigurujte kontext tak, aby neověřil certifikát podepsaný svým držitelem emulátoru.
Vytvořte nový prostor klíčů a tabulku pomocí 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)"
)
Slouží session.execute k vytvoření nové položky v tabulce.
Importujte Client typ a auth obor názvů z cassandra-driver modulu.
import { Client, auth } from 'cassandra-driver'
Slouží PlainTextAuthProvider k vytvoření nového objektu pro přihlašovací údaje emulátoru. Slouží Client k připojení k emulátoru pomocí přihlašovacích údajů.
const credentials = new auth.PlainTextAuthProvider(
'localhost',
'C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw=='
)
const client = new Client({
contactPoints: [
'localhost:10350'
],
authProvider: credentials,
localDataCenter: 'South Central US'
})
Slouží execute ke spuštění příkazového serveru pro vytvoření prostoru klíčů a tabulky.
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)'
)
Znovu použijte execute k vytvoření nové položky s parametry.
Pokud se zobrazí chyba SSL, možná budete muset pro svou aplikaci zakázat protokol TLS/SSL. K tomu obvykle dochází v případě, že vyvíjíte na místním počítači, používáte emulátor služby Azure Cosmos DB v kontejneru a nenaimportovali certifikát SSL kontejneru. Pokud chcete tento problém vyřešit, nakonfigurujte klienta tak, aby zakázal ověřování TLS/SSL:
Než začnete, rozhraní API pro Apache Gremlin vyžaduje vytvoření prostředků v emulátoru. Vytvořte databázi s názvem db1 a kontejner s názvem coll1. Nastavení propustnosti jsou pro tuto příručku irelevantní a můžete je nastavit tak nízké, jak chcete.
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()
);
Pomocí ovladače Node.js Apache Gremlin použijte emulátor z aplikace Node.js/JavaScript.
Začněte v prázdné složce.
Inicializace nového modulu
npm init es6 --yes
gremlin Nainstalujte balíček z Node Správce balíčků.
npm install --save gremlin
Vytvořte soubor app.js.
Importujte gremlin modul.
import gremlin from 'gremlin'
Slouží PlainTextSaslAuthenticator k vytvoření nového objektu pro přihlašovací údaje emulátoru. Slouží Client k připojení k emulátoru pomocí přihlašovacích údajů.
Vytvořte novou instanci pomocí přihlašovacích TableServiceClient údajů emulátoru.
var serviceClient = new TableServiceClient(
connectionString: "DefaultEndpointsProtocol=http;AccountName=localhost;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==;TableEndpoint=http://localhost:8902/;"
);
Pokud se zobrazí chyba SSL, možná budete muset pro svou aplikaci zakázat protokol TLS/SSL. K tomu obvykle dochází v případě, že vyvíjíte na místním počítači, používáte emulátor služby Azure Cosmos DB v kontejneru a nenaimportovali certifikát SSL kontejneru. Pokud chcete tento problém vyřešit, nakonfigurujte klienta tak, aby zakázal ověřování TLS/SSL:
Použití emulátoru v pracovním postupu CI GitHub Actions
Pokud chcete spustit úlohu kontinuální integrace, která automaticky ověří vaši aplikaci, použijte emulátor služby Azure Cosmos DB s testovací sadou z libovolné architektury. Emulátor služby Azure Cosmos DB je předinstalovaný ve windows-latest variantě hostovaných spouštěčů GitHub Action.
Spusťte sadu testů pomocí integrovaného testovacího ovladače pro .NET a testovací architektury, jako je MSTest, NUnit nebo XUnit.
Ověřte, že sada testů jednotek pro vaši aplikaci funguje podle očekávání.
dotnet test
Vytvořte nový pracovní postup v úložišti GitHub v souboru s názvem .github/workflows/ci.yml.
Přidejte do pracovního postupu úlohu pro spuštění emulátoru služby Azure Cosmos DB pomocí PowerShellu a spuštění sady testů jednotek.
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
Poznámka:
Spusťte emulátor z příkazového řádku pomocí různých argumentů nebo příkazů PowerShellu. Další informace najdete v tématu Argumenty příkazového řádku emulátoru.
Otestujte aplikace a databázové operace Pythonu pomocí pytest.
Ověřte, že sada testů jednotek pro vaši aplikaci funguje podle očekávání.
pip install -U pytest
pytest
Vytvořte nový pracovní postup v úložišti GitHub v souboru s názvem .github/workflows/ci.yml.
Přidejte do pracovního postupu úlohu pro spuštění emulátoru služby Azure Cosmos DB pomocí PowerShellu a spuštění sady testů jednotek.
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
Poznámka:
Spusťte emulátor z příkazového řádku pomocí různých argumentů nebo příkazů PowerShellu. Další informace najdete v tématu Argumenty příkazového řádku emulátoru.
Slouží mocha k otestování aplikace Node.js a jejích úprav databáze.
Ověřte, že sada testů jednotek pro vaši aplikaci funguje podle očekávání.
npm install --global mocha
mocha
Vytvořte nový pracovní postup v úložišti GitHub v souboru s názvem .github/workflows/ci.yml.
Přidejte do pracovního postupu úlohu pro spuštění emulátoru služby Azure Cosmos DB pomocí PowerShellu a spuštění sady testů jednotek.
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
Poznámka:
Spusťte emulátor z příkazového řádku pomocí různých argumentů nebo příkazů PowerShellu. Další informace najdete v tématu Argumenty příkazového řádku emulátoru.