Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
A próxima geração do emulador do Azure Cosmos DB é inteiramente baseada em Linux e está disponível como um contêiner do Docker. Ele dá suporte à execução em uma ampla variedade de processadores e sistemas operacionais.
Importante
Esta versão do emulador dá suporte apenas à API para NoSQL no modo gateway, com um subconjunto selecionado de recursos. Para obter mais informações, consulte suporte de funcionalidades.
Prerequisites
Installation
Obter a imagem de contêiner do Docker usando docker pull. A imagem do contêiner é publicada no Registro de Artefato da Microsoft como mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:vnext-preview.
docker pull mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:vnext-preview
Em execução
Para executar o contêiner, use docker run. Posteriormente, use docker ps para validar se o contêiner está em execução.
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>
O emulador inclui dois componentes:
-
Data Explorer – explore interativamente os dados no emulador. Por padrão, esse componente é executado na porta
1234. -
Azure Cosmos DB emulador – uma versão local do serviço de banco de dados Azure Cosmos DB. Por padrão, esse componente é executado na porta
8081.
O ponto de extremidade do gateway do emulador usa a porta 8081 no endereço http://localhost:8081. Para navegar até o Data Explorer, use o endereço http://localhost:1234 no navegador da Web. O ponto de extremidade do gateway normalmente está disponível imediatamente, mas o Data Explorer pode levar alguns segundos para iniciar.
Sonda de saúde
O emulador expõe um endpoint de verificação de integridade na porta 8080. Use esse ponto de extremidade para determinar quando o emulador está totalmente inicializado e pronto para aceitar solicitações.
Os seguintes endpoints estão disponíveis:
- http://localhost:8080/alive – Investigação de vida.
- http://localhost:8080/ready — Verificação de prontidão.
- http://localhost:8080/status — Status detalhado.
Note
A mensagem herdada de log System is now fully ready to accept requests ainda é emitida para garantir compatibilidade retroativa, mas pode ser removida em uma versão futura. Em vez disso, use a sonda de integridade para verificações de preparação.
Modo HTTPS
Os SDKs .NET e Java não suportam o modo HTTP no emulador. Como essa versão do emulador começa com HTTP por padrão, você precisará habilitar explicitamente o HTTPS ao iniciar o contêiner (veja abaixo). Para o SDK Java, você também precisará instalar certificados.
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 você usa HTTPS com volumes de dados persistentes, o emulador regenera automaticamente certificados SSL na inicialização, portanto, você não precisa gerenciar a renovação do certificado.
Comandos do Docker
A tabela a seguir resume os comandos do Docker disponíveis para configurar o emulador. Esta tabela detalha os argumentos correspondentes, variáveis de ambiente, valores permitidos, configurações padrão e descrições de cada comando.
| Requisito | Argh | Env | Valores permitidos | Default | Description |
|---|---|---|---|---|---|
| Imprimir as configurações para stdout do contêiner |
--help, -h |
N/A | N/A | N/A | Exibir informações sobre a configuração disponível |
| Definir a porta do ponto de extremidade do Cosmos | --port [INT] |
PORTO | INT | 8081 | A porta do ponto de extremidade do Cosmos no contêiner. Você ainda precisa publicar essa porta (por exemplo, -p 8081:8081). |
| Especificar o protocolo usado pelo ponto de extremidade do Cosmos | --protocol |
PROTOCOLO |
https
http, https-insecure |
http |
O protocolo do ponto de extremidade do Cosmos no contêiner. |
| Habilitar o explorador de dados | --enable-explorer |
HABILITAR_EXPLORADOR |
true, false |
true |
Habilite a execução do Cosmos Data Explorer no mesmo contêiner. |
| Definir a porta usada pelo data explorer | --explorer-port |
EXPLORER_PORT | INT | 1234 | A porta de comunicação do Cosmos Data Explorer no contêiner. Você ainda precisa publicar essa porta (por exemplo, -p 1234:1234). |
| Especificar o protocolo usado pelo data explorer | --explorer-protocol |
EXPLORER_PROTOCOL |
https
http, https-insecure |
<the value of --protocol> |
O protocolo do Cosmos Data Explorer no contêiner. O padrão é a configuração do protocolo no ponto de extremidade do Cosmos. |
| Personalizar o ponto de extremidade público do gateway | --gateway-endpoint |
GATEWAY_PUBLIC_ENDPOINT | N/A | localhost |
O ponto de extremidade do gateway público. Usa localhost como padrão. |
| Especificar a chave por meio do arquivo | --key-file [PATH] |
KEY_FILE | Caminho | <default secret> |
Substitua a chave padrão pela chave especificada no arquivo. Você precisará montar este arquivo no contêiner (por exemplo, se KEY_FILE=/mykey, você deve adicionar um parâmetro como o seguinte ao comando docker run: --mount type=bind,source=./myKey,target=/myKey) |
| Definir o caminho de dados | --data-path [PATH] |
DATA_PATH | Caminho | /data |
Especifique um diretório para dados. Usado com frequência com a opção docker run --mount (por exemplo, se DATA_PATH=/usr/cosmos/data, você adicionará uma opção como a seguinte à execução do docker: --mount type=bind,source=./.local/data,target=/usr/cosmos/data) |
| Especificar o caminho do certificado a ser usado para https | --cert-path [PATH] |
CERT_PATH | Caminho | <default cert> |
Especifique um caminho para um certificado para proteger o tráfego. Você precisa montar esse arquivo no contêiner (por exemplo, se CERT_PATH=/mycert.pfx, adicione uma opção como a seguinte ao executar o docker: --mount type=bind,source=./mycert.pfx,target=/mycert.pfx) |
| Especificar o segredo do certificado a ser usado para https | N/A | CERT_SECRET | cadeia | <default secret> |
O segredo do certificado especificado no CERT_PATH. |
| Definir o nível de log | --log-level [LEVEL] |
LOG_LEVEL |
quiet, error, warn, info, debug, , trace |
info |
A verbosidade dos logs que são emitidos pelo emulador e pelo explorador de dados. |
| Habilitar o exportador OTLP do OpenTelemetry | --enable-otlp |
ENABLE_OTLP_EXPORTER |
true, false |
false |
Habilitar a integração do OpenTelemetry. |
| Habilitar exportador de console | --enable-console |
ENABLE_CONSOLE_EXPORTER |
true, false |
false |
Habilite a saída do console de dados de telemetria (útil para depuração). |
| Habilitar o modo detalhado | --verbose |
PROLIXO |
true, false |
false |
Habilite o modo detalhado para exibir logs do PostgreSQL (pglog) no console. Útil para debugging. |
| Definir o tamanho do buffer de consulta | --query-buffer-size |
QUERY_BUFFER_SIZE_KB | INT | 4096 (4 MB), máximo de 65536 (64 MB) | O tamanho máximo em KB para buffers de resultados de consulta. Aumente isso se você encontrar erros HTTP 500 em consultas grandes. |
| Habilitar informações de diagnóstico que estão sendo enviadas à Microsoft | --enable-telemetry |
ATIVAR_TELEMETRIA |
true, false |
true |
Habilite o envio de dados de uso para a Microsoft para nos ajudar a melhorar o emulador. |
Suporte de funcionalidades
Esse emulador está em desenvolvimento ativo e versão prévia. Como resultado, nem todos os recursos do Azure Cosmos DB têm suporte. Alguns recursos também não terão suporte no futuro. Esta tabela inclui o estado de vários recursos e seu nível de suporte.
| Funcionalidade | Support |
|---|---|
| API do Lote | ✅ Com suporte |
| API em massa | ✅ Com suporte |
| Feed de Alterações | ✅ Com suporte |
| Criar e ler documento com dados utf | ✅ Com suporte |
| Criar coleção | ✅ Com suporte |
| Criar conflito de coleção duas vezes | ✅ Com suporte |
| Criar coleção com a política de índice personalizada | ⚠️ No-op |
| Criar coleção com expiração de ttl | ✅ Com suporte |
| Criar banco de dados | ✅ Com suporte |
| Criar banco de dados duas vezes em conflito | ✅ Com suporte |
| Criar documento | ✅ Com suporte |
| Criar coleção particionada | ✅ Com suporte |
| Excluir coleção | ✅ Com suporte |
| Excluir banco de dados | ✅ Com suporte |
| Excluir documento | ✅ Com suporte |
| Obter e alterar o desempenho da coleção | ⚠️ Ainda não implementado |
| Inserir documento grande | ✅ Com suporte |
| Documento de patch | ✅ Com suporte |
| Consultar coleção particionada em paralelo | ⚠️ Ainda não implementado |
| Consulta com agregações | ✅ Com suporte |
| Consultar com e filtrar | ✅ Com suporte |
| Consultar com e filtrar e projeção | ✅ Com suporte |
| Consulta com igualdade | ✅ Com suporte |
| Consulta com iguais na ID | ✅ Com suporte |
| Consultar com junções | ✅ Com suporte |
| Consulta com ordem por | ✅ Com suporte |
| Consulta com ordem por para coleção particionada | ✅ Com suporte |
| Consultar com ordem por números | ✅ Com suporte |
| Consultar com ordem por cadeias de caracteres | ✅ Com suporte |
| Consulta com paginação | ✅ Com suporte |
| Horários de data de consulta com operadores de intervalo | ✅ Com suporte |
| Consulta com operadores de intervalo em números | ✅ Com suporte |
| Consulta com operadores de intervalo em cadeias de caracteres | ✅ Com suporte |
| Consulta com junção única | ✅ Com suporte |
| Consulta com operadores de matriz e matemática de cadeia de caracteres | ✅ Com suporte |
| Consulta com subdocumentos | ✅ Com suporte |
| Consultar com duas junções | ✅ Com suporte |
| Consultar com duas junções e filtrar | ✅ Com suporte |
| Coleção de leitura | ✅ Com suporte |
| Feed de coleta de leitura | ⚠️ Ainda não implementado |
| Ler banco de dados | ✅ Com suporte |
| Ler fluxo do banco de dados | ⚠️ Ainda não implementado |
| Ler documento | ✅ Com suporte |
| Ler fluxo de documentos | ✅ Com suporte |
| Substituir documento | ✅ Com suporte |
| Unidades de Solicitação | ⚠️ Ainda não implementado |
| Procedimentos armazenados | ❌ Não planejado |
| Gatilhos | ❌ Não planejado |
| UDFs | ❌ Não planejado |
| Atualizar coleção | ⚠️ No-op |
| Atualizar documento | ✅ Com suporte |
| Endpoint de oferta | ⚠️ No-op |
| Endpoint de usuários | ⚠️ No-op |
| Endpoint de permissões | ⚠️ No-op |
| CEK (Chaves de Criptografia do Cliente) | ⚠️ No-op |
Note
Os recursos marcados como Não op aceitam solicitações e retornam códigos de status HTTP válidos, mas não executam a operação subjacente. Seu código não será interrompido, mas não dependerá desses recursos para comportamento funcional. Políticas de índice personalizadas e atualizações de coleção são aceitas para compatibilidade, mas as consultas não são otimizadas por índices personalizados.
Limitações
Além dos recursos ainda não compatíveis ou não planejados, a lista a seguir inclui as limitações atuais do emulador.
- O SDK do .NET para Azure Cosmos DB não dá suporte à execução em massa no emulador.
- Se você receber erros HTTP 500 em resultados de consultas grandes, aumente o tamanho do buffer de consulta com o
--query-buffer-sizeflag ou a variável de ambienteQUERY_BUFFER_SIZE_KB. O padrão é4096KB (4MB) e o máximo é65536KB (64MB).
Instalando certificados para Java SDK
Ao usar o SDK Java para Azure Cosmos DB com essa versão do emulador no modo https, é necessário instalar seus certificados no repositório de confiança Java local.
Obter certificado
Em uma janela bash, execute o seguinte:
# 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
Instalar certificado
Navegue até o diretório da instalação do Java onde o arquivo cacerts está localizado (substitua abaixo pelo diretório correto):
cd "C:/Program Files/Eclipse Adoptium/jdk-17.0.10.7-hotspot/bin"
Importe o certificado (pode ser solicitada uma senha, o valor padrão é "changeit"):
keytool -cacerts -importcert -alias cosmos_emulator -file $EMULATOR_CERT_PATH
Se você receber um erro porque o alias já existe, exclua-o e execute o procedimento acima novamente:
keytool -cacerts -delete -alias cosmos_emulator
Suporte ao OpenTelemetry
O OpenTelemetry é uma estrutura de observabilidade de software livre que fornece uma coleção de ferramentas, APIs e SDKs para instrumentar, gerar, coletar e exportar dados de telemetria. O Protocolo OpenTelemetry (OTLP) é o protocolo usado pelo OpenTelemetry para transmitir dados de telemetria entre componentes.
Você pode usar OpenTelemetry com o emulador para monitorar e rastrear seu aplicativo. O emulador dá suporte a opções de telemetria, que podem ser configuradas por meio de variáveis de ambiente ou sinalizadores de linha de comando ao executar o contêiner do Docker.
O emulador exporta as métricas a seguir. Eles estão disponíveis por meio de qualquer back-end de métricas que dê suporte ao OTLP e fornece insights valiosos sobre o desempenho e a integridade do banco de dados:
- Taxas de Solicitação: mostra os padrões de tráfego para diferentes tipos de operação
- Tempos de execução de consulta: mede o tempo necessário para executar consultas diferentes
- Utilização de recursos: CPU, uso de memória e métricas do pool de conexões
- Taxas de erro: acompanhamento de erros por tipo e ponto de extremidade
Note
O emulador dá suporte a TLS condicional para o exportador OTLP, para que você possa se integrar às plataformas de observabilidade que exigem conexões seguras.
Instruções detalhadas com exemplos estão disponíveis no repositório GitHub.
Usar no fluxo de trabalho de integração contínua
Há muitos benefícios em usar contêineres do Docker em pipelines de CI/CD, especialmente para sistemas com estado, como bancos de dados. Isso pode ser em termos de custo-benefício, desempenho, confiabilidade e consistência de seus conjuntos de testes.
O emulador pode ser incorporado como parte de pipelines de CI/CD. Você pode consultar este repositório GitHub que fornece exemplos de como usar o emulador como parte de um fluxo de trabalho de CI do GitHub Actions para aplicativos .NET, Python, Java e Go em arquiteturas x64 e ARM64 (demonstrado para executor no Linux usando ubuntu).
Aqui está um exemplo de um fluxo de trabalho de CI do GitHub Actions que mostra como configurar o emulador como um contêiner de serviço do GitHub Actions como parte de um trabalho no fluxo de trabalho. GitHub cuida de iniciar o contêiner do Docker e o destrói quando o trabalho é concluído, sem a necessidade de intervenção manual (como usar o 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
Esse trabalho é executado em um executor do Ubuntu e usa a imagem do mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:vnext-preview Docker como um contêiner de serviço. Ele usa variáveis de ambiente para configurar a cadeia de conexão, o nome do banco de dados e o nome do contêiner. Como nesse caso o trabalho está sendo executado diretamente na máquina do executor do GitHub Actions, a etapa Executar testes no trabalho pode acessar o emulador, que está acessível usando localhost:8081 (8081 é a porta exposta pelo emulador).
A etapa Export Cosmos DB Emulator Certificate é específica para Java aplicativos, pois o SDK do Azure Cosmos DB Java atualmente não dá suporte ao modo HTTP no emulador. A variável de ambiente PROTOCOL é definida como https na seção services e essa etapa exporta o certificado do emulador e o importa para o repositório de chaves Java. O mesmo também se aplica ao .NET.
Problemas de relatórios
Se você encontrar problemas com o uso desta versão do emulador, abra um problema no repositório GitHub (https://github.com/Azure/azure-cosmos-db-emulator-docker) e marque-o com o rótulo cosmosEmulatorVnextPreview.