【问题标题】:How to properly provision database and collection in deployment pipeline?如何在部署管道中正确配置数据库和集合?
【发布时间】:2018-10-16 15:53:06
【问题描述】:

前面的问题有点长,但请耐心等待:CosmosDB PM 在this 反馈线程中解释:

在 Cosmos DB 中,所有资源,例如数据库、集合/表/图、用户、权限、文档/项目/节点/边、附件都是运行时资源。您可以使用运行时 SDK 和 REST API 对这些资源进行 CRUD/查询。 [...] 所有“运行时资源”[...] 旨在供开发人员直接在其应用程序中使用。

用于管理目的的唯一资源是“数据库帐户”。此资源通过 ARM 公开。

因此,只能使用 ARM(Azure 资源管理器)预配资源“CosmosDB”,例如在 CI/CD 管道中,例如使用 Azure DevOps。

所以现在我的问题是:在 CosmosDB 帐户中创建数据库和集合的正确方法是什么?

假设我正在使用一个 Azure 函数来存储/读取 CosmosDB 中的数据。使用函数绑定我可以使用例如

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

创建数据库和集合。我可以使用手动实例化 DocumentClient await client.CreateDatabaseIfNotExistsAsync(database);

但是:这是正确的方法吗?例如,在 Function 绑定中执行此操作意味着在第一次执行 Function 之前不会创建集合。就是感觉不对。

或者是否应该在部署 ARM 脚本后使用部署管道中的 Powershell 脚本来创建数据库和集合?这当然是可行的,但如果这是推荐的方式,人们可能会认为这应该通过 ARM 公开。

【问题讨论】:

标签: c# azure azure-functions azure-cosmosdb azure-resource-manager


【解决方案1】:

这个问题的答案完全取决于你试图构建的功能的意图。如果该函数假定它可以读取/更新/删除集合中可能存在或不存在的文档,那么是的,挑战该集合,然后在它尚不存在时动态创建它是一个好习惯。

如果由于其他工具依赖于它而需要创建集合并且它是可预测的集合,您可以预先创建它们,但如果集合名称或编号无法预测,那么您就处于绑定状态。

【讨论】:

  • 我不太同意。首先,函数只是一个例子。可以是任何使用 CosmosDB 的应用程序。其次,在运行时配置 Db 和集合并不是一个好主意。如果有人可以对此给出适当的解释,我会很高兴。
猜你喜欢
  • 1970-01-01
  • 2013-03-01
  • 2022-10-18
  • 2013-01-15
  • 1970-01-01
  • 2020-09-29
  • 1970-01-01
  • 1970-01-01
  • 2016-09-03
相关资源
最近更新 更多