E ai galera, tudo bem?

Nesta dica rápida, vamos aprender como utilizar o emulador do Cosmos DB em nosso ambiente de desenvolvimento, facilitando a reprodução do ambiente de produção com maior fidelidade e evitando custos com alocação de recursos no Azure.

Como funciona e diferenças do ambiente no Azure

O emulador do Cosmos DB fornece um ambiente extremamente fiel ao que temos no Azure, tanto que suporta todas as funcionalidades, como criação e consulta de documentos JSON, coleções, execução de stored procedures e triggers. Podemos trabalhar desenvolvendo e testando nossa aplicação com o emulador e implantar no Azure fazendo apenas a mudança do endpoint de conexão.

Apesar de ter todas as funcionalidades, a implementação muda um pouco, sendo que ele utiliza o sistema de arquivos local para persistir os dados e protocolo HTTPS para conectividade, enquanto no Azure temos replicação, latência baixa, ajustes de consistência e outras funcionalidades que não temos no emulador.

Até o momento, o Data Explorer do emulador suporta apenas coleções de SQL API e MongoDB. As APIs Table, Graph e Cassandra ainda não são suportadas no emulador.

Podemos instalar ele de algumas formas:

A instalação no Windows é simples, mas requer privilégios de administrador. Após a instalação, devemos procurar o emulador no menu iniciar para abrir o mesmo.

Ícone do Azure Cosmos DB Emulator em execução na bandeja do sistema.

Após isto, o ícone dele ficará visível na área de notificação do windows durante a execução.

O Data Explorer é aberto automaticamente após a inicialização. Caso tenha fechado e precise acessá-lo novamente, basta clicar com o botão direito no ícone da área de notificação e clicar na opção “Open Data Explorer…”.

Tela do Azure Cosmos DB Emulator aberta no browser.

Para execução via Docker, é tão simples quanto a instalação, podendo ser feita com o script PowerShell a seguir:

Explicando o script de forma rápida, ele obtém a imagem do emulador, cria um diretório local para armazenar os certificados gerados pelo emulador e inicia um container com a imagem, gerando um volume para o diretório criado, para que o emulador armazene de forma persistente os certificados que ele utiliza.

Após o container iniciar, teremos os logs do mesmo apresentados, com uma mensagem para que possamos registrar o certificado HTTPS dele como confiável em nosso sistema:

Logs do emulador iniciando através do Docker

Executando os comandos que destaquei em negrito acima, já farão com que o certificado seja registrado como confiável no ambiente.

Após isto, basta abrir o browser na URL abaixo para acessar o Data Explorer:

https://[endpoint-fornecido-nos-logs-do-docker]/_explorer/index.html

Utilizando o emulador

Vamos ver uma aplicação de demonstração, utilizando o emulador com a API do MongoDB.

A aplicação está disponível em meu Github e pode ser baixada em:

gustavobigardi/demo-emulador-cosmos-db
Contribute to gustavobigardi/demo-emulador-cosmos-db development by creating an account on GitHub.

Ao clonar a aplicação, basta abrir a solução Demo.CosmosDb e alterar a string de conexão “Default” no arquivo appsettings.json para a string do MongoDB apresentada no seu emulador do CostmosDB, conforme imagens abaixo:

Arquivo de configuração do projeto com a connection string a ser alterada.
Data Explorer do emulador com a string de conexão do MongoDb a ser utilizada.

Tendo isto tudo configurado, ao executar a aplicação e chamar no browser o endpoint /api/tarefa, teremos o retorno de um array vazio.

Os endpoints da aplicação para testes são:

  • GET [servidor]/api/tarefa : Listar tarefas;
  • GET [servidor]/api/tarefa/{id} : Obter uma tarefa espcífica;
  • POST [servidor]/api/tarefa : Inserir uma nova tarefa, utilizando como corpo, o formato de JSON abaixo:
{ “titulo”: “”, “descricao”: ””}

Lógico, explorem, estudem, adicionem funcionalidades, como exclusão de registros, novos filtros… Caso tenham dúvidas, podem entrar em contato comigo através dos comentários ou nas redes sociais.

Concluindo

O CosmosDB é um serviço de banco de dados multi-modelo disponibilizado no Azure com uma capacidade incrível de escalabilidade.

Com o emulador, podemos desenvolver sem nos preocupar com a conexão de internet ou mesmo custos do Azure e sem ter que subir diferentes serviços de banco de dados, caso utilizemos mais de um, aproveitando a execução de apenas 1 serviço com seus modelos.

Essa foi uma dica rápida sobre ferramentas para desenvolvimento. Espero que tenham gostado e até a próxima.

Um abraço a todos!