Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
A próxima geração do emulador Azure Cosmos DB é inteiramente baseada em Linux e está disponível como contentor Docker. Ele suporta a execução em uma ampla variedade de processadores e sistemas operacionais.
Importante
Esta versão do emulador só suporta a API para NoSQL em
Pré-requisitos
Instalação
Obtenha a imagem do contentor do Docker usando docker pull. A imagem do contêiner é publicada no Microsoft Artifact Registry como mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:vnext-preview.
docker pull mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:vnext-preview
Running
Para executar o contêiner, use docker run. Depois, 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 de forma interativa os dados no emulador. Por defeito, este componente corre na porta
1234. -
Emulador do Azure Cosmos DB - Uma versão local do serviço de bases de dados do Azure Cosmos DB. Por defeito, este componente corre na porta
8081.
O endpoint do gateway do emulador usa a porta 8081 no endereço http://localhost:8081. Para navegar até à Data Explorer, use o endereço http://localhost:1234 no seu navegador web. O endpoint do gateway está normalmente disponível imediatamente, mas o Data Explorer pode demorar alguns segundos para iniciar.
Sonda de saúde
O emulador expõe um endpoint da sonda de saúde na porta 8080. Use este endpoint para determinar quando o emulador está totalmente inicializado e pronto para aceitar pedidos.
Os seguintes endpoints estão disponíveis:
- http://localhost:8080/alive — Sonda de vivacidade.
- http://localhost:8080/ready — Sonda de prontidão.
- http://localhost:8080/status — Estado detalhado.
Observação
A mensagem System is now fully ready to accept requests do registo legado continua a ser emitida para compatibilidade retroativa, mas pode ser removida numa versão futura. Utilize a sonda de saúde para as verificações de prontidão em vez disso.
Modo HTTPS
Os SDKs .NET e Java não suportam o modo HTTP no emulador. Como esta 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 Java SDK, 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 usas HTTPS com volumes de dados persistentes, o emulador regenera automaticamente os certificados SSL no arranque, por isso não precisas de gerir a renovação de certificados.
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 | Arg | Env | Valores permitidos | Predefinição | Description |
|---|---|---|---|---|---|
| Imprima as configurações para stdout a partir 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 Cosmos no contêiner. Você ainda precisa publicar essa porta (por exemplo, -p 8081:8081). |
| Especifica o protocolo utilizado pelo ponto de extremidade Cosmos | --protocol |
PROTOCOLO |
https, http, https-insecure |
http |
O protocolo do ponto de extremidade Cosmos no contêiner. |
| Ativar o explorador de dados | --enable-explorer |
ATIVAR_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 do Cosmos Data Explorer localizada no contentor. Você ainda precisa publicar essa porta (por exemplo, -p 1234:1234). |
| Especifique o protocolo utilizado pelo explorador de dados | --explorer-protocol |
Protocolo Explorador |
https, http, https-insecure |
<the value of --protocol> |
O protocolo do Cosmos Data Explorer no container. Por padrão, usa-se a configuração do protocolo no ponto de extremidade do Cosmos. |
| Personalizar o endpoint público do gateway | --gateway-endpoint |
ENDPOINT_PÚBLICO_GATEWAY | N/A | localhost |
O ponto de acesso público. O padrão é localhost. |
| Especifique a chave via arquivo | --key-file [PATH] |
FICHEIRO_CHAVE | CAMINHO | <default secret> |
Substitua a chave padrão pela chave especificada no arquivo. Você precisa montar esse arquivo no contêiner (por exemplo, se KEY_FILE=/mykey, você adicionaria uma opção como a seguinte à sua execução do docker: --mount type=bind,source=./myKey,target=/myKey) |
| Definir o caminho de dados | --data-path [PATH] |
CAMINHO_DE_DADOS | CAMINHO | /data |
Especifique um diretório para dados. Frequentemente usado com a opção docker run --mount (por exemplo, se o DATA_PATH=/usr/cosmos/data, deve adicionar uma opção como a seguinte ao seu comando docker: --mount type=bind,source=./.local/data,target=/usr/cosmos/data) |
| Especifique o caminho de certificado a ser usado para https | --cert-path [PATH] |
CAMINHO_CERTIFICADO | 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, você adicionaria uma opção como a seguinte à execução do docker: --mount type=bind,source=./mycert.pfx,target=/mycert.pfx) |
| Especifique o segredo de certificado a ser usado para https | N/A | CERT_SECRET | cadeia (de caracteres) | <default secret> |
O segredo para o certificado especificado em CERT_PATH. |
| Definir o nível de log | --log-level [LEVEL] |
Nível de Registo |
quiet, error, warn, info, debug, trace |
info |
A verbosidade dos registos emitidos pelo emulador e pelo explorador de dados. |
| Ativar o exportador OTLP do OpenTelemetry | --enable-otlp |
ENABLE_OTLP_EXPORTER |
true, false |
false |
Ativar a integração com o OpenTelemetry. |
| Ativar exportador de consola | --enable-console |
ENABLE_CONSOLE_EXPORTER |
true, false |
false |
Ativar a saída de dados de telemetria na consola (útil para depuração). |
| Ativar modo verboso | --verbose |
Verboso |
true, false |
false |
Ative o modo verboso para imprimir registos PostgreSQL (pglog) na consola. Útil para depuração. |
| Definir o tamanho do buffer de consulta | --query-buffer-size |
QUERY_BUFFER_SIZE_KB | INT | 4096 (4 MB), máximo 65536 (64 MB) | O tamanho máximo em KB para buffers de resultados de consulta. Aumente este valor se encontrar erros HTTP 500 em consultas grandes. |
| Habilitar o envio de informações de diagnóstico para a Microsoft | --enable-telemetry |
ATIVAR_TELEMETRIA |
true, false |
true |
Permitir o envio de dados de utilização para a Microsoft para nos ajudar a melhorar o emulador. |
Suporte de funcionalidades
Este emulador está em desenvolvimento ativo e em pré-visualização. Como resultado, nem todas as funcionalidades do Azure Cosmos DB são suportadas. No futuro, alguns recursos também deixarão de ser suportados. Esta tabela inclui o estado de vários recursos e seu nível de suporte.
| Caraterística | Support |
|---|---|
| API de lote | ✅ Suportado |
| API em massa | ✅ Suportado |
| Alterar feed | ✅ Suportado |
| Criar e ler documentos com dados utf | ✅ Suportado |
| Criar coleção | ✅ Suportado |
| Conflito por criar coleção duas vezes | ✅ Suportado |
| Criar coleção com política de índice personalizada | ⚠️ No-op |
| Criar coleção com expiração TTL | ✅ Suportado |
| Criar base de dados | ✅ Suportado |
| Conflito ao criar a base de dados duas vezes | ✅ Suportado |
| Criar documento | ✅ Suportado |
| Criar coleção particionada | ✅ Suportado |
| Excluir coleção | ✅ Suportado |
| Excluir banco de dados | ✅ Suportado |
| Eliminar documento | ✅ Suportado |
| Obter e alterar o desempenho da coleção | ⚠️ Ainda não implementado |
| Inserir documento grande | ✅ Suportado |
| Documento de patch | ✅ Suportado |
| Consultar coleção particionada em paralelo | ⚠️ Ainda não implementado |
| Consulta com agregados | ✅ Suportado |
| Consultar e filtrar | ✅ Suportado |
| Consulta com filtro e projeção | ✅ Suportado |
| Consulta com igualdade | ✅ Suportado |
| Consulta com igual em id | ✅ Suportado |
| Consulta com junções | ✅ Suportado |
| Consulta com ordenação por | ✅ Suportado |
| Consulta por ordem para coleção particionada | ✅ Suportado |
| Consulta com ordem por números | ✅ Suportado |
| Consulta com ordem por cadeias de caracteres | ✅ Suportado |
| Consulta com paginação | ✅ Suportado |
| Consulta com operadores de intervalo de datas e horas | ✅ Suportado |
| Consulta com operadores de intervalo em números | ✅ Suportado |
| Consulta com operadores de intervalo em cadeias de caracteres | ✅ Suportado |
| Consulta com junção simples | ✅ Suportado |
| Consulta com matemática de cadeia de caracteres e operadores de matriz | ✅ Suportado |
| Consulta com subdocumentos | ✅ Suportado |
| Consulta com duas junções | ✅ Suportado |
| Consulta com duas junções e filtro | ✅ Suportado |
| Ler a Coleção | ✅ Suportado |
| Ler fluxo de coleção | ⚠️ Ainda não implementado |
| Ler base de dados | ✅ Suportado |
| Ler feed de banco de dados | ⚠️ Ainda não implementado |
| Ler o documento | ✅ Suportado |
| Ler fluxo de documentos | ✅ Suportado |
| Substituir documento | ✅ Suportado |
| Unidades de Solicitação | ⚠️ Ainda não implementado |
| Procedimentos armazenados | ❌ Não previsto |
| Acionadores | ❌ Não previsto |
| UDF | ❌ Não previsto |
| Atualizar coleção | ⚠️ No-op |
| Atualizar documento | ✅ Suportado |
| Endpoint de ofertas | ⚠️ No-op |
| Endpoint dos usuários | ⚠️ No-op |
| Endpoint de permissões | ⚠️ No-op |
| Chaves de Encriptação do Cliente (CEK) | ⚠️ No-op |
Observação
As funcionalidades marcadas No-op aceitam pedidos e devolvem códigos de estado HTTP válidos, mas não executam a operação subjacente. O código não vai falhar, mas não dependas dessas funcionalidades para o comportamento funcional. Políticas de índice personalizadas e atualizações de coleções são aceites para compatibilidade, mas as consultas não são otimizadas por índices personalizados.
Limitações
Além dos recursos ainda não suportados ou não planejados, a lista a seguir inclui as limitações atuais do emulador.
- O SDK .NET para Azure Cosmos DB não suporta execução em massa no emulador.
- Se aparecerem erros HTTP 500 em resultados da consulta grandes, aumente o tamanho do buffer de consulta com o sinalizador
--query-buffer-sizeou 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 esta versão do emulador em modo https, é necessário instalar os seus certificados na sua Java trust store local.
Obter certificado
Em uma bash janela, 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 de sua instalação java onde cacerts o arquivo 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-lhe pedida uma palavra-passe, o valor predefinido é "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 acima novamente:
keytool -cacerts -delete -alias cosmos_emulator
Suporte à OpenTelemetry
OpenTelemetry é uma framework de observabilidade de código aberto que fornece uma coleção de ferramentas, APIs e SDKs para instrumentação, geração, recolha e exportação de dados de telemetria. O Protocolo OpenTelemetry (OTLP) é o protocolo utilizado pela OpenTelemetry para transmitir dados de telemetria entre componentes.
Pode usar o OpenTelemetry com o emulador para monitorizar e rastrear a sua aplicação. O emulador suporta opções de telemetria, que podem ser configuradas através de variáveis de ambiente ou flags de linha de comandos ao executar o contentor Docker.
O emulador exporta as seguintes métricas. Estes estão disponíveis através de qualquer backend de métricas que suportem OTLP e forneçam informações valiosas sobre o desempenho e a saúde da base de dados:
- Taxas de Pedido: Mostra os padrões de tráfego para diferentes tipos de operações
- Tempos de Execução de Consultas: Mede o tempo necessário para executar diferentes consultas
- Utilização de Recursos: Métricas de CPU, utilização de memória e pool de ligações
- Taxas de Erro: Acompanhamento de erros por tipo e ponto final
Observação
O emulador suporta TLS condicional para o exportador OTLP, por isso pode integrar-se com plataformas de observabilidade que requerem ligações seguras.
Instruções detalhadas com exemplos estão disponíveis no repositório do GitHub.
Utilização no fluxo de trabalho de integração contínua
Existem muitos benefícios em usar containers Docker em pipelines CI/CD, especialmente para sistemas com estado como bases 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 dos pipelines CI/CD. Pode consultar este repositório GitHub que fornece exemplos de como usar o emulador como parte de um fluxo de trabalho de GitHub Actions CI para aplicações .NET, Python, Java e Go tanto nas arquiteturas x64 como ARM64 (demonstrado para Linux runner usando ubuntu).
Aqui está um exemplo de um fluxo de trabalho de GitHub Actions CI que mostra como configurar o emulador como um contentor de serviço GitHub Actions como parte de um trabalho no fluxo de trabalho. GitHub trata de iniciar o contentor Docker e destrói-o quando o trabalho termina, sem 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
Este trabalho é executado num agente 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 neste caso o trabalho está a ser executado diretamente na máquina GitHub Actions runner, a etapa Run tests no trabalho pode aceder ao emulador, que está acessível usando localhost:8081 (com 8081 como a porta exposta pelo emulador).
A etapa Exportar Certificado de Emulador do Cosmos DB é específica para aplicativos Java, já que o SDK Java do Azure Cosmos DB atualmente não oferece suporte ao HTTP modo no emulador. A variável de ambiente PROTOCOL é definida para https na secção services e este passo exporta o certificado do emulador e importa-o para a Java keystore. O mesmo se aplica ao .NET também.
Comunicar problemas
Se encontrar problemas ao usar esta versão do emulador, abra um problema no repositório de GitHub (https://github.com/Azure/azure-cosmos-db-emulator-docker) e marque-o com a etiqueta cosmosEmulatorVnextPreview.