如何在部署管道中正确配置数据库和收集?

时间:2018-10-16 15:53:07

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

还有待回答的问题,但是请您忍受:CosmosDB PM在this反馈线程中进行了解释:

  

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

     

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

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

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

假设我正在使用的是Azure功能,该功能存储/读取CosmosDB中的数据。使用函数绑定,例如,我可以使用

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

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

但是:这是执行此操作的正确方法吗?例如,在Function绑定中执行此操作将意味着直到第一次执行Function时才创建集合。只是感觉不对。

或者应该在部署ARM脚本后改为在部署管道中使用例如Powershell脚本来创建数据库和集合吗?这当然是可行的,但是如果这是推荐的方法,则可以说这应该通过ARM公开。

1 个答案:

答案 0 :(得分:-1)

这个问题的答案完全取决于您感觉要构建的功能的意图。如果该函数假设它可以读取/更新/删除可能存在或可能不存在的集合中的文档,则可以的一种很好的做法是挑战该集合,然后在尚不存在的情况下即时创建它。

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