Helyi fejlesztés az Azure Cosmos DB emulátor használatával
Cikk
Az emulátor gyakori használati esete, hogy fejlesztési adatbázisként szolgál az alkalmazások létrehozása során. Az emulátor fejlesztési célokra való használatával megismerheti az olyan adatbázisok adatainak létrehozásának és modellezésének jellemzőit, mint az Azure Cosmos DB, anélkül, hogy szolgáltatási költségekkel járna. Emellett az emulátor automatizálási munkafolyamat részeként való használata biztosítja, hogy ugyanazt az integrációs tesztcsomagot futtathatja. Gondoskodhat arról, hogy ugyanazok a tesztek helyileg és távolról is fussanak egy folyamatos integrációs feladatban.
Kérje le a mcr.microsoft.com/cosmosdb/windows/azure-cosmos-emulator Windows tárolólemezképét a tárolóregisztrációs adatbázisból a helyi Docker-gazdagépre.
Kérje le a mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator Linux-tárolórendszerképet a mongodb tárolóregisztrációs adatbázis címkéjének használatával a helyi Docker-gazdagépre.
Az emulátor Docker-tárolóvariánsa nem támogatja az Apache Cassandra API-t.
Indítsa el az emulátor végrehajtható (Microsoft.Azure.Cosmos.Emulator.exe) elemét az %ProgramFiles%\Azure Cosmos DB Emulator elérési úton. Az emulátor konfigurálásához használja az alábbi paramétereket:
Leírás
EnableCassandraEndpoint
Engedélyezi az API-t az Apache Cassandra-végponthoz.
Az emulátor Docker-tárolóvariánsa nem támogatja az Apache Gremlin API-t.
Indítsa el az emulátor végrehajtható (Microsoft.Azure.Cosmos.Emulator.exe) elemét az %ProgramFiles%\Azure Cosmos DB Emulator elérési úton. Az emulátor konfigurálásához használja az alábbi paramétereket:
Leírás
EnableGremlinEndpoint
Engedélyezi az API-t az Apache Gremlin-végponthoz.
Az emulátor Docker-tárolóvariánsa nem támogatja a Table API-t.
Indítsa el az emulátor végrehajtható (Microsoft.Azure.Cosmos.Emulator.exe) elemét az %ProgramFiles%\Azure Cosmos DB Emulator elérési úton. Az emulátor konfigurálásához használja az alábbi paramétereket:
Lépjen az https://localhost:8081/_explorer/index.html adatkezelő eléréséhez.
Indítsa el az emulátort a Windows Start menüben található alkalmazás kiválasztásával.
Másik lehetőségként elindíthatja az emulátor végrehajtható (Microsoft.Azure.Cosmos.Emulator.exe) elemét az %ProgramFiles%\Azure Cosmos DB Emulator elérési úton.
Az emulátort a parancssorból is elindíthatja. Az emulátor konfigurálásához használja az alábbi paramétereket:
Leírás
Port
A NoSQL-végpontHOZ tartozó API-hoz használandó portszám.
Lépjen az https://localhost:8081/_explorer/index.html adatkezelő eléréséhez.
A Docker (Windows) tárolórendszerképe nem támogatja a MongoDB API-t.
Indítsa el az emulátor végrehajtható (Microsoft.Azure.Cosmos.Emulator.exe) elemét az %ProgramFiles%\Azure Cosmos DB Emulator elérési úton. Az emulátor konfigurálásához használja az alábbi paramétereket:
Leírás
EnableMongoDbEndpoint
Engedélyezi az API-t a MongoDB-végponthoz a megadott MongoDB-verzióban.
Az emulátor által támogatott parancssori argumentumokról és MongoDB-verziókról további információt a parancssori paraméterekben talál.
Az emulátor automatikusan megnyitja az adatkezelőt az URL-cím https://localhost:8081/_explorer/index.htmlhasználatával.
Az emulátor TLS/SSL-tanúsítványának importálása
Importálja az emulátor TLS/SSL-tanúsítványát, hogy az emulátort az előnyben részesített fejlesztői SDK-val használja anélkül, hogy letiltotta volna a TLS/SSL protokollt az ügyfélen.
Az emulátor tanúsítványa a futó tároló elérési útján _explorer/emulator.pem érhető el. A tanúsítvány a futó tárolóból a helyi gépre való letöltéséhez használható curl .
Előfordulhat, hogy módosítania kell a gazdagépet (vagy IP-címet) és a portszámot, ha korábban módosította ezeket az értékeket.
Telepítse a tanúsítványt az operációs rendszerhez általában használt folyamatnak megfelelően. Linuxon például a tanúsítványt az /usr/local/share/ca-certificates/ elérési útra másolná.
Linux rendszerek esetén a linuxos disztribúcióhoz megfelelő paranccsal hozza létre újra a tanúsítványcsomagot.
Debian-alapú Linux-rendszerekhez (például Ubuntu) használja a következőt:
sudo update-ca-certificates
Red Hat-alapú Linux rendszerekhez (például CentOS, Fedora) használja a következőket:
sudo update-ca-trust
Részletesebb útmutatásért tekintse meg az operációs rendszerre vonatkozó dokumentációt.
Az emulátor tanúsítványa a futó tároló mappájában C:\CosmosDB.Emulator\bind-mount érhető el. A mappa egy szkriptet is tartalmaz a tanúsítvány automatikus telepítéséhez.
Az emulátor Helyi Windows-telepítése automatikusan importálja a TLS/SSL-tanúsítványokat. Nincs szükség további műveletre.
Csatlakozás az emulátorhoz az SDK-ból
Minden SDK tartalmaz egy ügyfélosztályt, amely általában az SDK-t az Azure Cosmos DB-fiókhoz csatlakoztatja. Az emulátor hitelesítő adataival az SDK-t csatlakoztathatja az emulátorpéldányhoz.
Hozzon létre egy új elemet a tárolóban a következő használatával UpsertItemAsync: .
var item = new
{
id = "68719518371",
name = "Kiama classic surfboard"
};
await container.UpsertItemAsync(item);
Futtassa a .NET-alkalmazást.
dotnet run
Figyelmeztetés
Ssl-hiba esetén előfordulhat, hogy le kell tiltania a TLS/SSL protokollt az alkalmazáshoz. Ez általában akkor fordul elő, ha a helyi gépen fejleszt, az Azure Cosmos DB emulátort használja egy tárolóban, és nem importálta a tároló SSL-tanúsítványát. A probléma megoldásához konfigurálja az ügyfél beállításait a TLS/SSL-érvényesítés letiltására az ügyfél létrehozása előtt:
Ssl-hiba esetén előfordulhat, hogy le kell tiltania a TLS/SSL protokollt az alkalmazáshoz. Ez általában akkor fordul elő, ha a helyi gépen fejleszt, az Azure Cosmos DB emulátort használja egy tárolóban, és nem importálta a tároló SSL-tanúsítványát. A probléma megoldásához konfigurálja az alkalmazást úgy, hogy az ügyfél létrehozása előtt tiltsa le a TLS/SSL-érvényesítést:
import urllib3
urllib3.disable_warnings()
Ha továbbra is SSL-hibákat tapasztal, lehetséges, hogy a Python egy másik tanúsítványtárolóból kéri le a tanúsítványokat. Annak megállapításához, hogy a Python hol keresi a tanúsítványokat, kövesse az alábbi lépéseket:
Fontos
Ha Python virtuális környezetet (venv) használ, győződjön meg arról, hogy a parancsok futtatása előtt aktiválva van!
Terminál megnyitása
Indítsa el a Python-értelmezőt a Python-verziótól függően a Python vagy a Python3 beírásával.
A Python-értelmezőben futtassa a következő parancsokat:
from requests.utils import DEFAULT_CA_BUNDLE_PATH
print(DEFAULT_CA_BUNDLE_PATH)
Egy virtuális környezetben az elérési út lehet (legalábbis Ubuntuban):
A virtuális környezeten kívül az elérési út lehet (legalább Ubuntuban):
/etc/ssl/certs/ca-certificates.crt
Miután azonosította a DEFAULT_CA_BUNDLE_PATH, nyisson meg egy új terminált, és futtassa a következő parancsokat az emulátor tanúsítványának a tanúsítványcsomaghoz való hozzáfűzéséhez:
Fontos
Ha DEFAULT_CA_BUNDLE_PATH változó egy rendszerkönyvtárra mutat, "Engedély megtagadva" hibaüzenet jelenhet meg. Ebben az esetben emelt szintű jogosultságokkal (gyökérként) kell futtatnia a parancsokat. Emellett frissítenie és újra kell létrehoznia a tanúsítványcsomagot a megadott parancsok végrehajtása után.
# 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
Ssl-hiba esetén előfordulhat, hogy le kell tiltania a TLS/SSL protokollt az alkalmazáshoz. Ez általában akkor fordul elő, ha a helyi gépen fejleszt, az Azure Cosmos DB emulátort használja egy tárolóban, és nem importálta a tároló SSL-tanúsítványát. A probléma megoldásához konfigurálja az alkalmazást úgy, hogy az ügyfél létrehozása előtt tiltsa le a TLS/SSL-érvényesítést:
Adjon hozzá egy használatblokkot a MongoDB.Driver névtérhez.
using MongoDB.Driver;
Hozzon létre egy új példányt MongoClient az emulátor hitelesítő adatainak használatával.
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"})
Ssl-hiba esetén előfordulhat, hogy le kell tiltania a TLS/SSL protokollt az alkalmazáshoz. Ez általában akkor fordul elő, ha a helyi gépen fejleszt, az Azure Cosmos DB emulátort használja egy tárolóban, és nem importálta a tároló SSL-tanúsítványát. A probléma megoldásához konfigurálja az alkalmazást úgy, hogy az ügyfél létrehozása előtt tiltsa le a TLS/SSL-érvényesítést:
Adjon hozzá egy használatblokkot a Cassandra névtérhez.
using Cassandra;
Hozzon létre egy új példányt Cluster az emulátor hitelesítő adatainak használatával. Hozzon létre egy új munkamenetet a következő használatával Connect: .
var options = new SSLOptions(
sslProtocol: System.Security.Authentication.SslProtocols.Tls12,
checkCertificateRevocation: true,
remoteCertValidationCallback: (_, _, _, policyErrors) => policyErrors == System.Net.Security.SslPolicyErrors.None);
using var cluster = Cluster.Builder()
.WithCredentials(
username: "localhost",
password: "C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw=="
)
.WithPort(
port: 10350
)
.AddContactPoint(
address: "localhost"
)
.WithSSL(
sslOptions: options
)
.Build();
using var session = cluster.Connect();
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());
Hozzon létre egy új elemet a táblában a következővel ExecuteAsync: . Tulajdonságok Bind hozzárendelése az elemhez.
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);
Importálja PROTOCOL_TLS_CLIENTés SSLContextCERT_NONE importálja a ssl modulból. Ezután importálja Cluster a cassandra.cluster modulból. Végül importálja PlainTextAuthProvider a cassandra.auth modulból.
from ssl import PROTOCOL_TLS_CLIENT, SSLContext, CERT_NONE
from cassandra.cluster import Cluster
from cassandra.auth import PlainTextAuthProvider
Hozzon létre egy új TLS/SSL környezeti változót a .SSLContext Konfigurálja úgy a környezetet, hogy ne ellenőrizze az emulátor önaláírt tanúsítványát.
Hozzon létre egy új kulcsteret és táblát a .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)"
)
Importálja a típust és auth a Client névteret a cassandra-driver modulból.
import { Client, auth } from 'cassandra-driver'
Új PlainTextAuthProvider objektum létrehozása az emulátor hitelesítő adataihoz. Az Client emulátorhoz való csatlakozáshoz használja a hitelesítő adatokat.
const credentials = new auth.PlainTextAuthProvider(
'localhost',
'C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw=='
)
const client = new Client({
contactPoints: [
'localhost:10350'
],
authProvider: credentials,
localDataCenter: 'South Central US'
})
Parancskiszolgálói execute oldal futtatásával kulcsteret és táblát hozhat létre.
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)'
)
Ssl-hiba esetén előfordulhat, hogy le kell tiltania a TLS/SSL protokollt az alkalmazáshoz. Ez általában akkor fordul elő, ha a helyi gépen fejleszt, az Azure Cosmos DB emulátort használja egy tárolóban, és nem importálta a tároló SSL-tanúsítványát. A probléma megoldásához konfigurálja az ügyfelet a TLS/SSL-ellenőrzés letiltására:
A kezdés előtt az Apache Gremlin API-hoz létre kell hoznia az erőforrásokat az emulátorban. Hozzon létre egy elnevezett db1 adatbázist és egy tárolót.coll1 Az átviteli sebesség beállításai nem relevánsak ebben az útmutatóban, és tetszés szerint beállíthatók.
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()
);
Új PlainTextSaslAuthenticator objektum létrehozása az emulátor hitelesítő adataihoz. Az Client emulátorhoz való csatlakozáshoz használja a hitelesítő adatokat.
Hozzon létre egy új példányt TableServiceClient az emulátor hitelesítő adatainak használatával.
var serviceClient = new TableServiceClient(
connectionString: "DefaultEndpointsProtocol=http;AccountName=localhost;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==;TableEndpoint=http://localhost:8902/;"
);
A tábla nevével rendelkező új példány TableClient létrehozásához használhatóGetTableClient. Ezután győződjön meg arról, hogy a tábla létezik a következő használatával CreateIfNotExistsAsync: .
var client = serviceClient.GetTableClient(
tableName: "cosmicworksproducts"
);
await client.CreateIfNotExistsAsync();
Hozzon létre egy új record típust az elemekhez.
public record Product : Azure.Data.Tables.ITableEntity
{
public required string RowKey { get; set; }
public required string PartitionKey { get; set; }
public required string Name { get; init; }
public Azure.ETag ETag { get; set; }
public DateTimeOffset? Timestamp { get; set; }
}
Hozzon létre egy új elemet a táblában a használatával UpsertEntityAsync és a Replace móddal.
var item = new Product
{
RowKey = "68719518371",
PartitionKey = "Surfboards",
Name = "Kiama classic surfboard",
Timestamp = DateTimeOffset.Now
};
await client.UpsertEntityAsync(
entity: item,
mode: TableUpdateMode.Replace
);
Ssl-hiba esetén előfordulhat, hogy le kell tiltania a TLS/SSL protokollt az alkalmazáshoz. Ez általában akkor fordul elő, ha a helyi gépen fejleszt, az Azure Cosmos DB emulátort használja egy tárolóban, és nem importálta a tároló SSL-tanúsítványát. A probléma megoldásához konfigurálja az ügyfelet a TLS/SSL-ellenőrzés letiltására:
Az emulátor használata GitHub Actions CI-munkafolyamatban
Ha olyan folyamatos integrációs számítási feladatot szeretne futtatni, amely automatikusan ellenőrzi az alkalmazást, használja az Azure Cosmos DB emulátort egy tetszőleges tesztcsomaggal. Az Azure Cosmos DB emulátor előre telepítve van a windows-latest GitHub Action üzemeltetett futóinak változatában.
Futtasson egy tesztcsomagot a .NET-hez készült beépített tesztillesztővel és egy olyan tesztelési keretrendszerrel, mint az MSTest, az NUnit vagy az XUnit.
Ellenőrizze, hogy az alkalmazás egységtesztelési csomagja a várt módon működik-e.
dotnet test
Hozzon létre egy új munkafolyamatot a GitHub-adattárban egy nevű .github/workflows/ci.ymlfájlban.
Adjon hozzá egy feladatot a munkafolyamathoz, hogy elindítsa az Azure Cosmos DB emulátort a PowerShell használatával, és futtassa az egységtesztelési csomagot.
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
Feljegyzés
Indítsa el az emulátort a parancssorból különböző argumentumokkal vagy PowerShell-parancsokkal. További információ: Emulator parancssori argumentumok.
Tesztelje Python-alkalmazását és adatbázis-műveleteit a .pytest
Ellenőrizze, hogy az alkalmazás egységtesztelési csomagja a várt módon működik-e.
pip install -U pytest
pytest
Hozzon létre egy új munkafolyamatot a GitHub-adattárban egy nevű .github/workflows/ci.ymlfájlban.
Adjon hozzá egy feladatot a munkafolyamathoz, hogy elindítsa az Azure Cosmos DB emulátort a PowerShell használatával, és futtassa az egységtesztelési csomagot.
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
Feljegyzés
Indítsa el az emulátort a parancssorból különböző argumentumokkal vagy PowerShell-parancsokkal. További információ: Emulator parancssori argumentumok.
A Node.js alkalmazás és adatbázis-módosításainak tesztelésére használható mocha .
Ellenőrizze, hogy az alkalmazás egységtesztelési csomagja a várt módon működik-e.
npm install --global mocha
mocha
Hozzon létre egy új munkafolyamatot a GitHub-adattárban egy nevű .github/workflows/ci.ymlfájlban.
Adjon hozzá egy feladatot a munkafolyamathoz, hogy elindítsa az Azure Cosmos DB emulátort a PowerShell használatával, és futtassa az egységtesztelési csomagot.
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
Feljegyzés
Indítsa el az emulátort a parancssorból különböző argumentumokkal vagy PowerShell-parancsokkal. További információ: Emulator parancssori argumentumok.