c# - 如何在部署管道中正确配置数据库和集合?
问题描述
前面的问题有点长,但请耐心等待: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 公开。
解决方案
这个问题的答案完全取决于你试图构建的功能的意图。如果该函数假定它可以读取/更新/删除集合中可能存在或可能不存在的文档,那么是的,挑战该集合,然后在它尚不存在时动态创建它是一个好习惯。
如果由于其他工具依赖于它而需要创建集合,并且它是一个可预测的集合,您可以预先创建它们,但如果集合名称或编号无法预测,那么您将陷入困境。
推荐阅读
- sparql - SPARQL 查找具有相同最大值的所有元组
- sap - 用于提取足球比赛结果以自动插入数据库的工具/API
- python - 如何使用具有不同输入形状的批次制作神经网络
- c++ - C++。候选模板被忽略 - 无法将数组类型与自身匹配
- python - 仅在 Python 中某些行之后打印行
- c# - 错误:“传入”没有重载匹配委托“SerialDataReceivedEventHandler”
- python - 如何根据键合并两个字典但在python中包含缺少的键值?
- assembly - 为什么用 int 13h 读取扇区后 int 10h 不起作用?
- angular - 如何覆盖 node_modules 中的文件或函数
- bash - Groovy shell 脚本无法识别导出命令