Как правильно подготовить базу данных и коллекцию в конвейере развертывания?

Впереди немного более длинный вопрос, но, пожалуйста, потерпите меня: PM CosmosDB объясняет в ветке обратной связи это:

In Cosmos DB, all of the resources e.g. databases, collections/tables/graphs, users, permissions, documents/items/nodes/edges, attachments are all runtime resources. You can CRUD/query these resources using runtime SDKs and REST APIs. [...] All of the “runtime resources” [...] are meant to be used by the developers directly inside their applications.

The only resource which is meant for administrative purposes is the “database account”. This resource is exposed via ARM.

Таким образом, с помощью ARM (Azure Resource Manager) можно подготовить только ресурс CosmosDB, например в конвейере CI / CD, например, с помощью Azure DevOps.

Итак, теперь мой вопрос: Как правильно создать базы данных и коллекции в учетной записи CosmosDB?

Допустим, я использую функцию Azure, которая хранит / считывает данные из CosmosDB. Используя привязку функций, я мог бы, например, использовать

[DocumentDB("ToDoList", "Migration", ConnectionStringSetting = "CosmosDB", CreateIfNotExists = true)] IAsyncCollector<Document> documentsToStore)

создать базу данных и коллекцию. Создавая экземпляр DocumentClient вручную, я мог бы использовать await client.CreateDatabaseIfNotExistsAsync(database);

Но: это правильный способ сделать это ?? Выполнение этого, например, в привязке функции будет означать, что коллекция не будет создана, пока функция не будет выполнена в первый раз. Это просто неправильно.

Или вместо этого следует использовать, например, сценарий Powershell в конвейере развертывания для создания базы данных и коллекции после развертывания сценария ARM? Это, конечно, выполнимо, но если это будет рекомендуемый способ, можно очень поспорить, что это должно быть раскрыто через ARM.

Возможный дубликат Как настроить коллекцию Cosmos Db во время развертывания

JoeBrockhaus 03.05.2019 05:14

Я ответил на это по другому вопросу, который связан с тем же вопросом: ### Как развернуть контейнер / коллекцию с инфраструктурой и без необходимости запускать дополнительный код начальной загрузки во время запуска? <br/> Теперь существуют шаблоны ARM для их предоставления. stackoverflow.com/a/55962822/237723

JoeBrockhaus 03.05.2019 05:21
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
208
1

Ответы 1

Я чувствую, что ответ на этот вопрос полностью зависит от цели функции, которую вы пытаетесь создать. Если функция предполагает, что она может читать / обновлять / удалять документы в коллекции, которая может существовать или не существовать, тогда да, это хорошая практика - оспорить коллекцию, а затем создать ее на лету, если она еще не существует.

Если коллекцию необходимо создать, потому что от нее зависят другие инструменты, и это предсказуемая коллекция, вы можете создать их заранее, но если имя или номер коллекции невозможно предсказать, значит, вы находитесь в привязке.

Я бы не согласился. Во-первых, функция была просто примером. Может быть любое приложение, использующее CosmosDB. Во-вторых, создание базы данных и коллекции во время выполнения - не лучший вариант. Если бы кто-нибудь мог дать этому правильное объяснение, я был бы очень счастлив.

silent 16.10.2018 21:54

Другие вопросы по теме