Un caso de uso común para el emulador es servir como base de datos de desarrollo mientras compila las aplicaciones. El uso del emulador para el desarrollo puede ayudarle a aprender las características de creación y modelado de datos para una base de datos como Azure Cosmos DB sin incurrir en ningún costo de servicio. Además, el uso del emulador como parte de un flujo de trabajo de automatización puede garantizar la ejecución del mismo conjunto de pruebas de integración. Puede asegurarse de que las mismas pruebas se ejecutan localmente en la máquina de desarrollo y de forma remota en un trabajo de integración continua.
Requisitos previos
- .NET 6 o posterior, Node.js v20 o posterior o Python 3.7 o posterior
- Asegúrese de que todos los ejecutables necesarios están disponibles en
PATH
.
- Emulador de Windows
- Windows Server 2016 de 64 bits, 2019, Windows 10 o Windows 11.
- Requisitos mínimos de hardware:
- 2 GB de RAM
- 10 GB de espacio disponible en el disco duro
- Emulador de Docker
Instalación del emulador
Existen múltiples variaciones del emulador y cada una de ellas tiene un proceso de instalación relativamente sencillo.
Para empezar, obtenga la variante de Linux de la imagen de contenedor de Microsoft Container Registry (MCR).
Extraiga la imagen de contenedor de Linux mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator
del registro de contenedor en el host de Docker local.
docker pull mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:latest
Asegúrese de que la imagen del emulador se haya extraído en el host de Docker local.
docker images
Para empezar, obtenga la variante de Windows de la imagen de contenedor de Microsoft Container Registry (MCR).
Extraiga la imagen de contenedor de Windows mcr.microsoft.com/cosmosdb/windows/azure-cosmos-emulator
del registro de contenedor en el host de Docker local.
docker pull mcr.microsoft.com/cosmosdb/windows/azure-cosmos-emulator
Asegúrese de que la imagen del emulador se haya extraído en el host de Docker local.
docker images
Para empezar, descargue e instale la versión más reciente del emulador de Azure Cosmos DB en el equipo local.
Sugerencia
En el artículo dedicado a las notas de la versión del emulador se enumeran todas las versiones disponibles y las actualizaciones de características que se realizaron en cada versión.
Descargue el emulador de Azure Cosmos DB.
Ejecute el instalador en el equipo local con privilegios administrativos.
El emulador instala automáticamente los certificados de desarrollador adecuados y configura las reglas de firewall en el equipo local.
Para empezar, obtenga la variante de Linux de la imagen de contenedor de Microsoft Container Registry (MCR).
Extraiga la imagen de contenedor de Linux mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator
mediante la etiqueta mongodb
del registro de contenedor en el host de Docker local.
docker pull mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:mongodb
Asegúrese de que la imagen del emulador se haya extraído en el host de Docker local.
docker images
La imagen de contenedor de Docker (Windows) no admite la API para MongoDB.
Para empezar, descargue e instale la versión más reciente del emulador de Azure Cosmos DB en el equipo local.
Sugerencia
En el artículo dedicado a las notas de la versión del emulador se enumeran todas las versiones disponibles y las actualizaciones de características que se realizaron en cada versión.
Descargue el emulador de Azure Cosmos DB.
Ejecute el instalador en el equipo local con privilegios administrativos.
El emulador instala automáticamente los certificados de desarrollador adecuados y configura las reglas de firewall en el equipo local.
La variante de contenedor de Docker (Linux o Windows) del emulador no admite la API para Apache Cassandra, la API para Apache Gremlin ni la API para Table.
Para empezar, descargue e instale la versión más reciente del emulador de Azure Cosmos DB en el equipo local.
Sugerencia
En el artículo dedicado a las notas de la versión del emulador se enumeran todas las versiones disponibles y las actualizaciones de características que se realizaron en cada versión.
Descargue el emulador de Azure Cosmos DB.
Ejecute el instalador en el equipo local con privilegios administrativos.
El emulador instala automáticamente los certificados de desarrollador adecuados y configura las reglas de firewall en el equipo local.
Inicio del emulador
Una vez descargado, inicie el emulador con la API especificada habilitada.
La variante de contenedor de Docker del emulador no admite la API para Apache Cassandra.
Inicie el ejecutable del emulador (Microsoft.Azure.Cosmos.Emulator.exe
) en la ruta de acceso %ProgramFiles%\Azure Cosmos DB Emulator
. Use estos parámetros para configurar el emulador:
|
Descripción |
EnableCassandraEndpoint |
Habilita la API para el punto de conexión de Apache Cassandra. |
CassandraPort |
Número de puerto que se usará para el punto de conexión. |
Microsoft.Azure.Cosmos.Emulator.exe /EnableCassandraEndpoint /CassandraPort=65200
El emulador abre automáticamente el explorador de datos mediante la dirección URL https://localhost:8081/_explorer/index.html
.
La variante de contenedor de Docker del emulador no admite la API para Apache Gremlin.
Inicie el ejecutable del emulador (Microsoft.Azure.Cosmos.Emulator.exe
) en la ruta de acceso %ProgramFiles%\Azure Cosmos DB Emulator
. Use estos parámetros para configurar el emulador:
|
Descripción |
EnableGremlinEndpoint |
Habilita la API para el punto de conexión de Apache Gremlin. |
GremlinPort |
Número de puerto que se usará para el punto de conexión. |
Microsoft.Azure.Cosmos.Emulator.exe /EnableGremlinEndpoint /GremlinPort=65400
El emulador abre automáticamente el explorador de datos mediante la dirección URL https://localhost:8081/_explorer/index.html
.
La variante de contenedor de Docker del emulador no admite la API para Table.
Inicie el ejecutable del emulador (Microsoft.Azure.Cosmos.Emulator.exe
) en la ruta de acceso %ProgramFiles%\Azure Cosmos DB Emulator
. Use estos parámetros para configurar el emulador:
|
Descripción |
EnableTableEndpoint |
Habilita la API para el punto de conexión de Table. |
TablePort |
Número de puerto que se usará para el punto de conexión. |
Microsoft.Azure.Cosmos.Emulator.exe /EnableTableEndpoint /TablePort=65500
El emulador abre automáticamente el explorador de datos mediante la dirección URL https://localhost:8081/_explorer/index.html
.
Ejecute un nuevo contenedor mediante la imagen de contenedor y la siguiente configuración:
|
Descripción |
AZURE_COSMOS_EMULATOR_PARTITION_COUNT (Opcional) |
Especifique el número de particiones que se van a usar. |
AZURE_COSMOS_EMULATOR_ENABLE_DATA_PERSISTENCE (Opcional) |
Habilite la persistencia de datos entre ejecuciones del emulador. |
AZURE_COSMOS_EMULATOR_IP_ADDRESS_OVERRIDE (Opcional) |
Invalide la dirección IP predeterminada del emulador. |
Para los sistemas de 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 los sistemas de Windows, use:
$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
Vaya a https://localhost:8081/_explorer/index.html
para acceder al explorador de datos.
Cree un nuevo directorio para el montaje de enlace.
Ejecute un nuevo contenedor mediante la imagen de contenedor.
$parameters = @(
"--publish", "8081:8081"
"--publish", "10250-10255:10250-10255"
"--name", "windows-emulator"
"--detach"
)
docker run @parameters mcr.microsoft.com/cosmosdb/windows/azure-cosmos-emulator
Vaya a https://localhost:8081/_explorer/index.html
para acceder al explorador de datos.
Para iniciar el emulador, seleccione la aplicación en el menú Inicio de Windows.
Como alternativa, puede iniciar el ejecutable del emulador (Microsoft.Azure.Cosmos.Emulator.exe
) en la ruta de acceso %ProgramFiles%\Azure Cosmos DB Emulator
.
Además, puede iniciar el emulador desde la línea de comandos. Use estos parámetros para configurar el emulador:
|
Descripción |
Port |
Número de puerto que se va a usar para el punto de conexión de la API para NoSQL. |
Microsoft.Azure.Cosmos.Emulator.exe /Port=65000
El emulador abre automáticamente el explorador de datos mediante la dirección URL https://localhost:8081/_explorer/index.html
.
Ejecute un nuevo contenedor mediante la imagen de contenedor y la siguiente configuración:
|
Descripción |
AZURE_COSMOS_EMULATOR_ENABLE_MONGODB_ENDPOINT |
Especifique la versión del punto de conexión de MongoDB que se va a usar. Entre los puntos de conexión admitidos se incluyen: 3.2 , 3.6 o 4.0 . |
AZURE_COSMOS_EMULATOR_PARTITION_COUNT (Opcional) |
Especifique el número de particiones que se van a usar. |
AZURE_COSMOS_EMULATOR_ENABLE_DATA_PERSISTENCE (Opcional) |
Habilite la persistencia de datos entre ejecuciones del emulador. |
AZURE_COSMOS_EMULATOR_IP_ADDRESS_OVERRIDE (Opcional) |
Invalide la dirección IP predeterminada del emulador. |
Para los sistemas de 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 los sistemas de Windows, use:
$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
Vaya a https://localhost:8081/_explorer/index.html
para acceder al explorador de datos.
La imagen de contenedor de Docker (Windows) no admite la API para MongoDB.
Inicie el ejecutable del emulador (Microsoft.Azure.Cosmos.Emulator.exe
) en la ruta de acceso %ProgramFiles%\Azure Cosmos DB Emulator
. Use estos parámetros para configurar el emulador:
|
Descripción |
EnableMongoDbEndpoint |
Habilita el punto de conexión de la API para MongoDB en la versión de MongoDB especificada. |
MongoPort |
Número de puerto que se usará para el punto de conexión. |
Microsoft.Azure.Cosmos.Emulator.exe /EnableMongoDbEndpoint=4.0 /MongoPort=65200
Nota:
Para obtener más información sobre los argumentos de la línea de comandos y las versiones de MongoDB compatibles con el emulador, consulte parámetros de la línea de comandos.
El emulador abre automáticamente el explorador de datos mediante la dirección URL https://localhost:8081/_explorer/index.html
.
Importación del certificado TLS/SSL del emulador
Importe el certificado TLS/SSL del emulador para usar el emulador con su SDK de desarrollador preferido sin deshabilitar TLS/SSL en el cliente.
La variante de contenedor de Docker (Linux o Windows) del emulador no admite la API para Apache Cassandra, la API para Apache Gremlin ni la API para Table.
La instalación local de Windows del emulador importa automáticamente los certificados TLS/SSL. No es necesaria ninguna acción.
El certificado del emulador está disponible en la ruta de acceso _explorer/emulator.pem
en el contenedor en ejecución. Use curl
para descargar el certificado del contenedor en ejecución en la máquina local.
Obtenga el certificado del contenedor en ejecución.
Para los sistemas de Linux, use:
curl --insecure https://localhost:8081/_explorer/emulator.pem > ~/emulatorcert.crt
Para los sistemas de Windows, use:
$parameters = @{
Uri = 'https://localhost:8081/_explorer/emulator.pem'
Method = 'GET'
OutFile = 'emulatorcert.crt'
SkipCertificateCheck = $True
}
Invoke-WebRequest @parameters
Vuelva a generar la agrupación de certificados mediante el comando adecuado para el sistema operativo.
Para sistemas de Linux basados en Debian (por ejemplo, Ubuntu), use:
sudo update-ca-certificates
Para sistemas Linux basados en Red Hat (por ejemplo, CentOS, Fedora), use:
sudo update-ca-trust
Para los sistemas de Windows, use:
certutil -f -addstore "Root" ~/emulatorcert.crt
Para obtener instrucciones más detalladas, consulte la documentación específica del sistema operativo.
La imagen de contenedor de Docker (Windows) no admite la API para MongoDB.
La instalación local de Windows del emulador importa automáticamente los certificados TLS/SSL. No es necesaria ninguna acción.
El certificado del emulador está disponible en la ruta de acceso /_explorer/emulator.pem
en el contenedor en ejecución.
Descargue el certificado del contenedor en ejecución en el equipo local.
Para los sistemas de Linux, use:
curl --insecure https://localhost:8081/_explorer/emulator.pem > ~/emulatorcert.crt
Para los sistemas de Windows, use:
$parameters = @{
Uri = 'https://localhost:8081/_explorer/emulator.pem'
Method = 'GET'
OutFile = 'emulatorcert.crt'
SkipCertificateCheck = $True
}
Invoke-WebRequest @parameters
Nota:
Es posible que tenga que cambiar el host (o la dirección IP) y el número de puerto si ha modificado previamente esos valores.
Instale el certificado según el proceso que se usa normalmente para el sistema operativo. Por ejemplo, en Linux, copiaría el certificado en la ruta de acceso /usr/local/share/ca-certificates/
.
Para los sistemas de Linux, use:
cp ~/emulatorcert.crt /usr/local/share/ca-certificates/
Para los sistemas de Windows, use:
$parameters = @{
FilePath = 'emulatorcert.crt'
CertStoreLocation = 'Cert:\CurrentUser\Root'
}
Import-Certificate @parameters
En el caso de los sistemas de Linux, vuelva a generar la agrupación de certificados mediante el comando adecuado para la distribución de Linux.
Para sistemas de Linux basados en Debian (por ejemplo, Ubuntu), use:
sudo update-ca-certificates
Para sistemas Linux basados en Red Hat (por ejemplo, CentOS, Fedora), use:
sudo update-ca-trust
Para obtener instrucciones más detalladas, consulte la documentación específica del sistema operativo.
El certificado del emulador está disponible en la carpeta C:\CosmosDB.Emulator\bind-mount
en el contenedor en ejecución. La carpeta también contiene un script para instalar automáticamente el certificado.
Use docker cp
para copiar toda la carpeta en el equipo local.
docker cp windows-emulator:C:\CosmosDB.Emulator\bind-mount .
Ejecute el script importcert.ps1 en la carpeta.
.\bind-mount\importcert.ps1
La instalación local de Windows del emulador importa automáticamente los certificados TLS/SSL. No es necesaria ninguna acción.
Conexión al emulador desde el SDK
Cada SDK incluye una clase de cliente que se usa normalmente para conectar el SDK a la cuenta de Azure Cosmos DB. Mediante el uso de las credenciales del emulador, puede conectar el SDK a la instancia del emulador en su lugar.
Use el SDK de .NET de la API para NoSQL de Azure Cosmos DB para conectarse al emulador desde una aplicación .NET.
Comience en una carpeta vacía.
Creación de una aplicación de consola de .NET
dotnet new console
Agregue el paquete Microsoft.Azure.Cosmos
de NuGet.
dotnet add package Microsoft.Azure.Cosmos
Abra el archivo Program.cs.
Elimine cualquier contenido existente dentro del archivo.
Agregue un bloque using para el espacio de nombres Microsoft.Azure.Cosmos
.
using Microsoft.Azure.Cosmos;
Cree una nueva instancia de CosmosClient con las credenciales del emulador.
using CosmosClient client = new(
accountEndpoint: "https://localhost:8081/",
authKeyOrResourceToken: "C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw=="
);
Cree una base de datos y un contenedor mediante CreateDatabaseIfNotExistsAsync y CreateContainerIfNotExistsAsync.
Database database = await client.CreateDatabaseIfNotExistsAsync(
id: "cosmicworks",
throughput: 400
);
Container container = await database.CreateContainerIfNotExistsAsync(
id: "products",
partitionKeyPath: "/id"
);
Cree un nuevo elemento en el contenedor mediante UpsertItemAsync.
var item = new
{
id = "68719518371",
name = "Kiama classic surfboard"
};
await container.UpsertItemAsync(item);
Ejecute la aplicación .NET.
dotnet run
Advertencia
Si recibe un error SSL, es posible que tenga que deshabilitar TLS/SSL para la aplicación. Esto suele ocurrir si está desarrollando en el equipo local, mediante el emulador de Azure Cosmos DB en un contenedor, y no ha importado el certificado SSL del contenedor. Para resolverlo, configure las opciones del cliente para deshabilitar la validación TLS/SSL antes de crear el cliente:
CosmosClientOptions options = new ()
{
HttpClientFactory = () => new HttpClient(new HttpClientHandler()
{
ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator
}),
ConnectionMode = ConnectionMode.Gateway,
};
using CosmosClient client = new(
...,
...,
clientOptions: options
);
Use el SDK de Python de la API para NoSQL de Azure Cosmos DB para conectarse al emulador desde una aplicación Python.
Comience en una carpeta vacía.
Importe el paquete azure-cosmos
desde el índice de paquetes de Python.
pip install azure-cosmos
Abra el archivo app.py.
Importe CosmosClient
y PartitionKey
desde el módulo azure.cosmos
.
from azure.cosmos import CosmosClient, PartitionKey
Cree un nuevo CosmosClient con las credenciales del emulador.
client = CosmosClient(
url="<https://localhost:8081>",
credential=(
"C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGG"
"yPMbIZnqyMsEcaGQy67XIw/Jw=="
),
)
Cree una base de datos y un contenedor mediante create_database_if_not_exists y 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",
),
)
Cree un nuevo elemento en el contenedor con upsert_item.
item = {"id": "68719518371", "name": "Kiama classic surfboard"}
container.upsert_item(item)
Ejecute la aplicación de Python.
python app.py
Advertencia
Si recibe un error SSL, es posible que tenga que deshabilitar TLS/SSL para la aplicación. Esto suele ocurrir si está desarrollando en el equipo local, mediante el emulador de Azure Cosmos DB en un contenedor, y no ha importado el certificado SSL del contenedor. Para resolverlo, configure la aplicación para deshabilitar la validación TLS/SSL antes de crear el cliente:
import urllib3
urllib3.disable_warnings()
Si sigue sufriendo errores SSL, es posible que Python recupere los certificados de otro almacén de certificados. Para determinar la ruta de acceso en la que Python busca los certificados, siga estos pasos:
Importante
Si usa un entorno virtual de Python (venv), asegúrese de que está activado antes de ejecutar los comandos.
Abra un terminal.
Inicie el intérprete de Python escribiendo python o python3, en función de la versión de Python.
En el intérprete de Python, ejecute los siguientes comandos:
from requests.utils import DEFAULT_CA_BUNDLE_PATH
print(DEFAULT_CA_BUNDLE_PATH)
Dentro de un entorno virtual, la ruta de acceso puede ser (al menos en Ubuntu):
path/to/venv/lib/pythonX.XX/site-packages/certifi/cacert.pem
Fuera de un entorno virtual, la ruta de acceso puede ser (al menos en Ubuntu):
/etc/ssl/certs/ca-certificates.crt
Una vez que haya identificado DEFAULT_CA_BUNDLE_PATH, abra un nuevo terminal y ejecute los siguientes comandos para anexar el certificado del emulador al paquete de certificados:
Importante
Si la variable DEFAULT_CA_BUNDLE_PATH apunta a un directorio del sistema, puede aparecer un error "Permiso denegado". En este caso, deberá ejecutar los comandos con privilegios elevados (como raíz). Además, deberá actualizar y volver a generar la agrupación de certificados después de ejecutar los comandos proporcionados.
# 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 el SDK de Node.js de la API para NoSQL de Azure Cosmos DB para conectarse al emulador desde una aplicación Node.js/JavaScript.
Comience en una carpeta vacía.
Inicialice un nuevo módulo.
npm init es6 --yes
Instale el paquete @azure/cosmos
desde el Administrador de paquetes de Node.
npm install --save @azure/cosmos
Guarde el archivo app.js.
Importe el tipo CosmosClient
desde el módulo @azure/cosmos
.
import { CosmosClient } from '@azure/cosmos'
Use CosmosClient
para crear una nueva instancia de cliente mediante las credenciales del emulador.
const cosmosClient = new CosmosClient({
endpoint: 'https://localhost:8081/',
key: 'C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw=='
})
Cree una base de datos y un contenedor mediante Databases.createIfNotExists
y Containers.createIfNotExists
.
const { database } = await cosmosClient.databases.createIfNotExists({
id: 'cosmicworks',
throughput: 400
})
const { container } = await database.containers.createIfNotExists({
id: 'products',
partitionKey: {
paths: [
'/id'
]
}
})
Actualice/inserte (upsert) un nuevo elemento mediante Items.upsert
.
const item = {
id: '68719518371',
name: 'Kiama classic surfboard'
}
container.items.upsert(item)
Ejecute la aplicación Node.js.
node app.js
Advertencia
Si recibe un error SSL, es posible que tenga que deshabilitar TLS/SSL para la aplicación. Esto suele ocurrir si está desarrollando en el equipo local, mediante el emulador de Azure Cosmos DB en un contenedor, y no ha importado el certificado SSL del contenedor. Para resolverlo, configure la aplicación para deshabilitar la validación TLS/SSL antes de crear el cliente:
process.env.NODE_TLS_REJECT_UNAUTHORIZED = 0
Use el controlador de .NET de MongoDB para conectarse al emulador desde una aplicación .NET.
Comience en una carpeta vacía.
Creación de una aplicación de consola de .NET
dotnet new console
Agregue el paquete MongoDB.Driver
de NuGet.
dotnet add package MongoDB.Driver
Abra el archivo Program.cs.
Elimine cualquier contenido existente dentro del archivo.
Agregue un bloque using para el espacio de nombres MongoDB.Driver
.
using MongoDB.Driver;
Cree una nueva instancia de MongoClient
con las credenciales del emulador.
var client = new MongoClient(
"mongodb://localhost:C2y6yDjf5%2FR%2Bob0N8A7Cgv30VRDJIWEHLM%2B4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw%2FJw%3D%3D@localhost:10255/admin?ssl=true&retrywrites=false"
);
Obtenga la base de datos y el contenedor mediante GetDatabase
y GetCollection<>
.
var database = client.GetDatabase("cosmicworks");
var collection = database.GetCollection<dynamic>("products");
Cree un nuevo elemento en XXX mediante InsertOneAsync
.
var item = new
{
name = "Kiama classic surfboard"
};
await collection.InsertOneAsync(item);
Ejecute la aplicación .NET.
dotnet run
Use el controlador de Python de MongoDB para conectarse al emulador desde una aplicación Python.
Comience en una carpeta vacía.
Importe el paquete pymongo
desde el índice de paquetes de Python.
pip install pymongo
Abra el archivo app.py.
Importe los módulos os
, sys
y pymongo
.
import pymongo
Cree un nuevo MongoClient
con las credenciales del emulador.
client = pymongo.MongoClient(
host=(
"mongodb://localhost:C2y6yDjf5%2FR%2Bob0N8A7Cgv30VRDJIWEHLM%2B4QDU5DE2"
"nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw%2FJw%3D%3D@localhost:10255/a"
"dmin?ssl=true"
),
tls=True,
)
Cree una nueva base de datos y un contenedor mediante list_database_names
y list_collection_names
junto con los comandos personalizados CreateDatabase
y CreateCollection
.
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"})
Cree un nuevo elemento en el contenedor con update_one
.
item = {"id": "68719518371", "name": "Kiama classic surfboard"}
collection.update_one(
filter={"id": item["id"]}, update={"$set": item}, upsert=True
)
Ejecute la aplicación de Python.
python app.py
Use el controlador de Node.js de MongoDB para conectarse al emulador desde una aplicación Node.js/JavaScript.
Comience en una carpeta vacía.
Inicialice un nuevo módulo.
npm init es6 --yes
Instale el paquete mongodb
desde el Administrador de paquetes de Node.
npm install --save mongodb
Guarde el archivo app.js.
Importe el tipo MongoClient
desde el módulo mongodb
.
import { MongoClient } from 'mongodb'
Use MongoClient
para crear una nueva instancia de cliente mediante las credenciales del emulador. Use connect
para conectarse al emulador.
const client = new MongoClient(
'mongodb://localhost:C2y6yDjf5%2FR%2Bob0N8A7Cgv30VRDJIWEHLM%2B4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw%2FJw%3D%3D@localhost:10255/admin?ssl=true&retrywrites=false'
)
await client.connect()
Cree una base de datos y un contenedor mediante db
y collection
.
const database = client.db('cosmicworks')
const collection = database.collection('products')
Cree un nuevo elemento mediante insertOne
.
const item = {
name: 'Kiama classic surfboard'
}
await collection.insertOne(item)
Ejecute la aplicación Node.js.
node app.js
Advertencia
Si recibe un error SSL, es posible que tenga que deshabilitar TLS/SSL para la aplicación. Esto suele ocurrir si está desarrollando en el equipo local, mediante el emulador de Azure Cosmos DB en un contenedor, y no ha importado el certificado SSL del contenedor. Para resolverlo, configure la aplicación para deshabilitar la validación TLS/SSL antes de crear el cliente:
const client = new MongoClient(
...,
{ tlsAllowInvalidCertificates: true }
)
Use el controlador de .NET de Apache Cassandra para conectarse al emulador desde una aplicación .NET.
Comience en una carpeta vacía.
Creación de una aplicación de consola de .NET
dotnet new console
Agregue el paquete CassandraCSharpDriver
de NuGet.
dotnet add package CassandraCSharpDriver
Abra el archivo Program.cs.
Elimine cualquier contenido existente dentro del archivo.
Agregue un bloque using para el espacio de nombres Cassandra
.
using Cassandra;
Cree una nueva instancia de Cluster
con las credenciales del emulador. Cree una nueva sesión mediante 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();
Cree una base de datos y un contenedor mediante PrepareAsync
y 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());
Cree un nuevo elemento en la tabla mediante ExecuteAsync
. Asigne propiedades al elemento mediante Bind
.
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);
Ejecute la aplicación .NET.
dotnet run
Use el controlador de Python de Apache Cassandra para conectarse al emulador desde una aplicación Python.
Comience en una carpeta vacía.
Importe el paquete cassandra-driver
desde el índice de paquetes de Python.
pip install cassandra-driver
Abra el archivo app.py.
Importe PROTOCOL_TLS_CLIENT
, SSLContext
y ssl
desde el módulo CERT_NONE
. A continuación, importe Cluster
desde el módulo cassandra.cluster
. A continuación, importe PlainTextAuthProvider
desde el módulo cassandra.auth
.
from ssl import PROTOCOL_TLS_CLIENT, SSLContext, CERT_NONE
from cassandra.cluster import Cluster
from cassandra.auth import PlainTextAuthProvider
Cree una nueva variable de contexto TLS/SSL mediante SSLContext
. Configure el contexto para que no verifique el certificado autofirmado del emulador.
ssl_context = SSLContext(PROTOCOL_TLS_CLIENT)
ssl_context.check_hostname = False
ssl_context.verify_mode = CERT_NONE
Cree un nuevo session
con las credenciales del emulador, PlainTextAuthProvider
, Cluster
y 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()
Cree un nuevo espacio de claves y una tabla mediante 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)"
)
Cree un nuevo elemento en la tabla mediante session.execute
.
item = {"id": "68719518371", "name": "Kiama classic surfboard"}
session.execute(
"INSERT INTO cosmicworks.products (id, name) VALUES (%s, %s)",
[item["id"], item["name"]],
)
Ejecute la aplicación de Python.
python app.py
Use el controlador de Node.js de Apache Cassandra para usar el emulador desde una aplicación Node.js/JavaScript.
Comience en una carpeta vacía.
Inicialice un nuevo módulo.
npm init es6 --yes
Instale el paquete cassandra-driver
desde el Administrador de paquetes de Node.
npm install --save cassandra-driver
Guarde el archivo app.js.
Importe el tipo Client
y el espacio de nombres auth
del módulo cassandra-driver
.
import { Client, auth } from 'cassandra-driver'
Cree un nuevo objeto para las credenciales del emulador mediante PlainTextAuthProvider
. Conéctese al emulador con las credenciales mediante Client
.
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 ejecutar un comando del lado del servidor para crear un espacio de claves y una tabla.
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)'
)
Cree un nuevo elemento con parámetros mediante execute
.
const item = {
id: '68719518371',
name: 'Kiama classic surfboard'
}
await client.execute(
'INSERT INTO cosmicworks.products (id, name) VALUES (?, ?)',
[
item.id,
item.name
]
)
Ejecute la aplicación Node.js.
node app.js
Advertencia
Si recibe un error SSL, es posible que tenga que deshabilitar TLS/SSL para la aplicación. Esto suele ocurrir si está desarrollando en el equipo local, mediante el emulador de Azure Cosmos DB en un contenedor, y no ha importado el certificado SSL del contenedor. Para resolverlo, configure el cliente para deshabilitar la validación TLS/SSL:
const client = new Client({
...,
...,
...,
sslOptions: {
rejectUnauthorized: false
}
})
Importante
Antes de empezar, la API para Apache Gremlin requiere que cree los recursos en el emulador. Cree una base de datos denominada db1
y un contenedor denominado coll1
. La configuración del rendimiento es irrelevante para esta guía y se puede establecer tan bajo como se quiera.
Use el controlador de .NET de Apache Gremlin para conectarse al emulador desde una aplicación .NET.
Comience en una carpeta vacía.
Creación de una aplicación de consola de .NET
dotnet new console
Agregue el paquete Gremlin.Net
de NuGet.
dotnet add package Gremlin.Net
Abra el archivo Program.cs.
Elimine cualquier contenido existente dentro del archivo.
Agregue un bloque using para el espacio de nombres Gremlin.Net.Driver
.
using Gremlin.Net.Driver;
Cree una nueva instancia de GremlinServer
y GremlinClient
con las credenciales del 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()
);
Limpie el gráfico mediante SubmitAsync
.
await client.SubmitAsync(
requestScript: "g.V().drop()"
);
Use SubmitAsync
de nuevo para agregar un nuevo elemento al gráfico con los 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" }
}
);
Ejecute la aplicación .NET.
dotnet run
Use el controlador de Python de Apache Gremlin para conectarse al emulador desde una aplicación Python.
Comience en una carpeta vacía.
Importe el paquete gremlinpython
desde el índice de paquetes de Python.
pip install gremlinpython
Abra el archivo app.py.
Importe client
desde el módulo gremlin_python.driver
.
from gremlin_python.driver import client
Cree un nuevo Client
con las credenciales del emulador.
client = client.Client(
url="ws://localhost:8901/",
traversal_source="g",
username="/dbs/db1/colls/coll1",
password=(
"C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnq"
"yMsEcaGQy67XIw/Jw=="
),
)
Limpie el gráfico mediante client.submit
.
client.submit(message="g.V().drop()")
Use client.submit
de nuevo para agregar un nuevo elemento al gráfico con los 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",
},
)
Ejecute la aplicación de Python.
python app.py
Use el controlador de Node.js de Apache Gremlin para usar el emulador desde una aplicación Node.js/JavaScript.
Comience en una carpeta vacía.
Inicialice un nuevo módulo.
npm init es6 --yes
Instale el paquete gremlin
desde el Administrador de paquetes de Node.
npm install --save gremlin
Guarde el archivo app.js.
Importe el módulo gremlin
.
import gremlin from 'gremlin'
Cree un nuevo objeto para las credenciales del emulador mediante PlainTextSaslAuthenticator
. Conéctese al emulador con las credenciales mediante Client
.
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 ejecutar un comando del lado del servidor para borrar el gráfico si ya tiene datos.
await client.submit('g.V().drop()')
Use submit
de nuevo para agregar un nuevo elemento al gráfico con los 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'
}
)
Ejecute la aplicación Node.js.
node app.js
Use el SDK para .NET de Azure Tables para conectarse al emulador desde una aplicación .NET.
Comience en una carpeta vacía.
Creación de una aplicación de consola de .NET
dotnet new console
Agregue el paquete Azure.Data.Tables
de NuGet.
dotnet add package Azure.Data.Tables
Abra el archivo Program.cs.
Elimine cualquier contenido existente dentro del archivo.
Agregue un bloque using para el espacio de nombres Azure.Data.Tables
.
using Azure.Data.Tables;
Cree una nueva instancia de TableServiceClient
con las credenciales del emulador.
var serviceClient = new TableServiceClient(
connectionString: "DefaultEndpointsProtocol=http;AccountName=localhost;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==;TableEndpoint=http://localhost:8902/;"
);
Use GetTableClient
para crear una nueva instancia de TableClient
con el nombre de la tabla. A continuación, asegúrese de que la tabla existe mediante CreateIfNotExistsAsync
.
var client = serviceClient.GetTableClient(
tableName: "cosmicworksproducts"
);
await client.CreateIfNotExistsAsync();
Cree un nuevo tipo record
para los elementos.
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; }
}
Cree un nuevo elemento en la tabla mediante el modo UpsertEntityAsync
y Replace
.
var item = new Product
{
RowKey = "68719518371",
PartitionKey = "Surfboards",
Name = "Kiama classic surfboard",
Timestamp = DateTimeOffset.Now
};
await client.UpsertEntityAsync(
entity: item,
mode: TableUpdateMode.Replace
);
Ejecute la aplicación .NET.
dotnet run
Use el SDK de Python de Azure Tables para conectarse al emulador desde una aplicación Python.
Comience en una carpeta vacía.
Importe el paquete azure-data-tables
desde el índice de paquetes de Python.
pip install azure-data-tables
Abra el archivo app.py.
Importe TableServiceClient
y UpdateMode
desde el módulo azure.data.tables
.
from azure.data.tables import TableServiceClient, UpdateMode
Cree un nuevo cliente de nivel de servicio mediante TableServiceClient.from_connection_string
.
service = TableServiceClient.from_connection_string(
conn_str=(
"DefaultEndpointsProtocol=http;AccountName=localhost;AccountKey=C2y6yD"
"jf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEca"
"GQy67XIw/Jw==;TableEndpoint=http://localhost:8902/;"
)
)
Cree un nuevo cliente de nivel de tabla mediante create_table_if_not_exists
.
client = service.create_table_if_not_exists(table_name="cosmicworksproducts")
Cree un nuevo elemento en el contenedor con upsert_entity
.
item = {
"PartitionKey": "68719518371",
"RowKey": "Surfboards",
"name": "Kiama classic surfboard",
}
client.upsert_entity(entity=item, mode=UpdateMode.REPLACE)
Ejecute la aplicación de Python.
python app.py
Use el SDK de JavaScript de Azure Tables para usar el emulador desde una aplicación Node.js/JavaScript.
Comience en una carpeta vacía.
Inicialice un nuevo módulo.
npm init es6 --yes
Instale el paquete @azure/data-tables
desde el Administrador de paquetes de Node.
npm install --save @azure/data-tables
Guarde el archivo app.js.
Importe el tipo TableClient
desde el módulo @azure/data-tables
.
import { TableClient } from '@azure/data-tables'
Use TableClient.fromConnectionString
para crear una nueva instancia de cliente mediante la cadena de conexión del emulador.
const client = TableClient.fromConnectionString(
'DefaultEndpointsProtocol=http;AccountName=localhost;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==;TableEndpoint=http://localhost:8902/;',
'cosmicworksproducts'
)
Use createTable
para crear una nueva tabla si aún no existe.
await client.createTable()
Use upsertEntity
para crear o reemplazar el elemento.
const item = {
partitionKey: '68719518371',
rowKey: 'Surfboards',
name: 'Kiama classic surfboard'
}
await client.upsertEntity(
item,
'Replace'
)
Ejecute la aplicación Node.js.
node app.js
Advertencia
Si recibe un error SSL, es posible que tenga que deshabilitar TLS/SSL para la aplicación. Esto suele ocurrir si está desarrollando en el equipo local, mediante el emulador de Azure Cosmos DB en un contenedor, y no ha importado el certificado SSL del contenedor. Para resolverlo, configure el cliente para deshabilitar la validación TLS/SSL:
const client = TableClient.fromConnectionString(
...,
...,
{
allowInsecureConnection: true
}
)
Uso del emulador en un flujo de trabajo de CI de Acciones de GitHub
Use el emulador de Azure Cosmos DB con un conjunto de pruebas del marco que prefiera para ejecutar una carga de trabajo de integración continua que valide automáticamente la aplicación. El emulador de Azure Cosmos DB está preinstalado en la variante windows-latest
de los ejecutores hospedados de Acciones de GitHub.
Ejecute un conjunto de pruebas con el controlador de pruebas integrado para .NET y un marco de pruebas como MSTest, NUnit o XUnit.
Compruebe que el conjunto de pruebas unitarias de la aplicación funciona según lo previsto.
dotnet test
Cree un nuevo flujo de trabajo en el repositorio de GitHub en un archivo denominado .github/workflows/ci.yml
.
Agregue un trabajo al flujo de trabajo para iniciar el emulador de Azure Cosmos DB mediante PowerShell y ejecutar el conjunto de pruebas unitarias.
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
Pruebe la aplicación de Python y las operaciones de base de datos mediante pytest
.
Compruebe que el conjunto de pruebas unitarias de la aplicación funciona según lo previsto.
pip install -U pytest
pytest
Cree un nuevo flujo de trabajo en el repositorio de GitHub en un archivo denominado .github/workflows/ci.yml
.
Agregue un trabajo al flujo de trabajo para iniciar el emulador de Azure Cosmos DB mediante PowerShell y ejecutar el conjunto de pruebas unitarias.
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
Pruebe la aplicación Node.js y sus modificaciones en la base de datos mediante mocha
.
Compruebe que el conjunto de pruebas unitarias de la aplicación funciona según lo previsto.
npm install --global mocha
mocha
Cree un nuevo flujo de trabajo en el repositorio de GitHub en un archivo denominado .github/workflows/ci.yml
.
Agregue un trabajo al flujo de trabajo para iniciar el emulador de Azure Cosmos DB mediante PowerShell y ejecutar el conjunto de pruebas unitarias.
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
Paso siguiente