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 características da criação e modelação de dados para uma base 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.
Pré-requisitos
-
.NET 6 ou posterior, Node.js v20 ou posterior, ou Python 3.7 ou posterior
- Certifique-se de que todos os executáveis necessários estejam disponíveis no seu espaço
PATH.
-
emulador de Windows
- Windows Server 2016, 2019, Windows 10 ou Windows 11 de 64 bits.
- Requisitos mínimos de hardware:
- 2 GB de RAM
- 10 GB de espaço disponível no disco rígido
-
Emulador do Docker
Instalar o emulador
Existem várias variações do emulador e cada variação tem um processo de instalação relativamente sem atrito.
Para começar, obtenha a variante Linux da imagem do contentor no registo de contentores Microsoft (MCR).
Puxe a mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator imagem do contêiner Linux do registro do contêiner para o host Docker local.
docker pull mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:latest
Verifique se a imagem do emulador está disponível no host Docker local.
docker images
Para começar, obtenha a variante Windows da imagem do contentor do Microsoft Container Registry (MCR).
Obter a imagem do contentor mcr.microsoft.com/cosmosdb/windows/azure-cosmos-emulator Windows a partir do registo do contentor para o host local do Docker.
docker pull mcr.microsoft.com/cosmosdb/windows/azure-cosmos-emulator
Verifique se a imagem do emulador está disponível no host Docker local.
docker images
Para começar, descarregue e instale a versão mais recente do Azure Cosmos DB Emulator no seu computador local.
Descarregue o emulador Azure Cosmos DB.
Execute o instalador em sua máquina local com privilégios administrativos.
O emulador instala automaticamente os certificados de desenvolvedor apropriados e configura regras de firewall em sua máquina local.
Para começar, obtenha a variante Linux da imagem do contentor no registo de contentores Microsoft (MCR).
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.
docker pull mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:latest
Verifique se a imagem do emulador está disponível no host Docker local.
docker images
A imagem do contentor do Docker (Windows) não suporta a API do MongoDB.
Para começar, descarregue e instale a versão mais recente do Azure Cosmos DB Emulator no seu computador local.
Descarregue o emulador Azure Cosmos DB.
Execute o instalador em sua máquina local com privilégios administrativos.
O emulador instala automaticamente os certificados de desenvolvedor apropriados e configura regras de firewall em sua máquina local.
A variante do contentor Docker (Linux ou Windows) do emulador não suporta a API para Apache Cassandra, API para Apache Gremlin ou API para Table.
Para começar, descarregue e instale a versão mais recente do Azure Cosmos DB Emulator no seu computador local.
Descarregue o emulador Azure Cosmos DB.
Execute o instalador em sua máquina local com privilégios administrativos.
O emulador instala automaticamente os certificados de desenvolvedor apropriados e configura regras de firewall em sua máquina local.
Iniciar o emulador
Uma vez baixado, inicie o emulador com a API especificada ativada.
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 caminho %ProgramFiles%\Azure Cosmos DB Emulator. Use estes parâmetros para configurar o emulador:
|
Description |
EnableCassandraEndpoint |
Habilita a API para o endpoint Apache Cassandra. |
CassandraPort |
Número da porta a utilizar para o endpoint. |
Microsoft.Azure.Cosmos.Emulator.exe /EnableCassandraEndpoint /CassandraPort=65200
Observação
Para obter mais informações sobre argumentos de linha de comando, consulte parâmetros de linha de comando.
O emulador abre automaticamente o explorador de dados usando a URL https://localhost:8081/_explorer/index.html.
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 caminho %ProgramFiles%\Azure Cosmos DB Emulator. Use estes parâmetros para configurar o emulador:
|
Description |
EnableGremlinEndpoint |
Habilita a API para o endpoint Apache Gremlin. |
GremlinPort |
Número da porta a utilizar para o endpoint. |
Microsoft.Azure.Cosmos.Emulator.exe /EnableGremlinEndpoint /GremlinPort=65400
Observação
Para obter mais informações sobre argumentos de linha de comando, consulte parâmetros de linha de comando.
O emulador abre automaticamente o explorador de dados usando a URL https://localhost:8081/_explorer/index.html.
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 caminho %ProgramFiles%\Azure Cosmos DB Emulator. Use estes parâmetros para configurar o emulador:
|
Description |
EnableTableEndpoint |
Habilita a API para o endpoint de Tabela. |
TablePort |
Número da porta a utilizar para o endpoint. |
Microsoft.Azure.Cosmos.Emulator.exe /EnableTableEndpoint /TablePort=65500
Observação
Para obter mais informações sobre argumentos de linha de comando, consulte parâmetros de linha de comando.
O emulador abre automaticamente o explorador de dados usando a URL https://localhost:8081/_explorer/index.html.
Execute um novo contêiner usando a imagem do contêiner e a seguinte configuração:
|
Description |
AZURE_COSMOS_EMULATOR_PARTITION_COUNT
(Opcional) |
Especifique o número de partições a serem usadas. |
AZURE_COSMOS_EMULATOR_ENABLE_DATA_PERSISTENCE
(Opcional) |
Habilite a persistência de dados entre as execuções do emulador. |
AZURE_COSMOS_EMULATOR_IP_ADDRESS_OVERRIDE
(Opcional) |
Substitua o endereço IP padrão do emulador. |
Para sistemas Linux, use:
docker run \
--publish 8081:8081 \
--publish 10250-10255:10250-10255 \
--name linux-emulator \
--detach \
mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:latest
Para sistemas Windows, utilize:
$parameters = @(
"--publish", "8081:8081"
"--publish", "10250-10255:10250-10255"
"--name", "windows-emulator"
"--detach"
)
docker run @parameters mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:latest
Navegue até https://localhost:8081/_explorer/index.html para acessar o data explorer.
Criar um novo diretório para a montagem de ligação
Execute um novo contêiner usando a imagem do contêiner.
$parameters = @(
"--publish", "8081:8081"
"--publish", "10250-10255:10250-10255"
"--name", "windows-emulator"
"--detach"
)
docker run @parameters mcr.microsoft.com/cosmosdb/windows/azure-cosmos-emulator
Navegue até https://localhost:8081/_explorer/index.html para acessar o data explorer.
Inicie o emulador selecionando a aplicação no menu Windows Start.
Em alternativa, podes iniciar o executável do emulador (Microsoft.Azure.Cosmos.Emulator.exe) no caminho %ProgramFiles%\Azure Cosmos DB Emulator.
Além disso, você pode iniciar o emulador a partir da linha de comando. Use estes parâmetros para configurar o emulador:
Microsoft.Azure.Cosmos.Emulator.exe /Port=65000
Observação
Para obter mais informações sobre argumentos de linha de comando, consulte parâmetros de linha de comando.
O emulador abre automaticamente o explorador de dados usando a URL https://localhost:8081/_explorer/index.html.
Execute um novo contêiner usando a imagem do contêiner e a seguinte configuração:
|
Description |
AZURE_COSMOS_EMULATOR_ENABLE_MONGODB_ENDPOINT |
Especifique a versão do endpoint do MongoDB a ser usada. Os pontos de extremidade suportados incluem: 3.2, 3.6ou 4.0. |
AZURE_COSMOS_EMULATOR_PARTITION_COUNT
(Opcional) |
Especifique o número de partições a serem usadas. |
AZURE_COSMOS_EMULATOR_ENABLE_DATA_PERSISTENCE
(Opcional) |
Habilite a persistência de dados entre as execuções do emulador. |
AZURE_COSMOS_EMULATOR_IP_ADDRESS_OVERRIDE
(Opcional) |
Substitua o endereço IP padrão do emulador. |
Para sistemas Linux, use:
docker run \
--publish 8081:8081 \
--publish 10250:10250 \
--env AZURE_COSMOS_EMULATOR_ENABLE_MONGODB_ENDPOINT=4.0 \
--name linux-emulator \
--detach \
mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:mongodb
Para sistemas Windows, utilize:
$parameters = @(
"--publish", "8081:8081"
"--publish", "10250:10250"
"--env", "AZURE_COSMOS_EMULATOR_ENABLE_MONGODB_ENDPOINT=4.0"
"--name", "windows-emulator"
"--detach"
)
docker run @parameters mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:mongodb
Navegue até https://localhost:8081/_explorer/index.html para acessar o data explorer.
A imagem do contentor do Docker (Windows) não suporta a API do MongoDB.
Inicie o executável do emulador (Microsoft.Azure.Cosmos.Emulator.exe) no caminho %ProgramFiles%\Azure Cosmos DB Emulator. 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 utilizar para o endpoint. |
Microsoft.Azure.Cosmos.Emulator.exe /EnableMongoDbEndpoint=4.0 /MongoPort=65200
Observação
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.
A variante do contentor Docker (Linux ou Windows) do emulador não suporta a API para Apache Cassandra, API para Apache Gremlin ou API para Table.
A instalação local do emulador no Windows importa automaticamente os certificados TLS/SSL. Não é necessária qualquer outra medida.
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.
Obtenha o certificado do contêiner em execução.
Para sistemas Linux, use:
curl --insecure https://localhost:8081/_explorer/emulator.pem > ~/emulatorcert.crt
Para sistemas Windows, utilize:
$parameters = @{
Uri = 'https://localhost:8081/_explorer/emulator.pem'
Method = 'GET'
OutFile = 'emulatorcert.crt'
SkipCertificateCheck = $True
}
Invoke-WebRequest @parameters
Regenere o pacote de certificados usando o comando apropriado para seu sistema operacional.
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 sistemas Windows, utilize:
certutil -f -addstore "Root" ~/emulatorcert.crt
Para obter instruções mais detalhadas, consulte a documentação específica do seu sistema operacional.
A imagem do contentor do Docker (Windows) não suporta a API do MongoDB.
A instalação local do emulador no Windows importa automaticamente os certificados TLS/SSL. Não é necessária qualquer outra medida.
O certificado para o emulador está disponível no caminho /_explorer/emulator.pem no contêiner em execução.
Transfira o certificado do contentor em execução para o seu computador local.
Para sistemas Linux, use:
curl --insecure https://localhost:8081/_explorer/emulator.pem > ~/emulatorcert.crt
Para sistemas Windows, utilize:
$parameters = @{
Uri = 'https://localhost:8081/_explorer/emulator.pem'
Method = 'GET'
OutFile = 'emulatorcert.crt'
SkipCertificateCheck = $True
}
Invoke-WebRequest @parameters
Observação
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, use:
cp ~/emulatorcert.crt /usr/local/share/ca-certificates/
Para sistemas Windows, utilize:
$parameters = @{
FilePath = 'emulatorcert.crt'
CertStoreLocation = 'Cert:\CurrentUser\Root'
}
Import-Certificate @parameters
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.
docker cp windows-emulator:C:\CosmosDB.Emulator\bind-mount .
Executar o script importcert.ps1 na pasta.
.\bind-mount\importcert.ps1
A instalação local do emulador no 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 cliente normalmente usada para ligar o SDK à sua conta Azure Cosmos DB. Usando as credenciais do emulador, você pode conectar o SDK à instância do emulador.
Use a API Azure Cosmos DB para NoSQL .NET SDK para se ligar ao emulador a partir de uma aplicação .NET.
Comece em uma pasta vazia.
Criar uma nova aplicação de consola .NET
dotnet new console
Adicione o pacote Microsoft.Azure.Cosmos da NuGet.
dotnet add package Microsoft.Azure.Cosmos
Abra o arquivo Program.cs .
Exclua qualquer conteúdo existente no arquivo.
Adicione um bloco de uso para o espaço de nomes Microsoft.Azure.Cosmos.
using Microsoft.Azure.Cosmos;
Crie uma nova instância do CosmosClient usando as credenciais do emulador.
using CosmosClient client = new(
accountEndpoint: "https://localhost:8081/",
authKeyOrResourceToken: "C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw=="
);
Crie um novo banco de dados e contêiner usando CreateDatabaseIfNotExistsAsync e CreateContainerIfNotExistsAsync.
Database database = await client.CreateDatabaseIfNotExistsAsync(
id: "cosmicworks",
throughput: 400
);
Container container = await database.CreateContainerIfNotExistsAsync(
id: "products",
partitionKeyPath: "/id"
);
Crie um novo item no contêiner usando UpsertItemAsync.
var item = new
{
id = "68719518371",
name = "Kiama classic surfboard"
};
await container.UpsertItemAsync(item);
Executa a aplicação .NET.
dotnet run
Warning
Se você receber um erro SSL, talvez seja necessário desativar o TLS/SSL para seu aplicativo. Isto ocorre frequentemente se estiver a desenvolver na sua máquina local, usando o emulador de Azure Cosmos DB num contentor e não importou o certificado SSL do contentor. Para resolver isso, configure as opções do cliente para desabilitar a validação TLS/SSL antes de criar o cliente:
CosmosClientOptions options = new ()
{
HttpClientFactory = () => new HttpClient(new HttpClientHandler()
{
ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator
}),
ConnectionMode = ConnectionMode.Gateway,
};
using CosmosClient client = new(
...,
...,
clientOptions: options
);
Tip
Consulte o guia para desenvolvedores .NET para mais operações que pode realizar usando o SDK .NET.
Use a API do Azure Cosmos DB para NoSQL Python SDK para conectar-se ao emulador a partir de uma aplicação Python.
Comece em uma pasta vazia.
Importa o pacote azure-cosmos do Python Package Index.
pip install azure-cosmos
Crie o ficheiro app.py.
Importar CosmosClient e PartitionKey do módulo azure.cosmos.
from azure.cosmos import CosmosClient, PartitionKey
Crie um novo CosmosClient usando as credenciais do emulador.
client = CosmosClient(
url="<https://localhost:8081>",
credential=(
"C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGG"
"yPMbIZnqyMsEcaGQy67XIw/Jw=="
),
)
Crie um novo banco de dados e contêiner usando create_database_if_not_exists e create_container_if_not_exists.
database = client.create_database_if_not_exists(
id="cosmicworks",
offer_throughput=400,
)
container = database.create_container_if_not_exists(
id="products",
partition_key=PartitionKey(
path="/id",
),
)
Use upsert_item para criar um novo item no contêiner.
item = {"id": "68719518371", "name": "Kiama classic surfboard"}
container.upsert_item(item)
Executa a aplicação Python.
python app.py
Warning
Se você receber um erro SSL, talvez seja necessário desabilitar o TLS/SSL para seu aplicativo. Isto ocorre frequentemente se estiver a desenvolver na sua máquina local, usando o emulador de Azure Cosmos DB num contentor e não importou o certificado SSL do contentor. Para resolver isso, configure o aplicativo para desabilitar a validação TLS/SSL antes de criar o cliente:
import urllib3
urllib3.disable_warnings()
Se ainda estiveres a enfrentar erros SSL, é possível que o Python esteja a recuperar os certificados de uma loja de certificados diferente. Para determinar o caminho onde o Python procura os certificados, siga estes passos:
Importante
Se estiver a usar um ambiente Python virtual (venv), certifique-se de que está ativado antes de executar os comandos!
Abra um terminal
Começa o interpretador de Python escrevendo python ou python3, dependendo da tua versão de 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):
path/to/venv/lib/pythonX.XX/site-packages/certifi/cacert.pem
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 a variável DEFAULT_CA_BUNDLE_PATH 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
Use a API Azure Cosmos DB para NoSQL Node.js SDK para se ligar ao emulador a partir de uma aplicação Node.js/JavaScript.
Comece em uma pasta vazia.
Inicialize um novo módulo.
npm init es6 --yes
Instala o pacote @azure/cosmos a partir do Node Gestor de Pacotes.
npm install --save @azure/cosmos
Crie o ficheiro app.js.
Importe o tipo CosmosClient do módulo @azure/cosmos.
import { CosmosClient } from '@azure/cosmos'
Use CosmosClient para criar uma nova instância de cliente usando as credenciais do emulador.
const cosmosClient = new CosmosClient({
endpoint: 'https://localhost:8081/',
key: 'C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw=='
})
Use Databases.createIfNotExists e Containers.createIfNotExists para criar um banco de dados e um container.
const { database } = await cosmosClient.databases.createIfNotExists({
id: 'cosmicworks',
throughput: 400
})
const { container } = await database.containers.createIfNotExists({
id: 'products',
partitionKey: {
paths: [
'/id'
]
}
})
Upsert um novo item usando Items.upsert.
const item = {
id: '68719518371',
name: 'Kiama classic surfboard'
}
container.items.upsert(item)
Execute o aplicativo Node.js.
node app.js
Warning
Se você receber um erro SSL, talvez seja necessário desativar o TLS/SSL para seu aplicativo. Isto ocorre frequentemente se estiver a desenvolver na sua máquina local, usando o emulador de Azure Cosmos DB num contentor e não importou o certificado SSL do contentor. Para resolver isso, configure o aplicativo para desabilitar a validação TLS/SSL antes de criar o cliente:
process.env.NODE_TLS_REJECT_UNAUTHORIZED = 0
Use o driver MongoDB .NET para se ligar ao emulador a partir de uma aplicação .NET.
Comece em uma pasta vazia.
Criar uma nova aplicação de consola .NET
dotnet new console
Adicione o pacote MongoDB.Driver da NuGet.
dotnet add package MongoDB.Driver
Abra o arquivo Program.cs .
Exclua qualquer conteúdo existente no arquivo.
Adicione um bloco de uso para o espaço de nomes MongoDB.Driver.
using MongoDB.Driver;
Crie uma nova instância do MongoClient usando as credenciais do emulador.
var client = new MongoClient(
"mongodb://localhost:C2y6yDjf5%2FR%2Bob0N8A7Cgv30VRDJIWEHLM%2B4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw%2FJw%3D%3D@localhost:10255/admin?ssl=true&retrywrites=false"
);
Obtenha o banco de dados e o contêiner usando GetDatabase e GetCollection<>.
var database = client.GetDatabase("cosmicworks");
var collection = database.GetCollection<dynamic>("products");
Crie um novo item no XXX usando InsertOneAsync.
var item = new
{
name = "Kiama classic surfboard"
};
await collection.InsertOneAsync(item);
Executa a aplicação .NET.
dotnet run
Usa o driver Python MongoDB para te ligares ao emulador a partir de uma aplicação Python.
Comece em uma pasta vazia.
Importa o pacote pymongo do Python Package Index.
pip install pymongo
Crie o ficheiro app.py.
Importe os módulos os, sys e pymongo.
import pymongo
Crie um novo MongoClient usando as credenciais do emulador.
client = pymongo.MongoClient(
host=(
"mongodb://localhost:C2y6yDjf5%2FR%2Bob0N8A7Cgv30VRDJIWEHLM%2B4QDU5DE2"
"nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw%2FJw%3D%3D@localhost:10255/a"
"dmin?ssl=true"
),
tls=True,
)
Crie um novo banco de dados e contêiner usando list_database_names e list_collection_names junto com os CreateDatabase comandos e CreateCollection personalizados.
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.
item = {"id": "68719518371", "name": "Kiama classic surfboard"}
collection.update_one(
filter={"id": item["id"]}, update={"$set": item}, upsert=True
)
Executa a aplicação Python.
python app.py
Utilize o driver MongoDB Node.js para se conectar ao emulador a partir de uma aplicação Node.js/JavaScript.
Comece em uma pasta vazia.
Inicialize um novo módulo.
npm init es6 --yes
Instala o pacote mongodb a partir do Node Gestor de Pacotes.
npm install --save mongodb
Crie o ficheiro app.js.
Importe o tipo MongoClient do módulo mongodb.
import { MongoClient } from 'mongodb'
Use MongoClient para criar uma nova instância de cliente usando as credenciais do emulador. Use connect para se conectar ao emulador.
const client = new MongoClient(
'mongodb://localhost:C2y6yDjf5%2FR%2Bob0N8A7Cgv30VRDJIWEHLM%2B4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw%2FJw%3D%3D@localhost:10255/admin?ssl=true&retrywrites=false'
)
await client.connect()
Use db e collection para criar um banco de dados e um container.
const database = client.db('cosmicworks')
const collection = database.collection('products')
Crie um novo item usando insertOne.
const item = {
name: 'Kiama classic surfboard'
}
await collection.insertOne(item)
Execute o aplicativo Node.js.
node app.js
Warning
Se você receber um erro SSL, talvez seja necessário desativar o TLS/SSL para seu aplicativo. Isto ocorre frequentemente se estiver a desenvolver na sua máquina local, usando o emulador de Azure Cosmos DB num contentor e não importou o certificado SSL do contentor. Para resolver isso, configure o aplicativo para desabilitar a validação TLS/SSL antes de criar o cliente:
const client = new MongoClient(
...,
{ tlsAllowInvalidCertificates: true }
)
Usa o driver .NET Apache Cassandra para te ligares ao emulador a partir de uma aplicação .NET.
Comece em uma pasta vazia.
Criar uma nova aplicação de consola .NET
dotnet new console
Adicione o pacote CassandraCSharpDriver da NuGet.
dotnet add package CassandraCSharpDriver
Abra o arquivo Program.cs .
Exclua qualquer conteúdo existente no arquivo.
Adicione um bloco de uso para o espaço de nomes Cassandra.
using Cassandra;
Crie uma nova instância do Cluster usando as credenciais do emulador. Crie uma nova sessão usando Connect.
var options = new SSLOptions(
sslProtocol: System.Security.Authentication.SslProtocols.Tls12,
checkCertificateRevocation: true,
remoteCertValidationCallback: (_, _, _, policyErrors) => policyErrors == System.Net.Security.SslPolicyErrors.None);
using var cluster = Cluster.Builder()
.WithCredentials(
username: "localhost",
password: "C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw=="
)
.WithPort(
port: 10350
)
.AddContactPoint(
address: "localhost"
)
.WithSSL(
sslOptions: options
)
.Build();
using var session = cluster.Connect();
Crie um novo banco de dados e contêiner usando PrepareAsync e ExecuteAsync.
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);
Executa a aplicação .NET.
dotnet run
Usa o driver Python Apache Cassandra para te ligares ao emulador a partir de uma aplicação Python.
Comece em uma pasta vazia.
Importa o pacote cassandra-driver do Python Package Index.
pip install cassandra-driver
Crie o ficheiro app.py.
Importe PROTOCOL_TLS_CLIENT, SSLContext, e CERT_NONE do módulo ssl. Em seguida, importe Cluster do cassandra.cluster módulo. Finalmente, importe PlainTextAuthProvider do módulo cassandra.auth.
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.
ssl_context = SSLContext(PROTOCOL_TLS_CLIENT)
ssl_context.check_hostname = False
ssl_context.verify_mode = CERT_NONE
Crie um novo session usando as credenciais do emulador, PlainTextAuthProvider, Clustere cluster.connect().
auth_provider = PlainTextAuthProvider(
username="localhost",
password=(
"C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnq"
"yMsEcaGQy67XIw/Jw=="
),
)
cluster = Cluster(
["localhost"],
port="10350",
auth_provider=auth_provider,
ssl_context=ssl_context,
)
session = cluster.connect()
Crie um novo keyspace e uma nova tabela usando session.execute.
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.
item = {"id": "68719518371", "name": "Kiama classic surfboard"}
session.execute(
"INSERT INTO cosmicworks.products (id, name) VALUES (%s, %s)",
[item["id"], item["name"]],
)
Executa a aplicação Python.
python app.py
Use o Apache Cassandra Node.js driver para utilizar o emulador a partir de uma aplicação Node.js/JavaScript.
Comece em uma pasta vazia.
Inicialize um novo módulo.
npm init es6 --yes
Instala o pacote cassandra-driver a partir do Node Gestor de Pacotes.
npm install --save cassandra-driver
Crie o ficheiro app.js.
Importe o Client tipo e auth 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 keyspace 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.
const item = {
id: '68719518371',
name: 'Kiama classic surfboard'
}
await client.execute(
'INSERT INTO cosmicworks.products (id, name) VALUES (?, ?)',
[
item.id,
item.name
]
)
Execute o aplicativo Node.js.
node app.js
Warning
Se você receber um erro SSL, talvez seja necessário desativar o TLS/SSL para seu aplicativo. Isto ocorre frequentemente se estiver a desenvolver na sua máquina local, usando o emulador de Azure Cosmos DB num contentor e não importou o certificado SSL do contentor. Para resolver isso, configure o cliente para desabilitar a validação TLS/SSL:
const client = new Client({
...,
...,
...,
sslOptions: {
rejectUnauthorized: false
}
})
Importante
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.
Use o driver .NET Apache Gremlin para se ligar ao emulador a partir de uma aplicação .NET.
Comece em uma pasta vazia.
Criar uma nova aplicação de consola .NET
dotnet new console
Adicione o pacote Gremlin.Net da NuGet.
dotnet add package Gremlin.Net
Abra o arquivo Program.cs .
Exclua qualquer conteúdo existente no arquivo.
Adicione um bloco de uso para o espaço de nomes Gremlin.Net.Driver.
using Gremlin.Net.Driver;
Crie uma nova instância de GremlinServer e GremlinClient usando as credenciais do emulador.
var server = new GremlinServer(
hostname: "localhost",
port: 65400,
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()
);
Limpe o gráfico usando SubmitAsync.
await client.SubmitAsync(
requestScript: "g.V().drop()"
);
Use SubmitAsync novamente para adicionar um novo item ao gráfico com os parâmetros especificados.
await client.SubmitAsync(
requestScript: "g.addV('product').property('id', prop_id).property('name', prop_name)",
bindings: new Dictionary<string, object>
{
{ "prop_id", "68719518371" },
{ "prop_name", "Kiama classic surfboard" }
}
);
Executa a aplicação .NET.
dotnet run
Use o driver Python Apache Gremlin para se ligar ao emulador a partir de uma aplicação Python.
Comece em uma pasta vazia.
Importa o pacote gremlinpython do Python Package Index.
pip install gremlinpython
Crie o ficheiro app.py.
Importar client do módulo gremlin_python.driver.
from gremlin_python.driver import client
Crie um novo Client usando as credenciais do emulador.
client = client.Client(
url="ws://localhost:8901/",
traversal_source="g",
username="/dbs/db1/colls/coll1",
password=(
"C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnq"
"yMsEcaGQy67XIw/Jw=="
),
)
Limpe o gráfico usando client.submit.
client.submit(message="g.V().drop()")
Use client.submit novamente para adicionar um novo item ao gráfico com os parâmetros especificados.
client.submit(
message=(
"g.addV('product').property('id', prop_id).property('name', prop_name)"
),
bindings={
"prop_id": "68719518371",
"prop_name": "Kiama classic surfboard",
},
)
Executa a aplicação Python.
python app.py
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
Instala o pacote gremlin a partir do Node Gestor de Pacotes.
npm install --save gremlin
Crie o ficheiro 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.
const credentials = new gremlin.driver.auth.PlainTextSaslAuthenticator(
'/dbs/db1/colls/coll1',
'C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw=='
)
const client = new gremlin.driver.Client(
'ws://localhost:8901/',
{
credentials,
traversalsource: 'g',
rejectUnauthorized: false,
mimeType: 'application/vnd.gremlin-v2.0+json'
}
)
client.open()
Use submit para executar um comando do lado do servidor para limpar o gráfico se ele já tiver dados.
await client.submit('g.V().drop()')
Use submit novamente para adicionar um novo item ao gráfico com os parâmetros especificados.
await client.submit(
'g.addV(\'product\').property(\'id\', prop_id).property(\'name\', prop_name)', {
prop_id: '68719518371',
prop_name: 'Kiama classic surfboard'
}
)
Execute o aplicativo Node.js.
node app.js
Use o SDK de Tabelas Azure para .NET para se ligar ao emulador a partir de uma aplicação .NET.
Comece em uma pasta vazia.
Criar uma nova aplicação de consola .NET
dotnet new console
Adicione o pacote Azure.Data.Tables da NuGet.
dotnet add package Azure.Data.Tables
Abra o arquivo Program.cs .
Exclua qualquer conteúdo existente no arquivo.
Adicione um bloco de uso para o espaço de nomes Azure.Data.Tables.
using Azure.Data.Tables;
Crie uma nova instância do TableServiceClient usando as credenciais do emulador.
var serviceClient = new TableServiceClient(
connectionString: "DefaultEndpointsProtocol=http;AccountName=localhost;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==;TableEndpoint=http://localhost:8902/;"
);
Use GetTableClient para criar uma nova instância de TableClient com o nome da tabela. Em seguida, verifique se a tabela existe usando CreateIfNotExistsAsync.
var client = serviceClient.GetTableClient(
tableName: "cosmicworksproducts"
);
await client.CreateIfNotExistsAsync();
Crie um novo record tipo para itens.
public record Product : Azure.Data.Tables.ITableEntity
{
public required string RowKey { get; set; }
public required string PartitionKey { get; set; }
public required string Name { get; init; }
public Azure.ETag ETag { get; set; }
public DateTimeOffset? Timestamp { get; set; }
}
Crie um novo item na tabela usando UpsertEntityAsync e o Replace modo.
var item = new Product
{
RowKey = "68719518371",
PartitionKey = "Surfboards",
Name = "Kiama classic surfboard",
Timestamp = DateTimeOffset.Now
};
await client.UpsertEntityAsync(
entity: item,
mode: TableUpdateMode.Replace
);
Executa a aplicação .NET.
dotnet run
Utilize o SDK do Azure Tables para Python para se ligar ao emulador a partir de uma aplicação Python.
Comece em uma pasta vazia.
Importa o pacote azure-data-tables do Python Package Index.
pip install azure-data-tables
Crie o ficheiro app.py.
Importar TableServiceClient e UpdateMode do módulo azure.data.tables.
from azure.data.tables import TableServiceClient, UpdateMode
Use TableServiceClient.from_connection_string para criar um novo cliente de nível de serviço.
service = TableServiceClient.from_connection_string(
conn_str=(
"DefaultEndpointsProtocol=http;AccountName=localhost;AccountKey=C2y6yD"
"jf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEca"
"GQy67XIw/Jw==;TableEndpoint=http://localhost:8902/;"
)
)
Crie um novo cliente ao nível de tabela usando create_table_if_not_exists.
client = service.create_table_if_not_exists(table_name="cosmicworksproducts")
Use upsert_entity para criar um novo item no contêiner.
item = {
"PartitionKey": "68719518371",
"RowKey": "Surfboards",
"name": "Kiama classic surfboard",
}
client.upsert_entity(entity=item, mode=UpdateMode.REPLACE)
Executa a aplicação Python.
python app.py
Use o SDK JavaScript Azure Tables para usar o emulador a partir de uma aplicação Node.js/JavaScript.
Comece em uma pasta vazia.
Inicialize um novo módulo.
npm init es6 --yes
Instala o pacote @azure/data-tables a partir do Node Gestor de Pacotes.
npm install --save @azure/data-tables
Crie o ficheiro app.js.
Importe o tipo TableClient do módulo @azure/data-tables.
import { TableClient } from '@azure/data-tables'
Use TableClient.fromConnectionString para criar uma nova instância cliente usando a cadeia de ligação do emulador.
const client = TableClient.fromConnectionString(
'DefaultEndpointsProtocol=http;AccountName=localhost;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==;TableEndpoint=http://localhost:8902/;',
'cosmicworksproducts'
)
Use createTable para criar uma nova tabela, se ela ainda não existir.
await client.createTable()
Use upsertEntity para criar ou substituir o item.
const item = {
partitionKey: '68719518371',
rowKey: 'Surfboards',
name: 'Kiama classic surfboard'
}
await client.upsertEntity(
item,
'Replace'
)
Execute o aplicativo Node.js.
node app.js
Warning
Se você receber um erro SSL, talvez seja necessário desativar o TLS/SSL para seu aplicativo. Isto ocorre frequentemente se estiver a desenvolver na sua máquina local, usando o emulador de Azure Cosmos DB num contentor e não importou o certificado SSL do contentor. Para resolver isso, configure o cliente para desabilitar a validação TLS/SSL:
const client = TableClient.fromConnectionString(
...,
...,
{
allowInsecureConnection: true
}
)
Use o emulador num fluxo de trabalho CI do GitHub Actions
Para executar uma carga de trabalho de integração contínua que valide automaticamente a sua aplicação, use o emulador Azure Cosmos DB com uma suite de testes do seu framework preferido. O emulador do Azure Cosmos DB está pré-instalado na variante windows-latest dos agentes hospedados do GitHub Actions.
Execute uma suite de testes usando o driver de teste incorporado para .NET e uma framework de testes 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 no seu repositório de GitHub num ficheiro chamado .github/workflows/ci.yml.
Adiciona uma tarefa ao teu fluxo de trabalho para iniciar o emulador do Azure Cosmos DB usando PowerShell e executa a tua suite de testes unitários.
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
Teste a sua aplicação Python e as operações da base de dados usando pytest.
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 no seu repositório de GitHub num ficheiro chamado .github/workflows/ci.yml.
Adiciona uma tarefa ao teu fluxo de trabalho para iniciar o emulador do Azure Cosmos DB usando PowerShell e executa a tua suite de testes unitários.
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
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 no seu repositório de GitHub num ficheiro chamado .github/workflows/ci.yml.
Adiciona uma tarefa ao teu fluxo de trabalho para iniciar o emulador do Azure Cosmos DB usando PowerShell e executa a tua suite de testes unitários.
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
Próximo passo