首页 > 解决方案 > 如何在部署管道中正确配置数据库和集合?

问题描述

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

在 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#azureazure-functionsazure-cosmosdbazure-resource-manager

解决方案


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

如果由于其他工具依赖于它而需要创建集合,并且它是一个可预测的集合,您可以预先创建它们,但如果集合名称或编号无法预测,那么您将陷入困境。


推荐阅读