Разработка локально с помощью эмулятора Azure Cosmos DB
Статья
Распространенный вариант использования эмулятора — служить базой данных разработки при создании приложений. С помощью эмулятора для разработки можно узнать характеристики создания и моделирования данных для базы данных, такой как Azure Cosmos DB, без каких-либо затрат на обслуживание. Кроме того, использование эмулятора в рамках рабочего процесса автоматизации может обеспечить выполнение одного набора тестов интеграции. Вы можете убедиться, что одни и те же тесты выполняются локально на компьютере разработки и удаленно в задании непрерывной интеграции.
mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator Извлеките образ контейнера Linux с помощью mongodb тега из реестра контейнеров на локальный узел Docker.
Вариант контейнера Docker эмулятора не поддерживает API для Apache Cassandra.
Запустите исполняемый файл эмулятора (Microsoft.Azure.Cosmos.Emulator.exe) по %ProgramFiles%\Azure Cosmos DB Emulator пути. Используйте эти параметры для настройки эмулятора:
Вариант контейнера Docker эмулятора не поддерживает API для Apache Gremlin.
Запустите исполняемый файл эмулятора (Microsoft.Azure.Cosmos.Emulator.exe) по %ProgramFiles%\Azure Cosmos DB Emulator пути. Используйте эти параметры для настройки эмулятора:
Вариант контейнера Docker эмулятора не поддерживает API для таблицы.
Запустите исполняемый файл эмулятора (Microsoft.Azure.Cosmos.Emulator.exe) по %ProgramFiles%\Azure Cosmos DB Emulator пути. Используйте эти параметры для настройки эмулятора:
Перейдите к 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.
Сертификат для эмулятора доступен по пути _explorer/emulator.pem в работающем контейнере. Используется curl для скачивания сертификата из запущенного контейнера на локальный компьютер.
Возможно, потребуется изменить узел (или IP-адрес) и номер порта, если вы ранее изменили эти значения.
Установите сертификат в соответствии с процессом, который обычно используется для операционной системы. Например, в Linux вы скопируете сертификат в /usr/local/share/ca-certificates/ путь.
Для систем 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 для копирования всей папки на локальный компьютер.
Локальная установка эмулятора Windows автоматически импортирует СЕРТИФИКАТЫ TLS/SSL. Никаких дальнейших действий не требуется.
Подключение к эмулятору из пакета SDK
Каждый пакет SDK включает класс клиента, обычно используемый для подключения пакета SDK к учетной записи Azure Cosmos DB. Используя учетные данные эмулятора, вы можете подключить пакет SDK к экземпляру эмулятора.
Создайте новый элемент в контейнере с помощью 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 перед созданием клиента:
При возникновении ошибки 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):
Вне виртуальной среды путь может быть (по крайней мере в 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
При возникновении ошибки SSL может потребоваться отключить TLS/SSL для приложения. Это обычно происходит, если вы разрабатываете на локальном компьютере, используя эмулятор Azure Cosmos DB в контейнере и не импортировали SSL-сертификат контейнера. Чтобы устранить эту проблему, настройте приложение, чтобы отключить проверку TLS/SSL перед созданием клиента:
Добавьте блок 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"
);
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 для создания нового элемента в контейнере.
При возникновении ошибки SSL может потребоваться отключить TLS/SSL для приложения. Это обычно происходит, если вы разрабатываете на локальном компьютере, используя эмулятор Azure Cosmos DB в контейнере и не импортировали SSL-сертификат контейнера. Чтобы устранить эту проблему, настройте приложение, чтобы отключить проверку TLS/SSL перед созданием клиента:
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.
Импортируйте PROTOCOL_TLS_CLIENTи SSLContextCERT_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. Настройте контекст, чтобы не проверить самозаверяющий сертификат эмулятора.
Создайте новое пространство ключей и таблицу с помощью 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 для создания нового элемента в таблице.
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 еще раз, чтобы создать новый элемент с параметрами.
При возникновении ошибки SSL может потребоваться отключить TLS/SSL для приложения. Это обычно происходит, если вы разрабатываете на локальном компьютере, используя эмулятор Azure Cosmos DB в контейнере и не импортировали SSL-сертификат контейнера. Чтобы устранить эту проблему, настройте клиент, чтобы отключить проверку TLS/SSL:
Перед началом работы API для Apache Gremlin требуется создать ресурсы в эмуляторе. Создайте базу данных с именем db1 и контейнером с именем coll1. Параметры пропускной способности не относятся к этому руководству и могут быть заданы так же низко, как вы хотите.
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()
);
Используйте драйвер 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 для подключения к эмулятору с помощью учетных данных.
Создайте новый экземпляр TableServiceClient с помощью учетных данных эмулятора.
var serviceClient = new TableServiceClient(
connectionString: "DefaultEndpointsProtocol=http;AccountName=localhost;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==;TableEndpoint=http://localhost:8902/;"
);
При возникновении ошибки SSL может потребоваться отключить TLS/SSL для приложения. Это обычно происходит, если вы разрабатываете на локальном компьютере, используя эмулятор Azure Cosmos DB в контейнере и не импортировали SSL-сертификат контейнера. Чтобы устранить эту проблему, настройте клиент, чтобы отключить проверку TLS/SSL:
Использование эмулятора в рабочем процессе CI GitHub Actions
Чтобы запустить рабочую нагрузку непрерывной интеграции, которая автоматически проверяет приложение, используйте эмулятор Azure Cosmos DB с набором тестов из выбранной платформы. Эмулятор Azure Cosmos DB предварительно установлен в windows-latest варианте размещенных средств выполнения GitHub Action.