Desarrollo local con el emulador de Azure Cosmos DB
Artículo
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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/.
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.
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.
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:
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):
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
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:
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"
);
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.
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:
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);
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.
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.
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 authdel 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.
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:
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.
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()
);
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.
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/;"
);
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:
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.