Включает: интеграция с хостингом и Client интеграция
Azure Cosmos DB — это полностью управляемая служба базы данных NoSQL для современной разработки приложений. Интеграция .NET AspireAzure Cosmos DB позволяет подключаться к существующим экземплярам Cosmos DB или создавать новые экземпляры из .NET с помощью эмулятора Azure Cosmos DB.
Интеграция хостинга
Интеграция хостинга .NET.NET AspireAzure Cosmos DB моделирует различные ресурсы Cosmos DB как следующие типы:
В проекте хоста приложения вызовите AddAzureCosmosDB, чтобы добавить и вернуть конструктор ресурсов AzureAzure Cosmos DB.
var builder = DistributedApplication.CreateBuilder(args);
var cosmos = builder.AddAzureCosmosDB("cosmos-db");
// After adding all resources, run the app...
Когда вы добавляете AzureCosmosDBResource к хосту приложения, он обеспечивает другие полезные API для добавления баз данных и контейнеров. Другими словами, необходимо добавить AzureCosmosDBResource перед добавлением других Cosmos DB ресурсов.
Важно!
При вызове AddAzureCosmosDBон неявно вызывает AddAzureProvisioning, что позволяет во время запуска приложения динамически создавать Azure ресурсы. Приложение должно настроить соответствующую подписку и местоположение. Дополнительные сведения см. в разделе Локальная подготовка: Конфигурация.
Сгенерированная настройка Bicep
Если вы не знакомы с Bicep, это язык, специфический для определения ресурсов Azure. При использовании .NET.NET Aspire вам не нужно писать Bicep вручную, вместо этого API для развертывания создают Bicep для вас. При публикации приложения сгенерированный файл Bicep выводится вместе с манифестом. При добавлении ресурса AzureAzure Cosmos DB создается следующий файл Bicep:
Предыдущий Bicep — это модуль, который подготавливает учетную запись AzureAzure Cosmos DB со следующими значениями по умолчанию:
kind: тип учетной записи Cosmos DB. Значение по умолчанию — GlobalDocumentDB.
consistencyPolicy: политика согласованности учетной записи Cosmos DB. Значение по умолчанию — Session.
locations: местоположения учетной записи Cosmos DB. По умолчанию используется расположение группы ресурсов.
Помимо учетной записи Cosmos DB, она также добавляет текущее приложение в роль Data Contributor для учетной записи Cosmos DB. Созданный Bicep является отправной точкой и может быть настроен в соответствии с вашими конкретными требованиями.
Тег добавляется в учетную запись Cosmos DB с ключом ExampleKey и значением Example value.
Существует множество дополнительных параметров конфигурации для настройки ресурса AzureAzure Cosmos DB. Дополнительные сведения см. в Azure.Provisioning.CosmosDB. Дополнительные сведения см. в разделе Azure. Настройка обеспечения.
Подключение к существующей учетной записи AzureAzure Cosmos DB
Возможно, у вас есть существующая учетная запись AzureAzure Cosmos DB, к которой требуется подключиться. Вместо представления нового ресурса AzureAzure Cosmos DB можно добавить строку подключения к узлу приложения. Чтобы добавить подключение к существующей учетной записи AzureAzure Cosmos DB, вызовите метод AddConnectionString:
var builder = DistributedApplication.CreateBuilder(args);
var cosmos = builder.AddConnectionString("cosmos-db");
builder.AddProject<Projects.WebApplication>("web")
.WithReference(cosmos);
// After adding all resources, run the app...
Примечание
Строки подключения используются для представления широкого диапазона сведений о подключении, включая подключения к базе данных, брокеры сообщений, URI конечной точки и другие службы. В .NET.NET Aspire номенклатуре термин "строка подключения" используется для представления любой информации о подключении.
Строка подключения настраивается в конфигурации узла приложения, как правило, в разделе Секреты пользователейв разделе ConnectionStrings. Хост приложения встраивает эту строку подключения в качестве переменной среды во все зависимые ресурсы, например:
Зависимый ресурс может получить доступ к внедренной строке подключения, вызвав метод GetConnectionString и передав имя подключения в качестве параметра, в этом случае "cosmos-db". API GetConnectionString является сокращением для IConfiguration.GetSection("ConnectionStrings")[name].
Добавьте ресурсы базы данных и контейнеров AzureAzure Cosmos DB
Чтобы добавить ресурс базы данных AzureAzure Cosmos DB, вызовите метод AddCosmosDatabase в экземпляре IResourceBuilder<AzureCosmosDBResource>:
var builder = DistributedApplication.CreateBuilder(args);
var cosmos = builder.AddAzureCosmosDB("cosmos-db");
cosmos.AddCosmosDatabase("db");
// After adding all resources, run the app...
При вызове AddCosmosDatabaseона добавляет базу данных с именем db в ресурсы Cosmos DB и возвращает только что созданный ресурс базы данных. База данных создается в учетной записи Cosmos DB, представленной AzureCosmosDBResource, которую вы добавили ранее. База данных — это логический контейнер для коллекций и пользователей.
Контейнер AzureAzure Cosmos DB находится там, где хранятся данные. При создании контейнера необходимо указать ключ раздела.
Чтобы добавить ресурс контейнера AzureAzure Cosmos DB, вызовите метод AddContainer в экземпляре IResourceBuilder<AzureCosmosDBDatabaseResource>:
var builder = DistributedApplication.CreateBuilder(args);
var cosmos = builder.AddAzureCosmosDB("cosmos-db");
var db = cosmos.AddCosmosDatabase("db");
db.AddContainer("entries", "/id");
// After adding all resources, run the app...
Контейнер создается в базе данных, обозначенной AzureCosmosDBDatabaseResource, которую вы добавили ранее.
Чтобы добавить ресурс эмулятора AzureAzure Cosmos DB, воспользуйтесь цепочкой вызовов IResourceBuilder<AzureCosmosDBResource> в API RunAsEmulator.
var builder = DistributedApplication.CreateBuilder(args);
var cosmos = builder.AddAzureCosmosDB("cosmos-db")
.RunAsEmulator();
// After adding all resources, run the app...
При вызове RunAsEmulatorон настраивает ресурсы Cosmos DB для локального запуска с помощью эмулятора. Эмулятор в этом случае — это AzureAzure Cosmos DB Эмулятор. Эмулятор Azure Cosmos DB предоставляет бесплатную локальную среду для тестирования ваших приложений Azure Cosmos DB, являясь идеальным дополнением для интеграции с хостингом .NET AspireAzure. Эмулятор не установлен, вместо этого он доступен для .NET.NET Aspire в виде контейнера. При добавлении контейнера на узел приложения, как показано в предыдущем примере с изображением mcr.microsoft.com/cosmosdb/emulator, он создает и запускает контейнер при запуске узла приложения. Для получения дополнительной информации см. раздел Жизненный цикл ресурсов контейнера.
Настройка контейнера эмулятора Cosmos DB
Существуют различные конфигурации, доступные для ресурсов контейнера, например, можно настроить порты контейнера, переменные среды, время существованияи многое другое.
Настройка порта шлюза контейнеров эмулятора Cosmos DB
По умолчанию контейнер эмулятора Cosmos DB при настройке .NET Aspireпредоставляет следующие конечные точки:
Конечная точка
Порт контейнера
Порт хоста
https
8081
динамический
По умолчанию прослушиваемый порт является динамическим. При запуске контейнера порт сопоставляется со случайным портом на хост-компьютере. Чтобы настроить порт конечной точки, используйте цепочку вызовов на построителе ресурсов контейнера, предоставленном методом RunAsEmulator, как показано в следующем примере:
var builder = DistributedApplication.CreateBuilder(args);
var cosmos = builder.AddAzureCosmosDB("cosmos-db").RunAsEmulator(
emulator =>
{
emulator.WithGatewayPort(7777);
});
// After adding all resources, run the app...
Следующий код настраивает существующую конечную точку Cosmos DB контейнера эмулятора https для прослушивания на порту 8081. Порт контейнера эмулятора Cosmos DB сопоставляется с портом узла, как показано в следующей таблице:
Имя конечной точки
Сопоставление портов (container:host)
https
8081:7777
Настройка контейнера эмулятора Cosmos DB с постоянным временем существования
Чтобы настроить контейнер эмулятора Cosmos DB с постоянным временем существования, вызовите метод WithLifetime в ресурсе контейнера эмулятора Cosmos DB и передайте ContainerLifetime.Persistent:
var builder = DistributedApplication.CreateBuilder(args);
var cosmos = builder.AddAzureCosmosDB("cosmos-db").RunAsEmulator(
emulator =>
{
emulator.WithLifetime(ContainerLifetime.Persistent);
});
// After adding all resources, run the app...
Настройте контейнер эмулятора Cosmos DB с томом данных
Чтобы добавить том данных в ресурс эмулятора AzureAzure Cosmos DB, вызовите метод WithDataVolume в ресурсе эмулятора AzureAzure Cosmos DB:
var builder = DistributedApplication.CreateBuilder(args);
var cosmos = builder.AddAzureCosmosDB("cosmos-db").RunAsEmulator(
emulator =>
{
emulator.WithDataVolume();
});
// After adding all resources, run the app...
Том данных используется для сохранения данных эмулятора Cosmos DB за пределами жизненного цикла контейнера. Том данных подключен по пути /tmp/cosmos/appdata в контейнере эмулятора Cosmos DB, и если параметр name не указан, имя генерируется автоматически. Эмулятор имеет переменную среды AZURE_COSMOS_EMULATOR_ENABLE_DATA_PERSISTENCE, установленную на true. Для получения дополнительной информации о томах данных и о причинах, по которым они предпочтительнее, чем монтирование привязок, см. документацию Docker: Volumes.
Настройка количества секций контейнеров эмулятора Cosmos DB
Чтобы настроить количество секций контейнера эмулятора Cosmos DB, вызовите метод WithPartitionCount:
var builder = DistributedApplication.CreateBuilder(args);
var cosmos = builder.AddAzureCosmosDB("cosmos-db").RunAsEmulator(
emulator =>
{
emulator.WithPartitionCount(100); // Defaults to 25
});
// After adding all resources, run the app...
Предшествующий код настраивает контейнер эмулятора Cosmos DB, чтобы иметь количество разделов 100. Это краткое указание переменной среды AZURE_COSMOS_EMULATOR_PARTITION_COUNT.
Использование эмулятора на основе Linux(предварительная версия)
Чтобы использовать предварительную версию эмулятора Cosmos DB, вызовите метод RunAsPreviewEmulator. Поскольку эта функция находится в предварительной версии, необходимо явно включить её, отключив экспериментальную диагностику ASPIRECOSMOSDB001.
Эмулятор предварительной версии также поддерживает предоставление конечной точки Data Explorer, которая позволяет просматривать данные, хранящиеся в эмуляторе Cosmos DB через веб-интерфейс. Чтобы включить обозреватель данных, вызовите метод WithDataExplorer.
#pragma warning disable ASPIRECOSMOSDB001
var builder = DistributedApplication.CreateBuilder(args);
var cosmos = builder.AddAzureCosmosDB("cosmos-db").RunAsPreviewEmulator(
emulator =>
{
emulator.WithDataExplorer();
});
// After adding all resources, run the app...
Приведенный выше код настраивает контейнер эмулятора предварительной версии на основе Linuxс конечной точкой обозревателя данных Cosmos DB для использования во время выполнения.
Проверка работоспособности интеграции в хостинге
Интеграция хостинга Azure Cosmos DB автоматически добавляет проверку состояния ресурса Cosmos DB. Проверка работоспособности подтверждает, что Cosmos DB запущен и к нему можно подключиться.
Чтобы приступить к интеграции с клиентом .NET AspireAzure Cosmos DB, установите пакет NuGet 📦Aspire.Microsoft.Azure.Cosmos в проект, который использует клиент, то есть в проект приложения, использующего клиент Cosmos DB. Интеграция Cosmos DB клиента регистрирует экземпляр CosmosClient, который можно использовать для взаимодействия с Cosmos DB.
В файле Program.cs проекта, используемого клиентом, вызовите метод расширения AddAzureCosmosClient для любой IHostApplicationBuilder, чтобы зарегистрировать CosmosClient для использования с помощью контейнера внедрения зависимостей. Метод принимает параметр имени подключения.
Параметр connectionName должен соответствовать имени, используемому при добавлении ресурса Cosmos DB в проект узла приложения. Другими словами, при вызове AddAzureCosmosDB и указании имени cosmos-db то же имя следует использовать при вызове AddAzureCosmosClient. Дополнительные сведения см. в разделе Добавить ресурс AzureAzure Cosmos DB.
После этого можно получить экземпляр CosmosClient с помощью внедрения зависимостей. Например, чтобы получить подключение из службы-примера:
public class ExampleService(CosmosClient client)
{
// Use client...
}
Могут возникнуть ситуации, когда требуется зарегистрировать несколько экземпляров CosmosClient с различными именами подключений. Чтобы зарегистрировать клиентов с ключами Cosmos DB, вызовите метод AddKeyedAzureCosmosClient:
При использовании ключевых служб ожидается, что ресурс Cosmos DB настраивает две именованные базы данных, одну для mainDb и одну для loggingDb.
Затем можно получить объекты CosmosClient с помощью внедрения зависимостей. Например, чтобы получить подключение из службы-примера:
public class ExampleService(
[FromKeyedServices("mainDb")] CosmosClient mainDbClient,
[FromKeyedServices("loggingDb")] CosmosClient loggingDbClient)
{
// Use clients...
}
Интеграция .NET AspireAzure Cosmos DB предоставляет несколько вариантов настройки подключения на основе требований и соглашений проекта.
Используйте строку подключения
При использовании строки подключения из раздела конфигурации ConnectionStrings можно указать имя строки подключения при вызове метода AddAzureCosmosClient:
builder.AddAzureCosmosClient("cosmos-db");
Затем строка подключения извлекается из раздела конфигурации ConnectionStrings:
Дополнительные сведения о форматировании этой строки подключения см. в документации по ConnectionString.
Использование поставщиков конфигураций
Интеграция .NET AspireAzure Cosmos DB поддерживает Microsoft.Extensions.Configuration. Он загружает MicrosoftAzureCosmosSettings из конфигурации, используя ключ Aspire:Microsoft:Azure:Cosmos. Следующий фрагмент кода является примером файла appsettings.json, который настраивает некоторые параметры:
Кроме того, можно передать делегат Action<MicrosoftAzureCosmosSettings> configureSettings, чтобы задать некоторые или все параметры прямо в коде, например, чтобы отключить трассировку.
Вы также можете настроить Microsoft.Azure.Cosmos.CosmosClientOptions с помощью необязательного параметра Action<CosmosClientOptions> configureClientOptions метода AddAzureCosmosClient. Например, чтобы задать суффикс заголовка User-Agent CosmosClientOptions.ApplicationName для всех запросов, исходящих от этого клиента:
В настоящее время интеграция клиентской системы .NET AspireCosmos DB не реализует мониторинг работоспособности, хотя это может измениться в будущих релизах.
Наблюдаемость и телеметрия
.NET
.NET Aspire интеграции автоматически настраивают конфигурации ведения журналов, трассировки и измерений, которые иногда называются столпами наблюдаемости. Дополнительные сведения об наблюдаемости интеграции и телеметрии см. в .NET.NET Aspire обзоре интеграции. В зависимости от резервной службы некоторые интеграции могут поддерживать только некоторые из этих функций. Например, некоторые интеграции поддерживают ведение журнала и трассировку, но не метрики. Функции телеметрии также можно отключить с помощью методов, представленных в разделе конфигурации .
Лесозаготовка
Интеграция .NET AspireAzure Cosmos DB использует следующие категории журналов:
Azure-Cosmos-Operation-Request-Diagnostics
Помимо получения диагностики запросов Azure Cosmos DB для неудачных запросов, можно настроить пороговые значения задержки, чтобы определить, какие успешные Azure Cosmos DB диагностические запросы будут фиксироваться. Значения по умолчанию — 100 мс для операций с точками и 500 мс для операций, не являющихся точками.
Интеграция .NET AspireAzure Cosmos DB будет генерировать следующие активности трассировки с помощью OpenTelemetry:
Azure.Cosmos.Operation
Azure
Azure Cosmos DB трассировка в настоящее время находится в предварительной версии, поэтому необходимо включить экспериментальную функцию, чтобы гарантировать регистрацию трассировок.
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
Отзыв о .NET Aspire
.NET Aspire — это проект с открытым исходным кодом. Выберите ссылку, чтобы оставить отзыв:
Создавайте эффективные запросы, создавайте политики индексирования, управляйте и подготавливайте ресурсы в API SQL и пакете SDK с помощью Microsoft Azure Cosmos DB.