Как правильно обеспечить базу данных и коллекцию в конвейере развертывания? - PullRequest
0 голосов
/ 16 октября 2018

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

В Cosmos DB все ресурсы, например, базы данных, коллекции /таблицы / графики, пользователи, разрешения, документы / элементы / узлы / ребра, вложения - все это ресурсы времени выполнения.Вы можете CRUD / запрашивать эти ресурсы, используя SDK времени выполнения и API REST.[...] Все «ресурсы времени выполнения» [...] предназначены для использования разработчиками непосредственно внутри своих приложений.

Единственный ресурс, предназначенный для административных целей, - это «учетная запись базы данных».Этот ресурс предоставляется через ARM.

Таким образом, только ресурс "CosmosDB" может быть подготовлен с использованием ARM (Azure Resource Manager), например, в конвейере 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.

1 Ответ

0 голосов
/ 16 октября 2018

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

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

...