Desenvolver localmente usando o emulador do Azure Cosmos DB
Artigo
Um caso de uso comum para o emulador é servir como um banco de dados de desenvolvimento enquanto você está criando seus aplicativos. Usar o emulador para desenvolvimento pode ajudá-lo a aprender as características de criação e modelagem de dados para um banco de dados como o Azure Cosmos DB sem incorrer em custos de serviço. Além disso, usar o emulador como parte de um fluxo de trabalho de automação pode garantir que você possa executar o mesmo conjunto de testes de integração. Você pode garantir que os mesmos testes sejam executados localmente em sua máquina de desenvolvimento e remotamente em um trabalho de integração contínua.
Puxe a imagem do mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator contêiner Linux usando a mongodb tag do registro do contêiner para o host Docker local.
A variante de contêiner do Docker do emulador não suporta a API do Apache Cassandra.
Inicie o executável do emulador (Microsoft.Azure.Cosmos.Emulator.exe) no %ProgramFiles%\Azure Cosmos DB Emulator caminho. Use estes parâmetros para configurar o emulador:
Description
EnableCassandraEndpoint
Habilita a API para o endpoint Apache Cassandra.
CassandraPort
Número da porta a ser usado para o ponto de extremidade.
A variante de contêiner do Docker do emulador não suporta a API do Apache Gremlin.
Inicie o executável do emulador (Microsoft.Azure.Cosmos.Emulator.exe) no %ProgramFiles%\Azure Cosmos DB Emulator caminho. Use estes parâmetros para configurar o emulador:
Description
EnableGremlinEndpoint
Habilita a API para o endpoint Apache Gremlin.
GremlinPort
Número da porta a ser usado para o ponto de extremidade.
A variante de contêiner do Docker do emulador não suporta a API para Tabela.
Inicie o executável do emulador (Microsoft.Azure.Cosmos.Emulator.exe) no %ProgramFiles%\Azure Cosmos DB Emulator caminho. Use estes parâmetros para configurar o emulador:
Description
EnableTableEndpoint
Habilita a API para o ponto de extremidade Table.
TablePort
Número da porta a ser usado para o ponto de extremidade.
Navegue até https://localhost:8081/_explorer/index.html para acessar o data explorer.
A imagem de contêiner do Docker (Windows) não suporta a API do MongoDB.
Inicie o executável do emulador (Microsoft.Azure.Cosmos.Emulator.exe) no %ProgramFiles%\Azure Cosmos DB Emulator caminho. Use estes parâmetros para configurar o emulador:
Description
EnableMongoDbEndpoint
Habilita a API para o endpoint do MongoDB na versão especificada do MongoDB.
MongoPort
Número da porta a ser usado para o ponto de extremidade.
Para obter mais informações sobre argumentos de linha de comando e versões do MongoDB suportadas pelo emulador, consulte Parâmetros de linha de comando.
O emulador abre automaticamente o explorador de dados usando a URL https://localhost:8081/_explorer/index.html.
Importar o certificado TLS/SSL do emulador
Importe o certificado TLS/SSL do emulador para usar o emulador com seu SDK de desenvolvedor preferido sem desabilitar o TLS/SSL no cliente.
O certificado para o emulador está disponível no caminho _explorer/emulator.pem no contêiner em execução. Use curl para baixar o certificado do contêiner em execução para sua máquina local.
Talvez seja necessário alterar o host (ou endereço IP) e o número da porta se tiver modificado esses valores anteriormente.
Instale o certificado de acordo com o processo normalmente usado para o seu sistema operacional. Por exemplo, no Linux você copiaria o certificado para o /usr/local/share/ca-certificates/ caminho.
Para sistemas linux, regenere o pacote de certificados usando o comando apropriado para sua distribuição Linux.
Para sistemas Linux baseados em Debian (por exemplo, Ubuntu), use:
sudo update-ca-certificates
Para sistemas Linux baseados em Red Hat (por exemplo, CentOS, Fedora), use:
sudo update-ca-trust
Para obter instruções mais detalhadas, consulte a documentação específica do seu sistema operacional.
O certificado para o emulador está disponível na pasta C:\CosmosDB.Emulator\bind-mount no contêiner em execução. A pasta também contém um script para instalar automaticamente o certificado.
Use docker cp para copiar a pasta inteira para sua máquina local.
A instalação local do emulador do Windows importa automaticamente os certificados TLS/SSL. Não é necessária qualquer outra medida.
Conectar-se ao emulador a partir do SDK
Cada SDK inclui uma classe de cliente normalmente usada para conectar o SDK à sua conta do Azure Cosmos DB. Usando as credenciais do emulador, você pode conectar o SDK à instância do emulador.
var item = new
{
id = "68719518371",
name = "Kiama classic surfboard"
};
await container.UpsertItemAsync(item);
Execute o aplicativo .NET.
dotnet run
Aviso
Se você receber um erro SSL, talvez seja necessário desativar o TLS/SSL para seu aplicativo. Isso geralmente ocorre se você estiver desenvolvendo em sua máquina local, usando o emulador do Azure Cosmos DB em um contêiner, e não tiver importado o certificado SSL do contêiner. Para resolver isso, configure as opções do cliente para desabilitar a validação TLS/SSL antes de criar o cliente:
Se você receber um erro SSL, talvez seja necessário desabilitar o TLS/SSL para seu aplicativo. Isso geralmente ocorre se você estiver desenvolvendo em sua máquina local, usando o emulador do Azure Cosmos DB em um contêiner, e não tiver importado o certificado SSL do contêiner. Para resolver isso, configure o aplicativo para desabilitar a validação TLS/SSL antes de criar o cliente:
import urllib3
urllib3.disable_warnings()
Se você ainda estiver enfrentando erros de SSL, é possível que o Python esteja recuperando os certificados de um armazenamento de certificados diferente. Para determinar o caminho onde o Python está procurando os certificados, siga estas etapas:
Importante
Se você estiver usando um ambiente virtual Python (venv), certifique-se de que ele esteja ativado antes de executar os comandos!
Abra um terminal
Inicie o interpretador Python digitando python ou python3, dependendo da sua versão do Python.
No interpretador Python, execute os seguintes comandos:
from requests.utils import DEFAULT_CA_BUNDLE_PATH
print(DEFAULT_CA_BUNDLE_PATH)
Dentro de um ambiente virtual, o caminho pode ser (pelo menos no Ubuntu):
Fora de um ambiente virtual, o caminho pode ser (pelo menos no Ubuntu):
/etc/ssl/certs/ca-certificates.crt
Depois de identificar o DEFAULT_CA_BUNDLE_PATH, abra um novo terminal e execute os seguintes comandos para acrescentar o certificado do emulador ao pacote de certificados:
Importante
Se DEFAULT_CA_BUNDLE_PATH variável apontar para um diretório do sistema, você poderá encontrar um erro "Permissão negada". Nesse caso, você precisará executar os comandos com privilégios elevados (como root). Além disso, você precisará atualizar e regenerar o pacote de certificados depois de executar os comandos fornecidos.
# 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 você receber um erro SSL, talvez seja necessário desativar o TLS/SSL para seu aplicativo. Isso geralmente ocorre se você estiver desenvolvendo em sua máquina local, usando o emulador do Azure Cosmos DB em um contêiner, e não tiver importado o certificado SSL do contêiner. Para resolver isso, configure o aplicativo para desabilitar a validação TLS/SSL antes de criar o cliente:
Adicione um bloco using para o MongoDB.Driver namespace.
using MongoDB.Driver;
Crie uma nova instância de uso das credenciais do MongoClient emulador.
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"})
Use update_one para criar um novo item no contêiner.
Se você receber um erro SSL, talvez seja necessário desativar o TLS/SSL para seu aplicativo. Isso geralmente ocorre se você estiver desenvolvendo em sua máquina local, usando o emulador do Azure Cosmos DB em um contêiner, e não tiver importado o certificado SSL do contêiner. Para resolver isso, configure o aplicativo para desabilitar a validação TLS/SSL antes de criar o cliente:
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());
Crie um novo item na tabela usando ExecuteAsync. Use Bind para atribuir propriedades ao item.
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);
Execute o aplicativo .NET.
dotnet run
Use o driver Apache Cassandra Python para se conectar ao emulador a partir de um aplicativo Python.
Importe PROTOCOL_TLS_CLIENT, SSLContexte CERT_NONE do ssl módulo. Em seguida, importe Cluster do cassandra.cluster módulo. Finalmente, importe PlainTextAuthProvider do cassandra.auth módulo.
from ssl import PROTOCOL_TLS_CLIENT, SSLContext, CERT_NONE
from cassandra.cluster import Cluster
from cassandra.auth import PlainTextAuthProvider
Crie uma nova variável de contexto TLS/SSL usando SSLContexto . Configure o contexto para não verificar o certificado autoassinado do emulador.
Crie um novo espaço de teclas e uma nova tabela usando session.executeo .
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)"
)
Use session.execute para criar um novo item na tabela.
Use o driver Apache Cassandra Node.js para usar o emulador de um aplicativo Node.js/JavaScript.
Comece em uma pasta vazia.
Inicialize um novo módulo.
npm init es6 --yes
Instale o cassandra-driver pacote a partir do Node Package Manager.
npm install --save cassandra-driver
Crie o arquivo app.js .
Importe o tipo e auth o Client namespace do cassandra-driver módulo.
import { Client, auth } from 'cassandra-driver'
Use PlainTextAuthProvider para criar um novo objeto para as credenciais do emulador. Use Client para se conectar ao emulador usando as credenciais.
const credentials = new auth.PlainTextAuthProvider(
'localhost',
'C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw=='
)
const client = new Client({
contactPoints: [
'localhost:10350'
],
authProvider: credentials,
localDataCenter: 'South Central US'
})
Use execute para executar um comando do lado do servidor para criar um espaço de chave e uma tabela.
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)'
)
Use execute novamente para criar um novo item com parâmetros.
Se você receber um erro SSL, talvez seja necessário desativar o TLS/SSL para seu aplicativo. Isso geralmente ocorre se você estiver desenvolvendo em sua máquina local, usando o emulador do Azure Cosmos DB em um contêiner, e não tiver importado o certificado SSL do contêiner. Para resolver isso, configure o cliente para desabilitar a validação TLS/SSL:
Antes de iniciar, a API para Apache Gremlin requer que você crie seus recursos no emulador. Crie um banco de dados chamado db1 e um contêiner chamado coll1. As configurações de taxa de transferência são irrelevantes para este guia e podem ser definidas tão baixo quanto você gostaria.
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()
);
Use o driver Apache Gremlin Node.js para usar o emulador de um aplicativo Node.js/JavaScript.
Comece em uma pasta vazia.
Inicialize um novo módulo.
npm init es6 --yes
Instale o gremlin pacote a partir do Node Package Manager.
npm install --save gremlin
Crie o arquivo app.js .
Importe o gremlin módulo.
import gremlin from 'gremlin'
Use PlainTextSaslAuthenticator para criar um novo objeto para as credenciais do emulador. Use Client para se conectar ao emulador usando as credenciais.
Crie uma nova instância de uso das credenciais do TableServiceClient emulador.
var serviceClient = new TableServiceClient(
connectionString: "DefaultEndpointsProtocol=http;AccountName=localhost;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==;TableEndpoint=http://localhost:8902/;"
);
Se você receber um erro SSL, talvez seja necessário desativar o TLS/SSL para seu aplicativo. Isso geralmente ocorre se você estiver desenvolvendo em sua máquina local, usando o emulador do Azure Cosmos DB em um contêiner, e não tiver importado o certificado SSL do contêiner. Para resolver isso, configure o cliente para desabilitar a validação TLS/SSL:
Usar o emulador em um fluxo de trabalho de CI de ações do GitHub
Para executar uma carga de trabalho de integração contínua que valida automaticamente seu aplicativo, use o emulador do Azure Cosmos DB com um conjunto de testes da estrutura de sua escolha. O emulador do Azure Cosmos DB está pré-instalado na windows-latest variante dos corredores hospedados do GitHub Action.
Execute um conjunto de testes usando o driver de teste interno para .NET e uma estrutura de teste como MSTest, NUnit ou XUnit.
Valide se o conjunto de testes de unidade para seu aplicativo funciona conforme o esperado.
dotnet test
Crie um novo fluxo de trabalho em seu repositório GitHub em um arquivo chamado .github/workflows/ci.yml.
Adicione um trabalho ao seu fluxo de trabalho para iniciar o emulador do Azure Cosmos DB usando o PowerShell e executar seu pacote de teste de unidade.
name: Continuous Integration
on:
push:
branches:
- main
jobs:
unit_tests:
name: Run .NET unit tests
runs-on: windows-latest
steps:
- name: Checkout (GitHub)
uses: actions/checkout@v3
- name: Start Azure Cosmos DB emulator
run: |
Write-Host "Launching Cosmos DB Emulator"
Import-Module "$env:ProgramFiles\Azure Cosmos DB Emulator\PSModules\Microsoft.Azure.CosmosDB.Emulator"
Start-CosmosDbEmulator
- name: Run .NET tests
run: dotnet test
Nota
Inicie o emulador a partir da linha de comando usando vários argumentos ou comandos do PowerShell. Para obter mais informações, consulte argumentos de linha de comando do emulador.
Teste seu aplicativo Python e operações de banco de dados usando pytesto .
Valide se o conjunto de testes de unidade para seu aplicativo funciona conforme o esperado.
pip install -U pytest
pytest
Crie um novo fluxo de trabalho em seu repositório GitHub em um arquivo chamado .github/workflows/ci.yml.
Adicione um trabalho ao seu fluxo de trabalho para iniciar o emulador do Azure Cosmos DB usando o PowerShell e executar seu pacote de teste de unidade.
name: Continuous Integration
on:
push:
branches:
- main
jobs:
unit_tests:
name: Run Python unit tests
runs-on: windows-latest
steps:
- name: Checkout (GitHub)
uses: actions/checkout@v3
- name: Start Azure Cosmos DB emulator
run: |
Write-Host "Launching Cosmos DB Emulator"
Import-Module "$env:ProgramFiles\Azure Cosmos DB Emulator\PSModules\Microsoft.Azure.CosmosDB.Emulator"
Start-CosmosDbEmulator
- name: Install test runner
run: pip install pytest
- name: Run Python tests
run: pytest
Nota
Inicie o emulador a partir da linha de comando usando vários argumentos ou comandos do PowerShell. Para obter mais informações, consulte argumentos de linha de comando do emulador.
Use mocha para testar seu aplicativo Node.js e suas modificações de banco de dados.
Valide se o conjunto de testes de unidade para seu aplicativo funciona conforme o esperado.
npm install --global mocha
mocha
Crie um novo fluxo de trabalho em seu repositório GitHub em um arquivo chamado .github/workflows/ci.yml.
Adicione um trabalho ao seu fluxo de trabalho para iniciar o emulador do Azure Cosmos DB usando o PowerShell e executar seu pacote de teste de unidade.
name: Continuous Integration
on:
push:
branches:
- main
jobs:
unit_tests:
name: Run Node.js unit tests
runs-on: windows-latest
steps:
- name: Checkout (GitHub)
uses: actions/checkout@v3
- name: Start Azure Cosmos DB emulator
run: |
Write-Host "Launching Cosmos DB Emulator"
Import-Module "$env:ProgramFiles\Azure Cosmos DB Emulator\PSModules\Microsoft.Azure.CosmosDB.Emulator"
Start-CosmosDbEmulator
- name: Install test runner
run: npm install --global mocha
- name: Run Node.js tests
run: mocha
Nota
Inicie o emulador a partir da linha de comando usando vários argumentos ou comandos do PowerShell. Para obter mais informações, consulte argumentos de linha de comando do emulador.