Распространенный вариант использования эмулятора — служить базой данных разработки при создании приложений. С помощью эмулятора для разработки можно узнать характеристики создания и моделирования данных для базы данных, такой как Azure Cosmos DB, без каких-либо затрат на обслуживание. Кроме того, использование эмулятора в рамках рабочего процесса автоматизации может обеспечить выполнение одного набора тестов интеграции. Вы можете убедиться, что одни и те же тесты выполняются локально на компьютере разработки и удаленно в задании непрерывной интеграции.
Необходимые компоненты
Установка эмулятора
Существует несколько вариантов эмулятора, и каждый вариант имеет относительно беспокойный процесс установки.
Чтобы приступить к работе, получите вариант образа контейнера Linux из реестра контейнеров Майкрософт (MCR).
mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator
Извлеките образ контейнера Linux из реестра контейнеров на локальный узел Docker.
docker pull mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:latest
Убедитесь, что образ эмулятора доступен на локальном узле Docker.
docker images
Чтобы приступить к работе, получите вариант образа контейнера Windows из реестра контейнеров Майкрософт (MCR).
mcr.microsoft.com/cosmosdb/windows/azure-cosmos-emulator
Извлеките образ контейнера Windows из реестра контейнеров на локальный узел Docker.
docker pull mcr.microsoft.com/cosmosdb/windows/azure-cosmos-emulator
Убедитесь, что образ эмулятора доступен на локальном узле Docker.
docker images
Чтобы приступить к работе, скачайте и установите последнюю версию эмулятора Azure Cosmos DB на локальный компьютер.
Скачайте эмулятор Azure Cosmos DB.
Запустите установщик на локальном компьютере с правами администратора.
Эмулятор автоматически устанавливает соответствующие сертификаты разработчика и настраивает правила брандмауэра на локальном компьютере.
Чтобы приступить к работе, получите вариант образа контейнера Linux из реестра контейнеров Майкрософт (MCR).
mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator
Извлеките образ контейнера Linux с помощью mongodb
тега из реестра контейнеров на локальный узел Docker.
docker pull mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:mongodb
Убедитесь, что образ эмулятора доступен на локальном узле Docker.
docker images
Образ контейнера Docker (Windows) не поддерживает API для MongoDB.
Чтобы приступить к работе, скачайте и установите последнюю версию эмулятора Azure Cosmos DB на локальный компьютер.
Скачайте эмулятор Azure Cosmos DB.
Запустите установщик на локальном компьютере с правами администратора.
Эмулятор автоматически устанавливает соответствующие сертификаты разработчика и настраивает правила брандмауэра на локальном компьютере.
Вариант контейнера Docker (Linux или Windows) эмулятора не поддерживает API для Apache Cassandra, API для Apache Gremlin или API для таблицы.
Чтобы приступить к работе, скачайте и установите последнюю версию эмулятора Azure Cosmos DB на локальный компьютер.
Скачайте эмулятор Azure Cosmos DB.
Запустите установщик на локальном компьютере с правами администратора.
Эмулятор автоматически устанавливает соответствующие сертификаты разработчика и настраивает правила брандмауэра на локальном компьютере.
Запуск эмулятора
После скачивания запустите эмулятор с включенным вашим API.
Вариант контейнера Docker эмулятора не поддерживает API для Apache Cassandra.
Запустите исполняемый файл эмулятора (Microsoft.Azure.Cosmos.Emulator.exe
) по %ProgramFiles%\Azure Cosmos DB Emulator
пути. Используйте эти параметры для настройки эмулятора:
|
Description |
EnableCassandraEndpoint |
Включает API для конечной точки Apache Cassandra. |
CassandraPort |
Номер порта, используемый для конечной точки. |
Microsoft.Azure.Cosmos.Emulator.exe /EnableCassandraEndpoint /CassandraPort=65200
Примечание.
Дополнительные сведения о аргументах командной строки см. в разделе параметров командной строки.
Эмулятор автоматически открывает обозреватель данных с помощью URL-адреса https://localhost:8081/_explorer/index.html
.
Вариант контейнера Docker эмулятора не поддерживает API для Apache Gremlin.
Запустите исполняемый файл эмулятора (Microsoft.Azure.Cosmos.Emulator.exe
) по %ProgramFiles%\Azure Cosmos DB Emulator
пути. Используйте эти параметры для настройки эмулятора:
|
Description |
EnableGremlinEndpoint |
Включает API для конечной точки Apache Gremlin. |
GremlinPort |
Номер порта, используемый для конечной точки. |
Microsoft.Azure.Cosmos.Emulator.exe /EnableGremlinEndpoint /GremlinPort=65400
Примечание.
Дополнительные сведения о аргументах командной строки см. в разделе параметров командной строки.
Эмулятор автоматически открывает обозреватель данных с помощью URL-адреса https://localhost:8081/_explorer/index.html
.
Вариант контейнера Docker эмулятора не поддерживает API для таблицы.
Запустите исполняемый файл эмулятора (Microsoft.Azure.Cosmos.Emulator.exe
) по %ProgramFiles%\Azure Cosmos DB Emulator
пути. Используйте эти параметры для настройки эмулятора:
|
Description |
EnableTableEndpoint |
Включает API для конечной точки таблицы. |
TablePort |
Номер порта, используемый для конечной точки. |
Microsoft.Azure.Cosmos.Emulator.exe /EnableTableEndpoint /TablePort=65500
Примечание.
Дополнительные сведения о аргументах командной строки см. в разделе параметров командной строки.
Эмулятор автоматически открывает обозреватель данных с помощью URL-адреса https://localhost:8081/_explorer/index.html
.
Запустите новый контейнер с помощью образа контейнера и следующей конфигурации:
|
Description |
AZURE_COSMOS_EMULATOR_PARTITION_COUNT (Необязательно) |
Укажите количество используемых секций. |
AZURE_COSMOS_EMULATOR_ENABLE_DATA_PERSISTENCE (Необязательно) |
Включите сохраняемость данных между запусками эмулятора. |
AZURE_COSMOS_EMULATOR_IP_ADDRESS_OVERRIDE (Необязательно) |
Переопределите IP-адрес эмулятора по умолчанию. |
Для систем Linux используйте:
docker run \
--publish 8081:8081 \
--publish 10250-10255:10250-10255 \
--name linux-emulator \
--detach \
mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:latest
Для систем Windows используйте:
$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
Перейдите к https://localhost:8081/_explorer/index.html
обозревателе данных.
Создание нового каталога для подключения привязки
Запустите новый контейнер с помощью образа контейнера.
$parameters = @(
"--publish", "8081:8081"
"--publish", "10250-10255:10250-10255"
"--name", "windows-emulator"
"--detach"
)
docker run @parameters mcr.microsoft.com/cosmosdb/windows/azure-cosmos-emulator
Перейдите к https://localhost:8081/_explorer/index.html
обозревателе данных.
Запустите эмулятор, выбрав приложение в Windows меню .
Кроме того, можно запустить исполняемый файл эмулятора (Microsoft.Azure.Cosmos.Emulator.exe
) по %ProgramFiles%\Azure Cosmos DB Emulator
пути.
Кроме того, вы можете запустить эмулятор из командной строки. Используйте эти параметры для настройки эмулятора:
|
Description |
Port |
Номер порта, используемый для конечной точки API для NoSQL. |
Microsoft.Azure.Cosmos.Emulator.exe /Port=65000
Примечание.
Дополнительные сведения о аргументах командной строки см. в разделе параметров командной строки.
Эмулятор автоматически открывает обозреватель данных с помощью URL-адреса https://localhost:8081/_explorer/index.html
.
Запустите новый контейнер с помощью образа контейнера и следующей конфигурации:
|
Description |
AZURE_COSMOS_EMULATOR_ENABLE_MONGODB_ENDPOINT |
Укажите версию используемой конечной точки MongoDB. Поддерживаемые конечные точки включают: 3.2 , 3.6 или 4.0 . |
AZURE_COSMOS_EMULATOR_PARTITION_COUNT (Необязательно) |
Укажите количество используемых секций. |
AZURE_COSMOS_EMULATOR_ENABLE_DATA_PERSISTENCE (Необязательно) |
Включите сохраняемость данных между запусками эмулятора. |
AZURE_COSMOS_EMULATOR_IP_ADDRESS_OVERRIDE (Необязательно) |
Переопределите IP-адрес эмулятора по умолчанию. |
Для систем Linux используйте:
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
Для систем Windows используйте:
$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
Перейдите к https://localhost:8081/_explorer/index.html
обозревателе данных.
Образ контейнера Docker (Windows) не поддерживает API для MongoDB.
Запустите исполняемый файл эмулятора (Microsoft.Azure.Cosmos.Emulator.exe
) по %ProgramFiles%\Azure Cosmos DB Emulator
пути. Используйте эти параметры для настройки эмулятора:
|
Description |
EnableMongoDbEndpoint |
Включает API для конечной точки MongoDB в указанной версии MongoDB. |
MongoPort |
Номер порта, используемый для конечной точки. |
Microsoft.Azure.Cosmos.Emulator.exe /EnableMongoDbEndpoint=4.0 /MongoPort=65200
Примечание.
Дополнительные сведения о аргументах командной строки и версиях MongoDB, поддерживаемых эмулятором, см . в параметрах командной строки.
Эмулятор автоматически открывает обозреватель данных с помощью URL-адреса https://localhost:8081/_explorer/index.html
.
Импорт TLS/SSL-сертификата эмулятора
Импортируйте TLS/SSL-сертификат эмулятора, чтобы использовать эмулятор с предпочитаемым пакетом SDK разработчика без отключения TLS/SSL на клиенте.
Вариант контейнера Docker (Linux или Windows) эмулятора не поддерживает API для Apache Cassandra, API для Apache Gremlin или API для таблицы.
Локальная установка эмулятора Windows автоматически импортирует СЕРТИФИКАТЫ TLS/SSL. Никаких дальнейших действий не требуется.
Сертификат для эмулятора доступен по пути _explorer/emulator.pem
в работающем контейнере. Используется curl
для скачивания сертификата из запущенного контейнера на локальный компьютер.
Получите сертификат из запущенного контейнера.
Для систем Linux используйте:
curl --insecure https://localhost:8081/_explorer/emulator.pem > ~/emulatorcert.crt
Для систем Windows используйте:
$parameters = @{
Uri = 'https://localhost:8081/_explorer/emulator.pem'
Method = 'GET'
OutFile = 'emulatorcert.crt'
SkipCertificateCheck = $True
}
Invoke-WebRequest @parameters
Повторно создайте пакет сертификатов с помощью соответствующей команды для операционной системы.
Для систем Linux на основе Debian (например, Ubuntu) используйте:
sudo update-ca-certificates
Для систем Linux на основе Red Hat (например, CentOS, Fedora) используйте:
sudo update-ca-trust
Для систем Windows используйте:
certutil -f -addstore "Root" ~/emulatorcert.crt
Дополнительные инструкции см. в документации по операционной системе.
Образ контейнера Docker (Windows) не поддерживает API для MongoDB.
Локальная установка эмулятора Windows автоматически импортирует СЕРТИФИКАТЫ TLS/SSL. Никаких дальнейших действий не требуется.
Сертификат для эмулятора доступен по пути /_explorer/emulator.pem
в работающем контейнере.
Скачайте сертификат из запущенного контейнера на локальный компьютер.
Для систем Linux используйте:
curl --insecure https://localhost:8081/_explorer/emulator.pem > ~/emulatorcert.crt
Для систем Windows используйте:
$parameters = @{
Uri = 'https://localhost:8081/_explorer/emulator.pem'
Method = 'GET'
OutFile = 'emulatorcert.crt'
SkipCertificateCheck = $True
}
Invoke-WebRequest @parameters
Примечание.
Возможно, потребуется изменить узел (или IP-адрес) и номер порта, если вы ранее изменили эти значения.
Установите сертификат в соответствии с процессом, который обычно используется для операционной системы. Например, в Linux вы скопируете сертификат в /usr/local/share/ca-certificates/
путь.
Для систем Linux используйте:
cp ~/emulatorcert.crt /usr/local/share/ca-certificates/
Для систем Windows используйте:
$parameters = @{
FilePath = 'emulatorcert.crt'
CertStoreLocation = 'Cert:\CurrentUser\Root'
}
Import-Certificate @parameters
Для систем Linux повторно создайте пакет сертификатов с помощью соответствующей команды для дистрибутива Linux.
Для систем Linux на основе Debian (например, Ubuntu) используйте:
sudo update-ca-certificates
Для систем Linux на основе Red Hat (например, CentOS, Fedora) используйте:
sudo update-ca-trust
Дополнительные инструкции см. в документации по операционной системе.
Сертификат для эмулятора доступен в папке C:\CosmosDB.Emulator\bind-mount
на работающем контейнере. Папка также содержит скрипт для автоматической установки сертификата.
Используется docker cp
для копирования всей папки на локальный компьютер.
docker cp windows-emulator:C:\CosmosDB.Emulator\bind-mount .
Запустите скрипт importcert.ps1 в папке.
.\bind-mount\importcert.ps1
Локальная установка эмулятора Windows автоматически импортирует СЕРТИФИКАТЫ TLS/SSL. Никаких дальнейших действий не требуется.
Подключение к эмулятору из пакета SDK
Каждый пакет SDK включает класс клиента, обычно используемый для подключения пакета SDK к учетной записи Azure Cosmos DB. Используя учетные данные эмулятора, вы можете подключить пакет SDK к экземпляру эмулятора.
Используйте API Azure Cosmos DB для NoSQL .NET SDK для подключения к эмулятору из приложения .NET.
Запустите пустую папку.
Создание консольного приложения .NET
dotnet new console
Microsoft.Azure.Cosmos
Добавьте пакет из NuGet.
dotnet add package Microsoft.Azure.Cosmos
Откройте файл Program.cs.
Удалите любое существующее содержимое в файле.
Добавьте блок using для Microsoft.Azure.Cosmos
пространства имен.
using Microsoft.Azure.Cosmos;
Создайте новый экземпляр CosmosClient с помощью учетных данных эмулятора.
using CosmosClient client = new(
accountEndpoint: "https://localhost:8081/",
authKeyOrResourceToken: "C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw=="
);
Создание базы данных и контейнера с помощью CreateDatabaseIfNotExistsAsync и CreateContainerIfNotExistsAsync.
Database database = await client.CreateDatabaseIfNotExistsAsync(
id: "cosmicworks",
throughput: 400
);
Container container = await database.CreateContainerIfNotExistsAsync(
id: "products",
partitionKeyPath: "/id"
);
Создайте новый элемент в контейнере с помощью UpsertItemAsync.
var item = new
{
id = "68719518371",
name = "Kiama classic surfboard"
};
await container.UpsertItemAsync(item);
Запустите приложение .NET.
dotnet run
Предупреждение
При возникновении ошибки SSL может потребоваться отключить TLS/SSL для приложения. Это обычно происходит, если вы разрабатываете на локальном компьютере, используя эмулятор Azure Cosmos DB в контейнере и не импортировали SSL-сертификат контейнера. Чтобы устранить эту проблему, настройте параметры клиента, чтобы отключить проверку TLS/SSL перед созданием клиента:
CosmosClientOptions options = new ()
{
HttpClientFactory = () => new HttpClient(new HttpClientHandler()
{
ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator
}),
ConnectionMode = ConnectionMode.Gateway,
};
using CosmosClient client = new(
...,
...,
clientOptions: options
);
Совет
Дополнительные операции, которые можно выполнить с помощью пакета SDK для .NET, см. в руководстве разработчика .NET.
Используйте API Azure Cosmos DB для NoSQL Python SDK для подключения к эмулятору из приложения Python.
Запустите пустую папку.
azure-cosmos
Импортируйте пакет из индекса пакетов Python.
pip install azure-cosmos
Создайте файл app.py.
Импорт CosmosClient
и PartitionKey
из azure.cosmos
модуля.
from azure.cosmos import CosmosClient, PartitionKey
Создайте новое CosmosClient с помощью учетных данных эмулятора.
client = CosmosClient(
url="<https://localhost:8081>",
credential=(
"C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGG"
"yPMbIZnqyMsEcaGQy67XIw/Jw=="
),
)
Создание базы данных и контейнера с помощью create_database_if_not_exists и 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",
),
)
Используется upsert_item для создания нового элемента в контейнере.
item = {"id": "68719518371", "name": "Kiama classic surfboard"}
container.upsert_item(item)
Запустите приложение Python.
python app.py
Предупреждение
При возникновении ошибки SSL может потребоваться отключить TLS/SSL для приложения. Это обычно происходит, если вы разрабатываете на локальном компьютере, используя эмулятор Azure Cosmos DB в контейнере и не импортировали SSL-сертификат контейнера. Чтобы устранить эту проблему, настройте приложение, чтобы отключить проверку TLS/SSL перед созданием клиента:
import urllib3
urllib3.disable_warnings()
Если вы по-прежнему сталкиваетесь с ошибками SSL, возможно, Python получает сертификаты из другого хранилища сертификатов. Чтобы определить путь, по которому Python ищет сертификаты, выполните следующие действия.
Внимание
Если вы используете виртуальную среду Python (venv), убедитесь, что она активируется перед выполнением команд!
Откройте окно терминала.
Запустите интерпретатор Python, введя Python или Python3 в зависимости от версии Python.
В интерпретаторе Python выполните следующие команды:
from requests.utils import DEFAULT_CA_BUNDLE_PATH
print(DEFAULT_CA_BUNDLE_PATH)
В виртуальной среде путь может быть (по крайней мере в Ubuntu):
path/to/venv/lib/pythonX.XX/site-packages/certifi/cacert.pem
Вне виртуальной среды путь может быть (по крайней мере в Ubuntu):
/etc/ssl/certs/ca-certificates.crt
После определения DEFAULT_CA_BUNDLE_PATH откройте новый терминал и выполните следующие команды, чтобы добавить сертификат эмулятора в пакет сертификатов:
Внимание
Если DEFAULT_CA_BUNDLE_PATH переменная указывает на системный каталог, может возникнуть ошибка "Отказано в разрешении". В этом случае вам потребуется выполнить команды с повышенными привилегиями (как корневой). Кроме того, необходимо обновить и повторно создать пакет сертификатов после выполнения указанных команд.
# 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
Используйте API Azure Cosmos DB для NoSQL Node.js SDK для подключения к эмулятору из приложения Node.js/JavaScript.
Запустите пустую папку.
Инициализация нового модуля.
npm init es6 --yes
@azure/cosmos
Установите пакет из узла диспетчер пакетов.
npm install --save @azure/cosmos
Создайте файл app.js.
CosmosClient
Импортируйте тип из @azure/cosmos
модуля.
import { CosmosClient } from '@azure/cosmos'
Используется CosmosClient
для создания нового экземпляра клиента с помощью учетных данных эмулятора.
const cosmosClient = new CosmosClient({
endpoint: 'https://localhost:8081/',
key: 'C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw=='
})
Используйте и Containers.createIfNotExists
создайте Databases.createIfNotExists
базу данных и контейнер.
const { database } = await cosmosClient.databases.createIfNotExists({
id: 'cosmicworks',
throughput: 400
})
const { container } = await database.containers.createIfNotExists({
id: 'products',
partitionKey: {
paths: [
'/id'
]
}
})
Upsert новый элемент с помощью Items.upsert
.
const item = {
id: '68719518371',
name: 'Kiama classic surfboard'
}
container.items.upsert(item)
Запустите приложение Node.js.
node app.js
Предупреждение
При возникновении ошибки SSL может потребоваться отключить TLS/SSL для приложения. Это обычно происходит, если вы разрабатываете на локальном компьютере, используя эмулятор Azure Cosmos DB в контейнере и не импортировали SSL-сертификат контейнера. Чтобы устранить эту проблему, настройте приложение, чтобы отключить проверку TLS/SSL перед созданием клиента:
process.env.NODE_TLS_REJECT_UNAUTHORIZED = 0
Используйте драйвер MongoDB .NET для подключения к эмулятору из приложения .NET.
Запустите пустую папку.
Создание консольного приложения .NET
dotnet new console
MongoDB.Driver
Добавьте пакет из NuGet.
dotnet add package MongoDB.Driver
Откройте файл Program.cs.
Удалите любое существующее содержимое в файле.
Добавьте блок using для MongoDB.Driver
пространства имен.
using MongoDB.Driver;
Создайте новый экземпляр MongoClient
с помощью учетных данных эмулятора.
var client = new MongoClient(
"mongodb://localhost:C2y6yDjf5%2FR%2Bob0N8A7Cgv30VRDJIWEHLM%2B4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw%2FJw%3D%3D@localhost:10255/admin?ssl=true&retrywrites=false"
);
Получение базы данных и контейнера с помощью GetDatabase
и GetCollection<>
.
var database = client.GetDatabase("cosmicworks");
var collection = database.GetCollection<dynamic>("products");
Создайте новый элемент в XXX с помощью InsertOneAsync
.
var item = new
{
name = "Kiama classic surfboard"
};
await collection.InsertOneAsync(item);
Запустите приложение .NET.
dotnet run
Используйте драйвер Python MongoDB для подключения к эмулятору из приложения Python.
Запустите пустую папку.
pymongo
Импортируйте пакет из индекса пакетов Python.
pip install pymongo
Создайте файл app.py.
os
Импортируйте модули sys
и pymongo
модули.
import pymongo
Создайте новое MongoClient
с помощью учетных данных эмулятора.
client = pymongo.MongoClient(
host=(
"mongodb://localhost:C2y6yDjf5%2FR%2Bob0N8A7Cgv30VRDJIWEHLM%2B4QDU5DE2"
"nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw%2FJw%3D%3D@localhost:10255/a"
"dmin?ssl=true"
),
tls=True,
)
Создайте базу данных и контейнер с помощью list_database_names
list_collection_names
CreateDatabase
и 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"})
Используется update_one
для создания нового элемента в контейнере.
item = {"id": "68719518371", "name": "Kiama classic surfboard"}
collection.update_one(
filter={"id": item["id"]}, update={"$set": item}, upsert=True
)
Запустите приложение Python.
python app.py
Используйте драйвер Node.js MongoDB для подключения к эмулятору из приложения Node.js/JavaScript.
Запустите пустую папку.
Инициализация нового модуля.
npm init es6 --yes
mongodb
Установите пакет из узла диспетчер пакетов.
npm install --save mongodb
Создайте файл app.js.
MongoClient
Импортируйте тип из mongodb
модуля.
import { MongoClient } from 'mongodb'
Используется MongoClient
для создания нового экземпляра клиента с помощью учетных данных эмулятора. Используется connect
для подключения к эмулятору.
const client = new MongoClient(
'mongodb://localhost:C2y6yDjf5%2FR%2Bob0N8A7Cgv30VRDJIWEHLM%2B4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw%2FJw%3D%3D@localhost:10255/admin?ssl=true&retrywrites=false'
)
await client.connect()
Используйте и collection
создайте db
базу данных и контейнер.
const database = client.db('cosmicworks')
const collection = database.collection('products')
Создание нового элемента с помощью insertOne
.
const item = {
name: 'Kiama classic surfboard'
}
await collection.insertOne(item)
Запустите приложение Node.js.
node app.js
Предупреждение
При возникновении ошибки SSL может потребоваться отключить TLS/SSL для приложения. Это обычно происходит, если вы разрабатываете на локальном компьютере, используя эмулятор Azure Cosmos DB в контейнере и не импортировали SSL-сертификат контейнера. Чтобы устранить эту проблему, настройте приложение, чтобы отключить проверку TLS/SSL перед созданием клиента:
const client = new MongoClient(
...,
{ tlsAllowInvalidCertificates: true }
)
Используйте драйвер Apache Cassandra .NET для подключения к эмулятору из приложения .NET.
Запустите пустую папку.
Создание консольного приложения .NET
dotnet new console
CassandraCSharpDriver
Добавьте пакет из NuGet.
dotnet add package CassandraCSharpDriver
Откройте файл Program.cs.
Удалите любое существующее содержимое в файле.
Добавьте блок using для Cassandra
пространства имен.
using Cassandra;
Создайте новый экземпляр Cluster
с помощью учетных данных эмулятора. Создание нового сеанса с помощью 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();
Создание базы данных и контейнера с помощью PrepareAsync
и 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());
Создайте новый элемент в таблице с помощью ExecuteAsync
. Используется 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);
Запустите приложение .NET.
dotnet run
Используйте драйвер Python Apache Cassandra для подключения к эмулятору из приложения Python.
Запустите пустую папку.
cassandra-driver
Импортируйте пакет из индекса пакетов Python.
pip install cassandra-driver
Создайте файл app.py.
Импортируйте PROTOCOL_TLS_CLIENT
и SSLContext
CERT_NONE
из ssl
модуля. Затем импортируйте Cluster
из cassandra.cluster
модуля. Наконец, импортируйте PlainTextAuthProvider
из cassandra.auth
модуля.
from ssl import PROTOCOL_TLS_CLIENT, SSLContext, CERT_NONE
from cassandra.cluster import Cluster
from cassandra.auth import PlainTextAuthProvider
Создайте новую переменную контекста TLS/SSL с помощью SSLContext
. Настройте контекст, чтобы не проверить самозаверяющий сертификат эмулятора.
ssl_context = SSLContext(PROTOCOL_TLS_CLIENT)
ssl_context.check_hostname = False
ssl_context.verify_mode = CERT_NONE
Создайте новое session
с помощью учетных данных эмулятора, Cluster
PlainTextAuthProvider
а также 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()
Создайте новое пространство ключей и таблицу с помощью 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)"
)
Используется session.execute
для создания нового элемента в таблице.
item = {"id": "68719518371", "name": "Kiama classic surfboard"}
session.execute(
"INSERT INTO cosmicworks.products (id, name) VALUES (%s, %s)",
[item["id"], item["name"]],
)
Запустите приложение Python.
python app.py
Используйте драйвер Apache Cassandra Node.js для использования эмулятора из приложения Node.js/JavaScript.
Запустите пустую папку.
Инициализация нового модуля.
npm init es6 --yes
cassandra-driver
Установите пакет из узла диспетчер пакетов.
npm install --save cassandra-driver
Создайте файл app.js.
Client
Импортируйте тип и auth
пространство имен из cassandra-driver
модуля.
import { Client, auth } from 'cassandra-driver'
Используется PlainTextAuthProvider
для создания нового объекта для учетных данных эмулятора. Используется 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'
})
Используется execute
для запуска сервера команд для создания пространства ключей и таблицы.
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)'
)
Используйте execute
еще раз, чтобы создать новый элемент с параметрами.
const item = {
id: '68719518371',
name: 'Kiama classic surfboard'
}
await client.execute(
'INSERT INTO cosmicworks.products (id, name) VALUES (?, ?)',
[
item.id,
item.name
]
)
Запустите приложение Node.js.
node app.js
Предупреждение
При возникновении ошибки SSL может потребоваться отключить TLS/SSL для приложения. Это обычно происходит, если вы разрабатываете на локальном компьютере, используя эмулятор Azure Cosmos DB в контейнере и не импортировали SSL-сертификат контейнера. Чтобы устранить эту проблему, настройте клиент, чтобы отключить проверку TLS/SSL:
const client = new Client({
...,
...,
...,
sslOptions: {
rejectUnauthorized: false
}
})
Внимание
Перед началом работы API для Apache Gremlin требуется создать ресурсы в эмуляторе. Создайте базу данных с именем db1
и контейнером с именем coll1
. Параметры пропускной способности не относятся к этому руководству и могут быть заданы так же низко, как вы хотите.
Используйте драйвер Apache Gremlin .NET для подключения к эмулятору из приложения .NET.
Запустите пустую папку.
Создание консольного приложения .NET
dotnet new console
Gremlin.Net
Добавьте пакет из NuGet.
dotnet add package Gremlin.Net
Откройте файл Program.cs.
Удалите любое существующее содержимое в файле.
Добавьте блок using для Gremlin.Net.Driver
пространства имен.
using Gremlin.Net.Driver;
Создайте новый экземпляр GremlinServer
и GremlinClient
с помощью учетных данных эмулятора.
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()
);
Очистка графа с помощью SubmitAsync
.
await client.SubmitAsync(
requestScript: "g.V().drop()"
);
Используйте SubmitAsync
еще раз, чтобы добавить новый элемент в граф с указанными параметрами.
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" }
}
);
Запустите приложение .NET.
dotnet run
Используйте драйвер Python Apache Gremlin для подключения к эмулятору из приложения Python.
Запустите пустую папку.
gremlinpython
Импортируйте пакет из индекса пакетов Python.
pip install gremlinpython
Создайте файл app.py.
Импорт client
из gremlin_python.driver
модуля.
from gremlin_python.driver import client
Создайте новое Client
с помощью учетных данных эмулятора.
client = client.Client(
url="ws://localhost:8901/",
traversal_source="g",
username="/dbs/db1/colls/coll1",
password=(
"C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnq"
"yMsEcaGQy67XIw/Jw=="
),
)
Очистка графа с помощью client.submit
.
client.submit(message="g.V().drop()")
Используйте client.submit
еще раз, чтобы добавить новый элемент в граф с указанными параметрами.
client.submit(
message=(
"g.addV('product').property('id', prop_id).property('name', prop_name)"
),
bindings={
"prop_id": "68719518371",
"prop_name": "Kiama classic surfboard",
},
)
Запустите приложение Python.
python app.py
Используйте драйвер Apache Gremlin Node.js для использования эмулятора из приложения Node.js/JavaScript.
Запустите пустую папку.
Инициализация нового модуля.
npm init es6 --yes
gremlin
Установите пакет из узла диспетчер пакетов.
npm install --save gremlin
Создайте файл app.js.
gremlin
Импорт модуля.
import gremlin from 'gremlin'
Используется PlainTextSaslAuthenticator
для создания нового объекта для учетных данных эмулятора. Используется 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()
Используется submit
для запуска сервера команд для очистки графа, если у него уже есть данные.
await client.submit('g.V().drop()')
Используйте submit
еще раз, чтобы добавить новый элемент в граф с указанными параметрами.
await client.submit(
'g.addV(\'product\').property(\'id\', prop_id).property(\'name\', prop_name)', {
prop_id: '68719518371',
prop_name: 'Kiama classic surfboard'
}
)
Запустите приложение Node.js.
node app.js
Используйте пакет SDK таблиц Azure для .NET для подключения к эмулятору из приложения .NET.
Запустите пустую папку.
Создание консольного приложения .NET
dotnet new console
Azure.Data.Tables
Добавьте пакет из NuGet.
dotnet add package Azure.Data.Tables
Откройте файл Program.cs.
Удалите любое существующее содержимое в файле.
Добавьте блок using для Azure.Data.Tables
пространства имен.
using Azure.Data.Tables;
Создайте новый экземпляр TableServiceClient
с помощью учетных данных эмулятора.
var serviceClient = new TableServiceClient(
connectionString: "DefaultEndpointsProtocol=http;AccountName=localhost;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==;TableEndpoint=http://localhost:8902/;"
);
Используется GetTableClient
для создания нового экземпляра TableClient
с именем таблицы. Затем убедитесь, что таблица существует с помощью CreateIfNotExistsAsync
.
var client = serviceClient.GetTableClient(
tableName: "cosmicworksproducts"
);
await client.CreateIfNotExistsAsync();
Создайте новый record
тип для элементов.
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; }
}
Создайте новый элемент в таблице с помощью UpsertEntityAsync
и Replace
режима.
var item = new Product
{
RowKey = "68719518371",
PartitionKey = "Surfboards",
Name = "Kiama classic surfboard",
Timestamp = DateTimeOffset.Now
};
await client.UpsertEntityAsync(
entity: item,
mode: TableUpdateMode.Replace
);
Запустите приложение .NET.
dotnet run
Используйте пакет SDK для Python таблиц Azure для подключения к эмулятору из приложения Python.
Запустите пустую папку.
azure-data-tables
Импортируйте пакет из индекса пакетов Python.
pip install azure-data-tables
Создайте файл app.py.
Импорт TableServiceClient
и UpdateMode
из azure.data.tables
модуля.
from azure.data.tables import TableServiceClient, UpdateMode
Используется 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/;"
)
)
Создайте новый клиент уровня таблицы с помощью create_table_if_not_exists
.
client = service.create_table_if_not_exists(table_name="cosmicworksproducts")
Используется upsert_entity
для создания нового элемента в контейнере.
item = {
"PartitionKey": "68719518371",
"RowKey": "Surfboards",
"name": "Kiama classic surfboard",
}
client.upsert_entity(entity=item, mode=UpdateMode.REPLACE)
Запустите приложение Python.
python app.py
Используйте пакет SDK JavaScript для таблиц Azure для использования эмулятора из приложения Node.js/JavaScript.
Запустите пустую папку.
Инициализация нового модуля.
npm init es6 --yes
@azure/data-tables
Установите пакет из узла диспетчер пакетов.
npm install --save @azure/data-tables
Создайте файл app.js.
TableClient
Импортируйте тип из @azure/data-tables
модуля.
import { TableClient } from '@azure/data-tables'
Используется TableClient.fromConnectionString
для создания нового экземпляра клиента с помощью строка подключения эмулятора.
const client = TableClient.fromConnectionString(
'DefaultEndpointsProtocol=http;AccountName=localhost;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==;TableEndpoint=http://localhost:8902/;',
'cosmicworksproducts'
)
Используется createTable
для создания новой таблицы, если она еще не существует.
await client.createTable()
Используется upsertEntity
для создания или замены элемента.
const item = {
partitionKey: '68719518371',
rowKey: 'Surfboards',
name: 'Kiama classic surfboard'
}
await client.upsertEntity(
item,
'Replace'
)
Запустите приложение Node.js.
node app.js
Предупреждение
При возникновении ошибки SSL может потребоваться отключить TLS/SSL для приложения. Это обычно происходит, если вы разрабатываете на локальном компьютере, используя эмулятор Azure Cosmos DB в контейнере и не импортировали SSL-сертификат контейнера. Чтобы устранить эту проблему, настройте клиент, чтобы отключить проверку TLS/SSL:
const client = TableClient.fromConnectionString(
...,
...,
{
allowInsecureConnection: true
}
)
Использование эмулятора в рабочем процессе CI GitHub Actions
Чтобы запустить рабочую нагрузку непрерывной интеграции, которая автоматически проверяет приложение, используйте эмулятор Azure Cosmos DB с набором тестов из выбранной платформы. Эмулятор Azure Cosmos DB предварительно установлен в windows-latest
варианте размещенных средств выполнения GitHub Action.
Запустите набор тестов с помощью встроенного тестового драйвера для .NET и платформы тестирования, например MSTest, NUnit или XUnit.
Убедитесь, что набор модульных тестов для приложения работает должным образом.
dotnet test
Создайте рабочий процесс в репозитории GitHub в файле с именем .github/workflows/ci.yml
.
Добавьте задание в рабочий процесс, чтобы запустить эмулятор Azure Cosmos DB с помощью PowerShell и запустить набор модульных тестов.
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
Тестирование операций приложения и базы данных Python с помощью pytest
.
Убедитесь, что набор модульных тестов для приложения работает должным образом.
pip install -U pytest
pytest
Создайте рабочий процесс в репозитории GitHub в файле с именем .github/workflows/ci.yml
.
Добавьте задание в рабочий процесс, чтобы запустить эмулятор Azure Cosmos DB с помощью PowerShell и запустить набор модульных тестов.
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
Используйте mocha
для тестирования приложения Node.js и его изменений базы данных.
Убедитесь, что набор модульных тестов для приложения работает должным образом.
npm install --global mocha
mocha
Создайте рабочий процесс в репозитории GitHub в файле с именем .github/workflows/ci.yml
.
Добавьте задание в рабочий процесс, чтобы запустить эмулятор Azure Cosmos DB с помощью PowerShell и запустить набор модульных тестов.
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
Следующий шаг