Sviluppare in locale usando l'emulatore di Azure Cosmos DB
Articolo
Un caso d'uso comune per l'emulatore consiste nel fungere da database di sviluppo durante la compilazione delle applicazioni. L'uso dell'emulatore per lo sviluppo consente di apprendere le caratteristiche della creazione e della modellazione dei dati per un database come Azure Cosmos DB senza incorrere in costi di servizio. Inoltre, l'uso dell'emulatore come parte di un flusso di lavoro di automazione può garantire che sia possibile eseguire la stessa suite di test di integrazione. È possibile assicurarsi che gli stessi test vengano eseguiti in locale nel computer di sviluppo e in remoto in un processo di integrazione continua.
Per iniziare, ottenere la variante Linux dell'immagine del contenitore dal Registro Contenitori Microsoft (MCR).To get started, get the Linux-variant of the container image from the Microsoft Container Registry (MCR).
Eseguire il pull dell'immagine mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator del contenitore Linux dal registro contenitori all'host Docker locale.
Eseguire il pull dell'immagine mcr.microsoft.com/cosmosdb/windows/azure-cosmos-emulator del contenitore di Windows dal registro contenitori all'host Docker locale.
Per iniziare, ottenere la variante Linux dell'immagine del contenitore dal Registro Contenitori Microsoft (MCR).To get started, get the Linux-variant of the container image from the Microsoft Container Registry (MCR).
Eseguire il pull dell'immagine mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator del contenitore Linux usando il mongodb tag dal registro contenitori all'host Docker locale.
La variante del contenitore Docker (Linux o Windows) dell'emulatore non supporta l'API per Apache Cassandra, l'API per Apache Gremlin o l'API per Table.
Per iniziare, scaricare e installare la versione più recente dell'emulatore di Azure Cosmos DB nel computer locale.
Suggerimento
L'articolo note sulla versione dell'emulatore elenca tutte le versioni disponibili e gli aggiornamenti delle funzionalità apportati in ogni versione.
Scaricare l'emulatore di Azure Cosmos DB.
Eseguire il programma di installazione nel computer locale con privilegi amministrativi.
L'emulatore installa automaticamente i certificati di sviluppo appropriati e configura le regole del firewall nel computer locale.
Avviare l'emulatore
Dopo il download, avviare l'emulatore con l'API specificata abilitata.
La variante del contenitore Docker dell'emulatore non supporta l'API per Apache Cassandra.
Avviare l'eseguibile dell'emulatore (Microsoft.Azure.Cosmos.Emulator.exe) nel %ProgramFiles%\Azure Cosmos DB Emulator percorso. Usare questi parametri per configurare l'emulatore:
La variante del contenitore Docker dell'emulatore non supporta l'API per Apache Gremlin.
Avviare l'eseguibile dell'emulatore (Microsoft.Azure.Cosmos.Emulator.exe) nel %ProgramFiles%\Azure Cosmos DB Emulator percorso. Usare questi parametri per configurare l'emulatore:
La variante del contenitore Docker dell'emulatore non supporta l'API per Table.
Avviare l'eseguibile dell'emulatore (Microsoft.Azure.Cosmos.Emulator.exe) nel %ProgramFiles%\Azure Cosmos DB Emulator percorso. Usare questi parametri per configurare l'emulatore:
Passare a per accedere a https://localhost:8081/_explorer/index.html Esplora dati.
Avviare l'emulatore selezionando l'applicazione in Windows menu Start.
In alternativa, è possibile avviare il file eseguibile dell'emulatore (Microsoft.Azure.Cosmos.Emulator.exe) nel %ProgramFiles%\Azure Cosmos DB Emulator percorso.
È anche possibile avviare l'emulatore dalla riga di comando. Usare questi parametri per configurare l'emulatore:
Descrizione
Port
Numero di porta da usare per l'endpoint API per NoSQL.
Microsoft.Azure.Cosmos.Emulator.exe /Port=65000
Nota
Per altre informazioni sugli argomenti della riga di comando, vedere Parametri della riga di comando.
L'emulatore apre automaticamente Esplora dati usando l'URL https://localhost:8081/_explorer/index.html.
Passare a per accedere a https://localhost:8081/_explorer/index.html Esplora dati.
L'immagine del contenitore Docker (Windows) non supporta l'API per MongoDB.
Avviare l'eseguibile dell'emulatore (Microsoft.Azure.Cosmos.Emulator.exe) nel %ProgramFiles%\Azure Cosmos DB Emulator percorso. Usare questi parametri per configurare l'emulatore:
Descrizione
EnableMongoDbEndpoint
Abilita l'endpoint API per MongoDB nella versione di MongoDB specificata.
Per altre informazioni sugli argomenti della riga di comando e sulle versioni di MongoDB supportate dall'emulatore, vedere parametri della riga di comando.
L'emulatore apre automaticamente Esplora dati usando l'URL https://localhost:8081/_explorer/index.html.
Importare il certificato TLS/SSL dell'emulatore
Importare il certificato TLS/SSL dell'emulatore per usare l'emulatore con l'SDK per sviluppatori preferito senza disabilitare TLS/SSL nel client.
La variante del contenitore Docker (Linux o Windows) dell'emulatore non supporta l'API per Apache Cassandra, l'API per Apache Gremlin o l'API per Table.
L'installazione locale di Windows dell'emulatore importa automaticamente i certificati TLS/SSL. Non è necessaria alcuna ulteriore azione.
Il certificato per l'emulatore è disponibile nel percorso _explorer/emulator.pem del contenitore in esecuzione. Usare curl per scaricare il certificato dal contenitore in esecuzione nel computer locale.
Potrebbe essere necessario modificare l'host (o l'indirizzo IP) e il numero di porta se tali valori sono stati modificati in precedenza.
Installare il certificato in base al processo usato in genere per il sistema operativo. Ad esempio, in Linux si copia il certificato nel /usr/local/share/ca-certificates/ percorso.
Aggiornare i certificati CA e rigenerare il bundle di certificati usando il comando appropriato per la distribuzione linux.
Per i sistemi basati su Debian (ad esempio, Ubuntu), usare:
sudo update-ca-certificates
Per i sistemi basati su Red Hat (ad esempio, CentOS, Fedora), usare:
sudo update-ca-trust
Per istruzioni più dettagliate, vedere la documentazione specifica per la distribuzione di Linux.
L'installazione locale di Windows dell'emulatore importa automaticamente i certificati TLS/SSL. Non è necessaria alcuna ulteriore azione.
Connessione all'emulatore dall'SDK
Ogni SDK include in genere una classe client usata per connettere l'SDK all'account Azure Cosmos DB. Usando le credenziali dell'emulatore, è possibile connettere l'SDK all'istanza dell'emulatore.
Creare un nuovo elemento nel contenitore usando UpsertItemAsync.
var item = new
{
id = "68719518371",
name = "Kiama classic surfboard"
};
await container.UpsertItemAsync(item);
Eseguire l'applicazione .NET.
dotnet run
Avviso
Se viene visualizzato un errore SSL, potrebbe essere necessario disabilitare TLS/SSL per l'applicazione. Ciò si verifica in genere se si sviluppa nel computer locale, usando l'emulatore di Azure Cosmos DB in un contenitore e non è stato importato il certificato SSL del contenitore. Per risolvere questo problema, configurare le opzioni del client per disabilitare la convalida TLS/SSL prima di creare il client:
Se viene visualizzato un errore SSL, potrebbe essere necessario disabilitare TLS/SSL per l'applicazione. Ciò si verifica in genere se si sviluppa nel computer locale, usando l'emulatore di Azure Cosmos DB in un contenitore e non è stato importato il certificato SSL del contenitore. Per risolvere questo problema, configurare l'applicazione per disabilitare la convalida TLS/SSL prima di creare il client:
import urllib3
urllib3.disable_warnings()
Se si verificano ancora errori SSL, è possibile che Python stia recuperando i certificati da un archivio certificati diverso. Per determinare il percorso in cui Python cerca i certificati, seguire questa procedura:
Importante
Se si usa un ambiente virtuale Python (venv) assicurarsi che sia attivato prima di eseguire i comandi.
Aprire un terminale
Avviare l'interprete Python digitando python o python3, a seconda della versione di Python.
Nell'interprete Python eseguire i comandi seguenti:
from requests.utils import DEFAULT_CA_BUNDLE_PATH
print(DEFAULT_CA_BUNDLE_PATH)
All'interno di un ambiente virtuale, il percorso può essere (almeno in Ubuntu):
All'esterno di un ambiente virtuale, il percorso può essere (almeno in Ubuntu):
/etc/ssl/certs/ca-certificates.crt
Dopo aver identificato il DEFAULT_CA_BUNDLE_PATH, aprire un nuovo terminale ed eseguire i comandi seguenti per aggiungere il certificato dell'emulatore al bundle di certificati:
Importante
Se DEFAULT_CA_BUNDLE_PATH variabile punta a una directory di sistema, è possibile che venga visualizzato un errore "Autorizzazione negata". In questo caso, sarà necessario eseguire i comandi con privilegi elevati (come radice). Inoltre, sarà necessario aggiornare e rigenerare il bundle di certificati dopo aver eseguito i comandi forniti.
# 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
Se viene visualizzato un errore SSL, potrebbe essere necessario disabilitare TLS/SSL per l'applicazione. Ciò si verifica in genere se si sviluppa nel computer locale, usando l'emulatore di Azure Cosmos DB in un contenitore e non è stato importato il certificato SSL del contenitore. Per risolvere questo problema, configurare l'applicazione per disabilitare la convalida TLS/SSL prima di creare il client:
Eliminare qualsiasi contenuto esistente all'interno del file.
Aggiungere un blocco using per lo spazio dei MongoDB.Driver nomi.
using MongoDB.Driver;
Creare una nuova istanza di MongoClient usando le credenziali dell'emulatore.
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"})
Usare update_one per creare un nuovo elemento nel contenitore.
Se viene visualizzato un errore SSL, potrebbe essere necessario disabilitare TLS/SSL per l'applicazione. Ciò si verifica in genere se si sviluppa nel computer locale, usando l'emulatore di Azure Cosmos DB in un contenitore e non è stato importato il certificato SSL del contenitore. Per risolvere questo problema, configurare l'applicazione per disabilitare la convalida TLS/SSL prima di creare il client:
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());
Creare un nuovo elemento nella tabella usando ExecuteAsync. Utilizzare Bind per assegnare proprietà all'elemento.
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);
Eseguire l'applicazione .NET.
dotnet run
Usare il driver Python Apache Cassandra per connettersi all'emulatore da un'applicazione Python.
Iniziare in una cartella vuota.
Importare il cassandra-driver pacchetto dall'indice del pacchetto Python.
pip install cassandra-driver
Creare il file app.py.
Importare PROTOCOL_TLS_CLIENT, SSLContexte CERT_NONE dal ssl modulo . Importare Cluster quindi dal cassandra.cluster modulo. Infine, importare PlainTextAuthProvider dal cassandra.auth modulo.
from ssl import PROTOCOL_TLS_CLIENT, SSLContext, CERT_NONE
from cassandra.cluster import Cluster
from cassandra.auth import PlainTextAuthProvider
Creare una nuova variabile di contesto TLS/SSL usando SSLContext. Configurare il contesto per non verificare il certificato autofirmato dell'emulatore.
Creare un nuovo keyspace e una nuova tabella usando 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)"
)
Utilizzare session.execute per creare un nuovo elemento nella tabella.
Usare il driver Node.js Apache Cassandra per usare l'emulatore da un'applicazione Node.js/JavaScript.
Iniziare in una cartella vuota.
Inizializzare un nuovo modulo.
npm init es6 --yes
Installare il cassandra-driver pacchetto da Node Gestione pacchetti.
npm install --save cassandra-driver
Creare il file app.js .
Importare il tipo e auth lo Client spazio dei nomi dal cassandra-driver modulo.
import { Client, auth } from 'cassandra-driver'
Usare PlainTextAuthProvider per creare un nuovo oggetto per le credenziali dell'emulatore. Usare Client per connettersi all'emulatore usando le credenziali.
const credentials = new auth.PlainTextAuthProvider(
'localhost',
'C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw=='
)
const client = new Client({
contactPoints: [
'localhost:10350'
],
authProvider: credentials,
localDataCenter: 'South Central US'
})
Usare execute per eseguire un comando sul lato server per creare un keyspace e una tabella.
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)'
)
Usare execute di nuovo per creare un nuovo elemento con parametri.
Se viene visualizzato un errore SSL, potrebbe essere necessario disabilitare TLS/SSL per l'applicazione. Ciò si verifica in genere se si sviluppa nel computer locale, usando l'emulatore di Azure Cosmos DB in un contenitore e non è stato importato il certificato SSL del contenitore. Per risolvere questo problema, configurare il client per disabilitare la convalida TLS/SSL:
Prima di iniziare, l'API per Apache Gremlin richiede di creare le risorse nell'emulatore. Creare un database denominato db1 e un contenitore denominato coll1. Le impostazioni di velocità effettiva sono irrilevanti per questa guida e possono essere impostate come minimo.
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()
);
Usare il driver Node.js Apache Gremlin per usare l'emulatore da un'applicazione Node.js/JavaScript.
Iniziare in una cartella vuota.
Inizializzare un nuovo modulo.
npm init es6 --yes
Installare il gremlin pacchetto da Node Gestione pacchetti.
npm install --save gremlin
Creare il file app.js .
Importare il gremlin modulo.
import gremlin from 'gremlin'
Usare PlainTextSaslAuthenticator per creare un nuovo oggetto per le credenziali dell'emulatore. Usare Client per connettersi all'emulatore usando le credenziali.
Eliminare qualsiasi contenuto esistente all'interno del file.
Aggiungere un blocco using per lo spazio dei Azure.Data.Tables nomi.
using Azure.Data.Tables;
Creare una nuova istanza di TableServiceClient usando le credenziali dell'emulatore.
var serviceClient = new TableServiceClient(
connectionString: "DefaultEndpointsProtocol=http;AccountName=localhost;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==;TableEndpoint=http://localhost:8902/;"
);
Se viene visualizzato un errore SSL, potrebbe essere necessario disabilitare TLS/SSL per l'applicazione. Ciò si verifica in genere se si sviluppa nel computer locale, usando l'emulatore di Azure Cosmos DB in un contenitore e non è stato importato il certificato SSL del contenitore. Per risolvere questo problema, configurare il client per disabilitare la convalida TLS/SSL:
Usare l'emulatore in un flusso di lavoro ci di GitHub Actions
Usare l'emulatore di Azure Cosmos DB con un gruppo di test dal framework scelto per eseguire un carico di lavoro di integrazione continua che convalida automaticamente l'applicazione. L'emulatore di Azure Cosmos DB è preinstallato nella windows-latest variante degli strumenti di esecuzione ospitati di GitHub Action.