Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
La nuova generazione dell'emulatore Azure Cosmos DB è interamente basata su Linux ed è disponibile come contenitore Docker. Supporta l'esecuzione su un'ampia gamma di processori e sistemi operativi.
Importante
Questa versione dell'emulatore supporta solo l'API per NoSQL in modalità gateway, con un subset selezionato di funzionalità. Per altre informazioni, vedere il supporto delle funzionalità.
Prerequisiti
Installazione
Ottenere l'immagine del contenitore Docker usando docker pull. L'immagine del contenitore viene pubblicata nel registro Microsoft Artifact Registry come mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:vnext-preview.
docker pull mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:vnext-preview
In esecuzione
Per eseguire il contenitore, usare docker run. Successivamente, usare docker ps per verificare che il contenitore sia in esecuzione.
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'emulatore include due componenti:
-
Esplora dati - Esplorare in modo interattivo i dati nell'emulatore. Per impostazione predefinita, questo componente viene eseguito sulla porta
1234. - emulatore Azure Cosmos DB: versione locale del servizio di database Azure Cosmos DB. Per impostazione predefinita, questo componente viene eseguito sulla porta
8081.
L'endpoint del gateway emulatore usa la porta 8081 all'indirizzo http://localhost:8081. Per passare alla Esplora dati, usare l'indirizzo http://localhost:1234 nel Web browser. L'endpoint del gateway è in genere disponibile immediatamente, ma l'avvio di Esplora dati potrebbe richiedere alcuni secondi.
Sonda di diagnostica
L'emulatore espone un endpoint sonda di integrità sulla porta 8080. Usare questo endpoint per determinare quando l'emulatore è completamente inizializzato e pronto per accettare le richieste.
Sono disponibili i seguenti endpoint:
- http://localhost:8080/alive — Probe di liveness.
- http://localhost:8080/ready — Probe di idoneità.
- http://localhost:8080/status — Stato dettagliato.
Annotazioni
Il messaggio System is now fully ready to accept requests di log legacy viene ancora generato per la compatibilità con le versioni precedenti, ma potrebbe essere rimosso in una versione futura. Usare invece la sonda di integrità per i controlli di disponibilità.
Modalità HTTPS
Gli SDK .NET e Java non supportano la modalità HTTP nell'emulatore. Poiché questa versione dell'emulatore inizia con HTTP per impostazione predefinita, sarà necessario abilitare in modo esplicito HTTPS all'avvio del contenitore (vedere di seguito). Per Java SDK, è anche necessario installare i certificati.
docker run --detach --publish 8081:8081 --publish 8080:8080 --publish 1234:1234 mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:vnext-preview --protocol https
Quando si usa HTTPS con volumi di dati persistenti, l'emulatore rigenera automaticamente i certificati SSL all'avvio, quindi non è necessario gestire il rinnovo del certificato.
Comandi Docker
La tabella seguente riepiloga i comandi Docker disponibili per la configurazione dell'emulatore. Questa tabella illustra in dettaglio gli argomenti corrispondenti, le variabili di ambiente, i valori consentiti, le impostazioni predefinite e le descrizioni di ogni comando.
| Requisito | Argomento | Env | Valori consentiti | Default | Description |
|---|---|---|---|---|---|
| Stampare le impostazioni in stdout dal contenitore |
--help, -h |
N/A | N/A | N/A | Visualizzare informazioni sulla configurazione disponibile |
| Impostare la porta dell'endpoint Cosmos | --port [INT] |
PORTA | INT | 8081 | Porta dell'endpoint Cosmos nel contenitore. È comunque necessario pubblicare questa porta, ad esempio -p 8081:8081. |
| Specificare il protocollo usato dall'endpoint Cosmos | --protocol |
PROTOCOLLO |
https, http, https-insecure |
http |
Il protocollo dell'endpoint Cosmos nel contenitore. |
| Abilitare Esplora dati | --enable-explorer |
ENABLE_EXPLORER |
true, false |
true |
Abilitare l'esecuzione del Esplora dati Cosmos nello stesso contenitore. |
| Impostare la porta usata da Esplora dati | --explorer-port |
EXPLORER_PORT | INT | 1234 | La porta del Cosmos Esplora dati sul contenitore. È comunque necessario pubblicare questa porta, ad esempio -p 1234:1234. |
| Specificare il protocollo usato da Esplora dati | --explorer-protocol |
EXPLORER_PROTOCOL |
https, http, https-insecure |
<the value of --protocol> |
Protocollo del Esplora dati Cosmos nel contenitore. Il valore predefinito è l'impostazione del protocollo nell'endpoint Cosmos. |
| Personalizzare l'endpoint pubblico del gateway | --gateway-endpoint |
GATEWAY_PUBLIC_ENDPOINT | N/A | localhost |
Endpoint del gateway pubblico. Il valore predefinito è localhost. |
| Specificare la chiave tramite file | --key-file [PATH] |
KEY_FILE | PERCORSO | <default secret> |
Eseguire l'override della chiave predefinita con la chiave specificata nel file. È necessario montare questo file nel contenitore (ad esempio, se KEY_FILE=/mykey, aggiungere un'opzione simile alla seguente all'esecuzione di Docker: --mount type=bind,source=./myKey,target=/myKey) |
| Impostare il percorso dati | --data-path [PATH] |
DATA_PATH | PERCORSO | /data |
Specificare una directory per i dati. Usato di frequente con l'opzione docker run --mount (ad esempio, se DATA_PATH=/usr/cosmos/data, aggiungere un'opzione simile alla seguente all'esecuzione di Docker: --mount type=bind,source=./.local/data,target=/usr/cosmos/data) |
| Specificare il percorso del certificato da usare per https | --cert-path [PATH] |
CERT_PATH | PERCORSO | <default cert> |
Specificare un percorso di un certificato per la protezione del traffico. È necessario montare questo file nel contenitore (ad esempio, se CERT_PATH=/mycert.pfx, aggiungere un'opzione simile alla seguente all'esecuzione di Docker: --mount type=bind,source=./mycert.pfx,target=/mycert.pfx) |
| Specificare il segreto del certificato da usare per https | N/A | CERT_SEGRETO | string | <default secret> |
Il segreto per il certificato specificato in CERT_PATH. |
| Impostare il livello di log | --log-level [LEVEL] |
LOG_LEVEL |
quiet, error, warn, info, debugtrace |
info |
Livello di verbosità dei log emessi dall'emulatore e dal data explorer. |
| Abilitare l'esportatore OTLP di OpenTelemetry | --enable-otlp |
ENABLE_OTLP_EXPORTER |
true, false |
false |
Abilitare l'integrazione di OpenTelemetry. |
| Abilitare l'esportatore della console | --enable-console |
ENABLE_CONSOLE_EXPORTER |
true, false |
false |
Abilitare l'output della console dei dati di telemetria (utile per il debug). |
| Abilitare la modalità dettagliata | --verbose |
PROLISSO |
true, false |
false |
Abilitare la modalità dettagliata per stampare i log di PostgreSQL (abbreviazione: pglog) nella console. Utile per il debug. |
| Impostare le dimensioni del buffer di query | --query-buffer-size |
QUERY_BUFFER_SIZE_KB | INT | 4096 (4 MB), massimo 65536 (64 MB) | Dimensione massima in KB per i buffer dei risultati della query. Aumenta questo parametro se si verificano errori HTTP 500 su query di grandi dimensioni. |
| Abilitare l'invio di informazioni di diagnostica a Microsoft | --enable-telemetry |
ATTIVA_TELEMETRIA |
true, false |
true |
Abilitare l'invio di dati di utilizzo a Microsoft per migliorare l'emulatore. |
Supporto delle funzionalità
Questo emulatore è in fase di sviluppo e anteprima attivi. Di conseguenza, non tutte le funzionalità di Azure Cosmos DB sono supportate. Alcune funzionalità non saranno supportate in futuro. Questa tabella include lo stato di varie funzionalità e il relativo livello di supporto.
| Caratteristica / Funzionalità | Support |
|---|---|
| Batch API | ✅ Sostenuto |
| API in blocco | ✅ Sostenuto |
| Feed di modifiche | ✅ Sostenuto |
| Creare e leggere un documento con dati utf | ✅ Sostenuto |
| CreateCollection | ✅ Sostenuto |
| Creare una raccolta due volte in conflitto | ✅ Sostenuto |
| Creare una raccolta con criteri di indice personalizzati | ⚠️ Nessuna operazione (No-op) |
| Creare una raccolta con scadenza ttl | ✅ Sostenuto |
| CreateDatabase | ✅ Sostenuto |
| Creare un conflitto di database due volte | ✅ Sostenuto |
| Creare un documento | ✅ Sostenuto |
| Creare una raccolta partizionata | ✅ Sostenuto |
| Eliminare una raccolta | ✅ Sostenuto |
| Eliminare un database | ✅ Sostenuto |
| Eliminare un documento | ✅ Sostenuto |
| Ottenere e modificare le prestazioni della raccolta | ⚠️ Non ancora implementato |
| Inserire un documento di grandi dimensioni | ✅ Sostenuto |
| Applicare patch a un documento | ✅ Sostenuto |
| Eseguire query sulla raccolta partizionata in parallelo | ⚠️ Non ancora implementato |
| Query con aggregazioni | ✅ Sostenuto |
| Eseguire query con e filtrare | ✅ Sostenuto |
| Eseguire query con e filtrare e proiettare | ✅ Sostenuto |
| Query con uguaglianza | ✅ Sostenuto |
| Query con uguale all'ID | ✅ Sostenuto |
| Eseguire query con join | ✅ Sostenuto |
| Eseguire query con riordina per | ✅ Sostenuto |
| Eseguire una query con riordina per raccolta partizionata | ✅ Sostenuto |
| Eseguire una query con ordine in base ai numeri | ✅ Sostenuto |
| Eseguire query con riordina per stringhe | ✅ Sostenuto |
| Query con paging | ✅ Sostenuto |
| Eseguire una query con gli operatori di intervallo data/ora | ✅ Sostenuto |
| Eseguire query con operatori di intervallo su numeri | ✅ Sostenuto |
| Eseguire query con operatori di intervallo su stringhe | ✅ Sostenuto |
| Query con un singolo join | ✅ Sostenuto |
| Eseguire query con operatori di stringa, matematici e di matrice | ✅ Sostenuto |
| Eseguire query con documenti secondari | ✅ Sostenuto |
| Eseguire una query con due join | ✅ Sostenuto |
| Eseguire una query con due join e filtri | ✅ Sostenuto |
| Leggere la raccolta | ✅ Sostenuto |
| Leggere il feed di raccolta | ⚠️ Non ancora implementato |
| Leggere un database | ✅ Sostenuto |
| Leggere il feed di un database | ⚠️ Non ancora implementato |
| Leggere un documento | ✅ Sostenuto |
| Leggere il feed di un documento | ✅ Sostenuto |
| Sostituire un documento | ✅ Sostenuto |
| Unità richiesta | ⚠️ Non ancora implementato |
| Procedure memorizzate | ❌ Non pianificato |
| Trigger | ❌ Non pianificato |
| funzioni definite dall'utente | ❌ Non pianificato |
| UpdateCollection | ⚠️ Nessuna operazione (No-op) |
| Aggiornare un documento | ✅ Sostenuto |
| Endpoint offerte | ⚠️ Nessuna operazione (No-op) |
| Endpoint utenti | ⚠️ Nessuna operazione (No-op) |
| Endpoint delle autorizzazioni | ⚠️ Nessuna operazione (No-op) |
| Chiavi di crittografia client (CEK) | ⚠️ Nessuna operazione (No-op) |
Annotazioni
Funzionalità contrassegnate come no-op accettano richieste e restituiscono codici di stato HTTP validi, ma non eseguono l'operazione sottostante. Il codice non si interrompe, ma non dipende da queste funzionalità per il comportamento funzionale. I criteri di indice personalizzati e gli aggiornamenti delle raccolte vengono accettati per la compatibilità, ma le query non sono ottimizzate da indici personalizzati.
Limitazioni
Oltre alle funzionalità non ancora supportate o non pianificate, l'elenco seguente include le limitazioni correnti dell'emulatore.
- L'SDK di .NET per Azure Cosmos DB non supporta l'esecuzione in blocco nell'emulatore.
- Se vengono visualizzati errori HTTP 500 in risultati di query di grandi dimensioni, aumentare le dimensioni del buffer di query con il
--query-buffer-sizeflag o laQUERY_BUFFER_SIZE_KBvariabile di ambiente. Il valore predefinito è4096KB (4MB) e il valore massimo è65536KB (64MB).
Installazione dei certificati per Java SDK
Quando si usa Java SDK per Azure Cosmos DB con questa versione dell'emulatore in modalità https, è necessario installare i certificati nell'archivio trust locale Java.
Ottenere il certificato
In una finestra bash, eseguire quanto segue:
# 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
Installare il certificato
Passare alla directory dell'installazione java in cui è collocato il file cacerts (sostituire di seguito con la directory corretta):
cd "C:/Program Files/Eclipse Adoptium/jdk-17.0.10.7-hotspot/bin"
Importare il certificato (è possibile che venga chiesta una password; il valore predefinito è "changeit"):
keytool -cacerts -importcert -alias cosmos_emulator -file $EMULATOR_CERT_PATH
Se viene visualizzato un errore perché l'alias esiste già, eliminarlo e quindi eseguire di nuovo quanto sopra:
keytool -cacerts -delete -alias cosmos_emulator
Supporto di OpenTelemetry
OpenTelemetry è un framework di osservabilità open source che fornisce una raccolta di strumenti, API e SDK per instrumentare, generare, raccogliere ed esportare dati di telemetria. Il protocollo OPENTelemetry Protocol (OTLP) è il protocollo usato da OpenTelemetry per trasmettere i dati di telemetria tra i componenti.
È possibile usare OpenTelemetry con l'emulatore per monitorare e tracciare l'applicazione. L'emulatore supporta le opzioni di telemetria, che possono essere configurate tramite variabili di ambiente o flag della riga di comando durante l'esecuzione del contenitore Docker.
L'emulatore esporta le metriche seguenti. Sono disponibili tramite qualsiasi back-end delle metriche che supporta OTLP e fornisce informazioni utili sulle prestazioni e sull'integrità del database:
- Frequenza delle richieste: mostra i modelli di traffico per diversi tipi di operazione
- Tempi di esecuzione delle query: misura il tempo impiegato per eseguire query diverse
- Utilizzo risorse: metriche cpu, utilizzo della memoria e pool di connessioni
- Frequenza degli errori: rilevamento degli errori per tipo ed endpoint
Annotazioni
L'emulatore supporta TLS condizionale per l'esportatore OTLP, per integrarsi con piattaforme di osservabilità che richiedono connessioni sicure.
Le istruzioni dettagliate con esempi sono disponibili nel repository GitHub.
Uso nel flusso di lavoro dell'integrazione continua
L'uso di contenitori Docker nelle pipeline CI/CD offre numerosi vantaggi, soprattutto per sistemi con stato come i database. Questa potrebbe essere in termini di costo-efficacia, prestazioni, affidabilità e coerenza delle suite di test.
L'emulatore può essere incorporato come parte delle pipeline CI/CD. È possibile fare riferimento a questo repository GitHub che fornisce esempi su come usare l'emulatore come parte di un flusso di lavoro CI di GitHub Actions per applicazioni .NET, Python, Java e Go su entrambe le architetture x64 e ARM64 (illustrato per il runner Linux usando ubuntu).
Di seguito è riportato un esempio di flusso di lavoro CI di GitHub Actions che illustra come configurare l'emulatore come un contenitore di servizio di GitHub Actions all'interno di un processo del flusso di lavoro. GitHub si occupa dell'avvio del contenitore Docker e lo elimina al termine del processo, senza la necessità di intervento manuale, ad esempio usando il comando docker run.
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
Questo processo viene eseguito su un runner Ubuntu e usa l'immagine mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:vnext-preview Docker come contenitore di servizio. Usa le variabili di ambiente per configurare la stringa di connessione, il nome del database e il nome del contenitore. Poiché in questo caso il processo viene eseguito direttamente nel computer di esecuzione di GitHub Actions, il passaggio Esegui test nel processo può accedere all'emulatore usando localhost:8081 (8081 è la porta esposta dall'emulatore).
Il passaggio Export Cosmos DB Emulator Certificate (Esporta certificato dell'emulatore Cosmos DB) è specifico per le applicazioni Java poiché l'SDK Java di Azure Cosmos DB attualmente non supporta la modalità HTTP nell'emulatore. La variabile di ambiente PROTOCOL è impostata su https nella sezione services e questo passaggio esporta il certificato dell'emulatore e lo importa nell'archivio chiavi Java. Lo stesso vale anche per .NET.
Segnalazione di problemi
Se si verificano problemi con l'uso di questa versione dell'emulatore, aprire un problema nel repository GitHub (https://github.com/Azure/azure-cosmos-db-emulator-docker) e contrassegnarlo con l'etichetta cosmosEmulatorVnextPreview.