Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Следующее поколение эмулятора Azure Cosmos DB полностью основано на Linux и доступно в качестве контейнера Docker. Он поддерживает работу в различных процессорах и операционных системах.
Внимание
Эта версия эмулятора поддерживает только API для NoSQL в режиме шлюза с выбором подмножества функций. Дополнительные сведения см. в разделе поддержки функций.
Предварительные условия
Установка
Получение образа контейнера Docker с помощью docker pull
. Образ контейнера публикуется в Реестр артефактов Microsoft как mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:vnext-preview
.
docker pull mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:vnext-preview
Бег
Чтобы запустить контейнер, используйте docker run
. Затем используйте docker ps
для проверки того, запущен ли контейнер.
docker run --detach --publish 8081:8081 --publish 1234:1234 mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:vnext-preview
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c1bb8cf53f8a mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:vnext-preview "/bin/bash -c /home/…" 5 seconds ago Up 5 seconds 0.0.0.0:1234->1234/tcp, :::1234->1234/tcp, 0.0.0.0:8081->8081/tcp, :::8081->8081/tcp <container-name>
Примечание.
Эмулятор состоит из двух компонентов:
-
Обозреватель данных — интерактивное изучение данных в эмуляторе. По умолчанию это выполняется через порт
1234
-
Эмулятор Azure Cosmos DB — локальная версия службы базы данных Azure Cosmos DB. По умолчанию это выполняется через порт
8081
.
Конечная точка шлюза эмулятора обычно доступна на порту 8081
по адресу http://localhost:8081. Чтобы перейти к обозревателе данных, используйте адрес http://localhost:1234 в веб-браузере. Для доступности обозревателя данных может потребоваться несколько секунд. Конечная точка шлюза обычно доступна немедленно.
Внимание
Пакеты SDK для .NET и Java не поддерживают режим HTTP в эмуляторе. Так как эта версия эмулятора начинается с HTTP по умолчанию, необходимо явно включить HTTPS при запуске контейнера (см. ниже). Для пакета SDK для Java также потребуется установить сертификаты.
docker run --detach --publish 8081:8081 --publish 1234:1234 mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:vnext-preview --protocol https
Команды Docker
В следующей таблице приведены доступные команды Docker для настройки эмулятора. В этой таблице приведены соответствующие аргументы, переменные среды, допустимые значения, параметры по умолчанию и описания каждой команды.
Требование | Arg | Env | Допустимые значения | По умолчанию. | Описание |
---|---|---|---|---|---|
Печать параметров в stdout из контейнера |
--help , -h |
Неприменимо | Неприменимо | Неприменимо | Отображение сведений о доступной конфигурации |
Установка порта конечной точки Cosmos | --port [INT] |
ПОРТ | INT | 8081 | Порт конечной точки Cosmos в контейнере. Вам по-прежнему нужно опубликовать этот порт (например, -p 8081:8081 ). |
Укажите протокол, используемый конечной точкой Cosmos | --protocol |
ПРОТОКОЛ |
https , , http https-insecure |
http |
Протокол конечной точки Cosmos в контейнере. |
Включение обозревателя данных | --enable-explorer |
ENABLE_EXPLORER |
true , false |
true |
Включите запуск обозревателя данных Cosmos в одном контейнере. |
Установка порта, используемого обозревателем данных | --explorer-port |
EXPLORER_PORT | INT | 1 234 | Порт обозревателя данных Cosmos в контейнере. Вам по-прежнему нужно опубликовать этот порт (например, -p 1234:1234 ). |
Пользователь должен иметь возможность указать протокол, используемый обозревателем, в противном случае используется конечная точка Cosmos. | --explorer-protocol |
EXPLORER_PROTOCOL |
https , http , https-insecure |
<the value of --protocol> |
Протокол обозревателя данных Cosmos в контейнере. По умолчанию используется параметр протокола в конечной точке Cosmos. |
Укажите ключ через файл | --key-file [PATH] |
KEY_FILE | ПУТЬ | <default secret> |
Замените ключ по умолчанию на ключ, указанный в файле. Необходимо подключить этот файл к контейнеру (например, если KEY_FILE=/mykey, вы добавите следующий параметр к команде docker run: --mount type=bind,source=./myKey,target=/myKey ) |
Задайте путь к данным | --data-path [PATH] |
DATA_PATH | ПУТЬ | /data |
Укажите каталог для данных. Часто используется с docker run --mount параметром (например, если DATA_PATH=/usr/cosmos/data, вы добавите следующий параметр в выполнение docker: --mount type=bind,source=./.local/data,target=/usr/cosmos/data |
Укажите путь сертификата, используемый для https | --cert-path [PATH] |
CERT_PATH | ПУТЬ | <default cert> |
Укажите путь к сертификату для защиты трафика. Необходимо подключить этот файл в контейнер (например, если CERT_PATH=/mycert.pfx, добавьте следующую опцию при запуске Docker: --mount type=bind,source=./mycert.pfx,target=/mycert.pfx ) |
Укажите секрет сертификата, используемый для https | Неприменимо | CERT_SECRET | строка | <default secret> |
Секрет сертификата, указанного в CERT_PATH. |
Настройка уровня журнала | --log-level [LEVEL] |
LOG_LEVEL |
quiet
error , warn , info , debug , trace |
info |
Уровень подробности журналов, создаваемых эмулятором и обозревателем данных. |
Включение отправки диагностических сведений в корпорацию Майкрософт | --enable-telemetry |
ВКЛЮЧИТЬ_ТЕЛЕМЕТРИЮ |
true , false |
true |
Включите отправку журналов в корпорацию Майкрософт, чтобы помочь нам улучшить эмулятор. |
Поддержка функций
Этот эмулятор находится в активной разработке и предварительной версии. В результате поддерживаются не все функции Azure Cosmos DB. Некоторые функции также не будут поддерживаться в будущем. Эта таблица включает состояние различных функций и их уровень поддержки.
Функция | Поддержка |
---|---|
API пакетной службы | ✅ Поддерживается |
Массовый API | ✅ Поддерживается |
Лента изменений | ⚠️ Пока не реализовано |
Создание и чтение документа с данными utf | ✅ Поддерживается |
Создание коллекции | ✅ Поддержка |
Конфликт из-за двойного создания коллекции | ✅ Поддерживается |
Создание коллекции с помощью настраиваемой политики индекса | ⚠️ Пока не реализовано |
Создание коллекции с истечением срока действия TTL | ⚠️ Пока не реализовано |
Создание базы данных | ✅ Поддерживается |
Создание базы данных дважды конфликтует | ✅ Поддержанный |
Создание документа | ✅ Поддерживается |
Создание секционированных коллекций | ⚠️ Пока не реализовано |
Удаление коллекции | ✅ Поддерживается |
Удаление базы данных | ✅ Поддерживается |
Удаление документа | ✅ Поддерживается |
Получение и изменение производительности коллекции | ⚠️ Пока не реализовано |
Вставка большого документа | ✅ Поддерживается |
Документ исправления | ⚠️ Пока не реализовано |
Параллельное выполнение запросов к секционированной коллекции | ⚠️ Пока не реализовано |
Запрос с агрегатными функциями | ⚠️ Пока не реализовано |
Запрос с фильтрацией | ⚠️ Пока не реализовано |
Запрос с фильтрацией и проекцией | ⚠️ Пока не реализовано |
Запрос с равенством | ✅ Поддержанный |
Запрос с условием равенства по идентификатору | ✅ Поддерживается |
Запрос с соединениями | ⚠️ Пока не реализовано |
Запрос с сортировкой по | ✅ Поддержанный |
Запрос с порядком для секционированных коллекций | ⚠️ Пока не реализовано |
Запрос с порядком по числам | ✅ Поддержанный |
Запрос с порядком по строкам | ⚠️ Пока не реализовано |
Запрос с разбиением по страницам | ⚠️ Пока не реализовано |
Запрос с использованием операторов диапазона для дат и времени | ⚠️ Пока не реализовано |
Запрос с диапазонными операторами по числам | ⚠️ Пока не реализовано |
Запрос с операторами диапазона в строках | ⚠️ Пока не реализовано |
Запрос с одним соединением | ⚠️ Пока не реализовано |
Запрос с помощью строковых математических и массивных операторов | ⚠️ Пока не реализовано |
Запрос с вложенными документами | ⚠️ Пока не реализовано |
Запрос с двумя соединениями | ⚠️ Пока не реализовано |
Запрос с двумя соединениями и фильтром | ⚠️ Пока не реализовано |
Прочитать коллекцию | ✅ Поддерживается |
Чтение ленты коллекции | ⚠️ Пока не реализовано |
Чтение базы данных | ✅ Поддерживается |
Чтение потока данных базы данных | ⚠️ Пока не реализовано |
Чтение документа | ✅ Поддерживается |
Чтение потока документов | ✅ Поддержанный |
Замена документа | ✅ Поддержанный |
Единицы запросов | ⚠️ Пока не реализовано |
Хранимые процедуры | ❌ Не запланировано |
Триггеры | ❌ Не запланировано |
Определяемые пользователем функции | ❌ Не запланировано |
Обновление коллекции | ⚠️ Пока не реализовано |
Обновление документа | ✅ Поддержанный |
Ограничения
Помимо функций, которые еще не поддерживаются или не запланированы, в следующем списке содержатся текущие ограничения эмулятора.
- Пакет SDK для .NET для Azure Cosmos DB не поддерживает массовое выполнение в эмуляторе.
- Пакеты SDK для .NET и Java не поддерживают режим HTTP в эмуляторе.
Установка сертификатов для пакета SDK для Java
При использовании пакета SDK Java для Azure Cosmos DB с этой версией эмулятора в режиме https необходимо установить сертификаты в локальном хранилище доверия Java.
Получение сертификата
В окне выполните следующую bash
команду:
# If the emulator was started with /AllowNetworkAccess, replace localhost with the actual IP address of it:
EMULATOR_HOST=localhost
EMULATOR_PORT=8081
EMULATOR_CERT_PATH=/tmp/cosmos_emulator.cert
openssl s_client -connect ${EMULATOR_HOST}:${EMULATOR_PORT} </dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > $EMULATOR_CERT_PATH
Установка сертификата
Перейдите в каталог установки java, где cacerts
находится файл (замените ниже правильным каталогом):
cd "C:/Program Files/Eclipse Adoptium/jdk-17.0.10.7-hotspot/bin"
Импортируйте сертификат (вам может потребоваться пароль, значение по умолчанию — changeit):
keytool -cacerts -importcert -alias cosmos_emulator -file $EMULATOR_CERT_PATH
Если вы получите ошибку, так как псевдоним уже существует, удалите его, а затем снова запустите приведенный выше код:
keytool -cacerts -delete -alias cosmos_emulator
Использование в рабочем процессе непрерывной интеграции
Существует множество преимуществ использования контейнеров Docker в конвейерах CI/CD, особенно для систем с отслеживанием состояния, таких как базы данных. Это может быть с точки зрения экономичности, производительности, надежности и согласованности наборов тестов.
Эмулятор может быть включен в составе конвейеров CI/CD. Вы можете обратиться к этому репозиторию GitHub , который содержит примеры использования эмулятора в рамках рабочего процесса CI GitHub Actions для .NET, Python, Java и Go приложений в обоих x64
и ARM64
архитектурах (демонстрируется для запуска Linux с помощью ubuntu
).
Ниже приведен пример рабочего процесса CI GitHub Actions, который показывает, как настроить эмулятор в качестве контейнера службы GitHub Actions в рамках задания в рабочем процессе. GitHub заботится о запуске контейнера Docker и уничтожает его после завершения задания без необходимости ручного вмешательства (например, с помощью docker run
команды).
name: CI demo app
on:
push:
branches: [main]
paths:
- 'java-app/**'
pull_request:
branches: [main]
paths:
- 'java-app/**'
jobs:
build-and-test:
runs-on: ubuntu-latest
services:
cosmosdb:
image: mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:vnext-preview
ports:
- 8081:8081
env:
PROTOCOL: https
env:
COSMOSDB_CONNECTION_STRING: ${{ secrets.COSMOSDB_CONNECTION_STRING }}
COSMOSDB_DATABASE_NAME: ${{ vars.COSMOSDB_DATABASE_NAME }}
COSMOSDB_CONTAINER_NAME: ${{ vars.COSMOSDB_CONTAINER_NAME }}
steps:
- name: Set up Java
uses: actions/setup-java@v3
with:
distribution: 'microsoft'
java-version: '21.0.0'
- name: Export Cosmos DB Emulator Certificate
run: |
sudo apt update && sudo apt install -y openssl
openssl s_client -connect localhost:8081 </dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > cosmos_emulator.cert
cat cosmos_emulator.cert
$JAVA_HOME/bin/keytool -cacerts -importcert -alias cosmos_emulator -file cosmos_emulator.cert -storepass changeit -noprompt
- name: Checkout repository
uses: actions/checkout@v4
- name: Run tests
run: cd java-app && mvn test
Это задание выполняется в средстве выполнения Ubuntu и использует mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:vnext-preview
образ Docker в качестве контейнера службы. Он использует переменные среды для настройки строки подключения, имени базы данных и имени контейнера. Так как в этом случае задание выполняется непосредственно на компьютере runner GitHub Actions, шаг выполнения тестов в задании, может получить доступ к эмулятору, который доступен через localhost:8081
(8081
является портом, предоставляемым эмулятором).
Шаг "Экспорт сертификата эмулятора Cosmos DB " зависит от приложений Java, так как пакет SDK Java для Azure Cosmos DB в настоящее время не поддерживает HTTP
режим в эмуляторе. Переменная PROTOCOL
среды задана https
в services
разделе, и этот шаг экспортирует сертификат эмулятора и импортирует его в хранилище ключей Java. Это же относится и к .NET.
Создание отчетов о проблемах
При возникновении проблем с использованием этой версии эмулятора откройте проблему в репозитории GitHub (https://github.com/Azure/azure-cosmos-db-emulator-docker) и пометьте ее меткой cosmosEmulatorVnextPreview
.