资讯动态

使用 Azure.ResourceManager.CosmosDB 管理平面 SDK 在 .NET 中编排 Azure Cosmos DB 资源

发布时间:2026/10/21 2:18:57 来源:尧图企业网站定制
AI 技能AI 插件人工智能【免费下载链接】agentic-awesome-skillsAAS Core is the local, agent-first control plane for complete catalog discovery, agent-owned selection, stack validation, and planning, backed by 2,600 agentic skills. Includes CLI, local MCP, catalog, plugins, and Workbench.项目地址https://gitcode.com/GitHub_Trending/an/agentic-awesome-skills点击查看免费下载导读本文以 agentic-awesome-skills 仓库中社区贡献的技能文档azure-resource-manager-cosmosdb-dotnet为骨架系统讲解如何在 .NET 应用中通过 Azure Resource ManagerARM管理平面 SDKAzure.ResourceManager.CosmosDB完成 Cosmos DB 账户、数据库、容器的创建与配置以及吞吐量RU/s的设置与连接信息的获取。读完本文你将掌握管理平面与数据平面 SDK 的职责边界、ARM 资源层级模型的编程方式、长期运行操作LRO的正确使用姿势以及一套可直接落地的账户到容器的全链路编排代码。该技能在仓库的目录服务中被归类为cloud类别、风险等级critical见 data/catalog.json 与 data/skills_index.json适合在需要以代码方式自动化 Cosmos DB 基础设施时直接引用。一、认识管理平面 SDK与数据平面 SDK 的分工Azure.ResourceManager.CosmosDB是 Cosmos DB 的管理平面Management PlaneSDK其职责聚焦于资源的生命周期编排而不是数据读写本 SDKAzure.ResourceManager.CosmosDB负责创建账户、创建数据库与容器、配置吞吐量RU/s、管理 RBAC、处理故障转移、读取密钥与连接字符串、管理网络VNet/防火墙等资源级操作。数据平面 SDKMicrosoft.Azure.Cosmos负责对文档document的增删改查、执行 SQL 查询、调用存储过程stored procedure等数据操作。在真实项目中两者的典型组合是先用管理平面 SDK 完成基础设施即代码式的初始化与配置再用数据平面 SDK 的CosmosClient以连接字符串或密钥为凭据执行业务读写。原文档在 SKILL.md 开篇即用醒目标记强调这一边界避免开发者在错误的 SDK 中寻找错误的能力。二、安装与项目准备在 .NET 项目中添加两个包即可dotnet add package Azure.ResourceManager.CosmosDB dotnet add package Azure.IdentityAzure.ResourceManager.CosmosDB管理平面 SDK 主体提供CosmosDBAccountResource、CosmosDBSqlDatabaseResource等资源类型。Azure.Identity提供DefaultAzureCredential等 Azure 认证凭据类型。原文档标注的版本信息为Stable v1.4.0Preview v1.4.0-beta.13。实际使用时请以dotnet add package解析到的最新稳定版本为准并留意包版本与Azure.ResourceManager通用 ARM 客户端大版本之间的兼容性。环境变量SDK 本身不读取环境变量但结合DefaultAzureCredential与脚本化部署通常需要以下环境变量AZURE_SUBSCRIPTION_IDyour-subscription-id # For service principal auth (optional) AZURE_TENANT_IDtenant-id AZURE_CLIENT_IDclient-id AZURE_CLIENT_SECRETclient-secretAZURE_SUBSCRIPTION_ID必填用于构造订阅资源标识符ResourceIdentifier。AZURE_TENANT_ID/AZURE_CLIENT_ID/AZURE_CLIENT_SECRET可选仅在需要以服务主体Service Principal身份认证时设置。DefaultAzureCredential会按顺序尝试多种认证来源环境变量凭据、Azure CLI 登录态、托管标识等因此本地开发时通常无需显式设置这三项。三、认证与 ArmClient 初始化ArmClient是所有 ARM 操作的统一入口通过DefaultAzureCredential初始化using Azure.Identity; using Azure.ResourceManager; using Azure.ResourceManager.CosmosDB; // Always use DefaultAzureCredential var credential new DefaultAzureCredential(); var armClient new ArmClient(credential); // Get subscription var subscriptionId Environment.GetEnvironmentVariable(AZURE_SUBSCRIPTION_ID); var subscription armClient.GetSubscriptionResource( new ResourceIdentifier($/subscriptions/{subscriptionId}));关键点凭据使用DefaultAzureCredential而非硬编码密钥——这是原文档列为第一优先级的最佳实践本地开发、CI/CD 管道、Azure 托管环境可共用同一套代码。GetSubscriptionResource接收一个完整的 Azure 资源标识符/subscriptions/{id}返回SubscriptionResource实例它是后续一切资源导航的起点。四、资源层级模型ARM 的导航骨架Cosmos DB 资源在 ARM 中的层级结构如下原文档原文ArmClient └── SubscriptionResource └── ResourceGroupResource └── CosmosDBAccountResource ├── CosmosDBSqlDatabaseResource │ └── CosmosDBSqlContainerResource │ ├── CosmosDBSqlStoredProcedureResource │ ├── CosmosDBSqlTriggerResource │ └── CosmosDBSqlUserDefinedFunctionResource ├── CassandraKeyspaceResource ├── GremlinDatabaseResource ├── MongoDBDatabaseResource └── CosmosDBTableResource这套层级在 SDK 中被映射为父资源通过Get*方法返回子资源集合的导航模式例如subscription.GetResourceGroupAsync(name)→ResourceGroupResourceresourceGroup.GetCosmosDBAccounts()→CosmosDBAccountCollectionaccount.GetCosmosDBSqlDatabases()→ SQL 数据库集合database.GetCosmosDBSqlContainers()→ SQL 容器集合除 SQL API 外同一账户下还挂载 Cassandra、Gremlin、MongoDB、Table 等 API 的数据库资源类型因此多 API 共存的账户可以在同一套 ARM 模型中统一管理。五、核心工作流从账户到容器再到吞吐量原文档给出了五步可复制的核心工作流以下逐一展开并补充注释。1. 创建 Cosmos DB 账户using Azure.ResourceManager.CosmosDB; using Azure.ResourceManager.CosmosDB.Models; // Get resource group var resourceGroup await subscription .GetResourceGroupAsync(my-resource-group); // Define account var accountData new CosmosDBAccountCreateOrUpdateContent( location: AzureLocation.EastUS, locations: new[] { new CosmosDBAccountLocation { LocationName AzureLocation.EastUS, FailoverPriority 0, IsZoneRedundant false } }) { Kind CosmosDBAccountKind.GlobalDocumentDB, ConsistencyPolicy new ConsistencyPolicy(DefaultConsistencyLevel.Session), EnableAutomaticFailover true }; // Create account (long-running operation) var accountCollection resourceGroup.Value.GetCosmosDBAccounts(); var operation await accountCollection.CreateOrUpdateAsync( WaitUntil.Completed, my-cosmos-account, accountData); CosmosDBAccountResource account operation.Value;要点拆解多区域配置locations数组中的FailoverPriority 0表示主区域其他条目按优先级递增IsZoneRedundant开启可用区冗余需区域支持。KindCosmosDBAccountKind.GlobalDocumentDB表示标准 SQL API 账户。一致性级别ConsistencyPolicy(DefaultConsistencyLevel.Session)使用会话一致性——这是大多数应用默认且兼顾性能与一致性的选择可选值还包括Strong、BoundedStaleness、ConsistentPrefix等。自动故障转移EnableAutomaticFailover true使 Azure 在主区域故障时按FailoverPriority顺序自动切换。长期运行操作账户创建耗时较长CreateOrUpdateAsync(WaitUntil.Completed, ...)会阻塞等待部署完成若希望并行发起多个资源创建可改用WaitUntil.Started后手动轮询详见下文最佳实践。2. 创建 SQL 数据库var databaseData new CosmosDBSqlDatabaseCreateOrUpdateContent( new CosmosDBSqlDatabaseResourceInfo(my-database)); var databaseCollection account.GetCosmosDBSqlDatabases(); var dbOperation await databaseCollection.CreateOrUpdateAsync( WaitUntil.Completed, my-database, databaseData); CosmosDBSqlDatabaseResource database dbOperation.Value;数据库资源只定义名称CosmosDBSqlDatabaseResourceInfo(my-database)吞吐量RU/s可以在数据库级或容器级单独设置见第 4 步。注意调用顺序数据库必须挂在已存在的账户之下因此account.GetCosmosDBSqlDatabases()之前账户必须已创建完成这也是选择WaitUntil.Completed的典型场景。3. 创建 SQL 容器var containerData new CosmosDBSqlContainerCreateOrUpdateContent( new CosmosDBSqlContainerResourceInfo(my-container) { PartitionKey new CosmosDBContainerPartitionKey { Paths { /partitionKey }, Kind CosmosDBPartitionKind.Hash }, IndexingPolicy new CosmosDBIndexingPolicy { Automatic true, IndexingMode CosmosDBIndexingMode.Consistent }, DefaultTtl 86400 // 24 hours }); var containerCollection database.GetCosmosDBSqlContainers(); var containerOperation await containerCollection.CreateOrUpdateAsync( WaitUntil.Completed, my-container, containerData); CosmosDBSqlContainerResource container containerOperation.Value;要点拆解分区键Paths { /partitionKey }指定分区键路径Kind CosmosDBPartitionKind.Hash是默认且推荐的哈希分区方式直接影响数据分布与查询路由效率。索引策略Automatic true表示对所有属性自动建立索引IndexingMode CosmosDBIndexingMode.Consistent表示索引随写入同步更新数据一致另有Lazy模式可供吞吐敏感场景权衡。默认 TTLDefaultTtl 86400表示文档在写入 24 小时后自动过期删除适用于日志、会话等有时效性的数据设置为-1可禁用默认 TTL。4. 配置吞吐量手动与自动缩放// Manual throughput var throughputData new ThroughputSettingsUpdateData( new ThroughputSettingsResourceInfo { Throughput 400 }); // Autoscale throughput var autoscaleData new ThroughputSettingsUpdateData( new ThroughputSettingsResourceInfo { AutoscaleSettings new AutoscaleSettingsResourceInfo { MaxThroughput 4000 } }); // Apply to database await database.CreateOrUpdateCosmosDBSqlDatabaseThroughputAsync( WaitUntil.Completed, throughputData);两种模式的选择原则手动吞吐量Throughput固定 RU/s成本可预期400RU/s 是单容器/单数据库的最小计费单位适合开发与低负载场景。自动缩放AutoscaleSettings.MaxThroughput设置 RU/s 上限Cosmos DB 根据实际负载在 10% 到 100% 上限区间内弹性伸缩适合负载波动明显的生产场景计费按实际使用量计算。同一套ThroughputSettingsUpdateData结构也适用于容器级吞吐量设置——只需把调用对象从database换成对应的容器资源如container.CreateOrUpdateCosmosDBSqlContainerThroughputAsync(...)即可实现数据库级与容器级两种 RU/s 分配模型。原文档同时指出吞吐量相关的参考文档手动/自动模式切换、迁移在技能的references/throughput.md中有更完整说明。5. 获取连接信息密钥与连接字符串// Get keys var keys await account.GetKeysAsync(); Console.WriteLine($Primary Key: {keys.Value.PrimaryMasterKey}); // Get connection strings var connectionStrings await account.GetConnectionStringsAsync(); foreach (var cs in connectionStrings.Value.ConnectionStrings) { Console.WriteLine(${cs.Description}: {cs.ConnectionString}); }GetKeysAsync()返回账户的主密钥PrimaryMasterKey与从密钥等可配合数据平面CosmosClient建立连接。GetConnectionStringsAsync()返回按描述区分的连接字符串列表例如按区域或按 API 生成的连接串便于在应用配置中直接选用。六、关键类型速查原文档给出的核心类型对照表如下可作为阅读 SDK 时的索引TypePurposeArmClientEntry point for all ARM operationsCosmosDBAccountResourceRepresents a Cosmos DB accountCosmosDBAccountCollectionCollection for account CRUDCosmosDBSqlDatabaseResourceSQL API databaseCosmosDBSqlContainerResourceSQL API containerCosmosDBAccountCreateOrUpdateContentAccount creation payloadCosmosDBSqlDatabaseCreateOrUpdateContentDatabase creation payloadCosmosDBSqlContainerCreateOrUpdateContentContainer creation payloadThroughputSettingsUpdateDataThroughput configuration理解这个表的关键在于命名规律...Resource表示单个资源的句柄...Collection表示该资源层级下的子资源集合...CreateOrUpdateContent表示创建/更新请求的载荷对象。掌握这套命名约定后即使面对其他 ARM SDK如 Azure SQL、Storage也能快速定位同类 API。七、最佳实践清单原文档将以下六条列为该技能的核心实践准则使用WaitUntil.Completed对必须完成后才能继续的操作用阻塞等待避免后续步骤拿到未就绪的资源。使用WaitUntil.Started当需要手动轮询或并行执行多个操作时先拿到Operation句柄稍后统一WaitForCompletionAsync()。始终使用DefaultAzureCredential绝不硬编码密钥避免凭据泄露并保持多环境可移植。处理RequestFailedExceptionARM API 出错时抛出该异常按Status状态码与ErrorCode分类处理。使用CreateOrUpdateAsync实现幂等该方法存在则更新、不存在则创建天然适合重复执行部署脚本。通过Get*方法沿层级导航例如account.GetCosmosDBSqlDatabases()避免手动拼接资源 ID 字符串减少低级错误。八、错误处理以 409 冲突为例using Azure; try { var operation await accountCollection.CreateOrUpdateAsync( WaitUntil.Completed, accountName, accountData); } catch (RequestFailedException ex) when (ex.Status 409) { Console.WriteLine(Account already exists); } catch (RequestFailedException ex) { Console.WriteLine($ARM Error: {ex.Status} - {ex.ErrorCode}: {ex.Message}); }409 Conflict资源已存在。由于CreateOrUpdateAsync本身具备幂等语义通常可把 409 视为已具备所需资源而非致命错误。其他状态码统一打印StatusHTTP 状态码、ErrorCodeARM 错误码如AuthorizationFailed、ResourceGroupNotFound与Message便于日志聚合与告警。建议在实际工程中为RequestFailedException封装一层自定义异常转换把 ARM 错误映射为领域错误避免业务代码与 SDK 异常类型耦合。九、相关 SDK 与选用场景SDKPurposeInstallMicrosoft.Azure.CosmosData plane (document CRUD, queries)dotnet add package Microsoft.Azure.CosmosAzure.ResourceManager.CosmosDBManagement plane (this SDK)dotnet add package Azure.ResourceManager.CosmosDB选用建议只需读文档、写文档、查文档→ 只用数据平面Microsoft.Azure.Cosmos需要创建账户/数据库/容器、调吞吐量、管密钥→ 用本文主题管理平面 SDK两者结合先初始化资源再执行业务读写是生产环境最常见形态——连接信息第 5 步正是两个 SDK 之间的衔接点。十、仓库中的技能定位与使用边界在 agentic-awesome-skills 仓库中该技能以azure-resource-manager-cosmosdb-dotnet为 id 注册于目录服务data/catalog.json、data/skills_index.json与插件兼容性清单data/plugin-compatibility.json分类为cloud、风险等级critical、来源为community创建日期为2026-02-27并同时支持 Claude 与 Codex 两类 Agent 目标。原技能文档同时声明了三条使用边界引用时应一并遵守仅当任务与上述管理平面工作流明确匹配时使用本技能技能的运行输出不能替代针对具体环境的验证、测试或专家评审当必需的输入、权限、安全边界或成功标准缺失时应停下并向用户澄清而不是盲目执行。这套边界约束与仓库中critical风险等级的分类一致——涉及生产基础设施的自动化操作必须先确认权限与影响范围。小结从账户、数据库、容器到吞吐量Azure.ResourceManager.CosmosDB用一套统一的 ARM 资源层级模型把 Cosmos DB 的全部管理面能力封装为强类型 .NET API。掌握ArmClient初始化、Get*层级导航、CreateOrUpdateAsync幂等语义与WaitUntil生命周期控制即可用少量代码完成原本需要多次 Portal 操作或 ARM 模板才能完成的基础设施编排并为后续数据平面 SDK 的接入铺平道路。赞分享AI 技能AI 插件人工智能【免费下载链接】agentic-awesome-skillsAAS Core is the local, agent-first control plane for complete catalog discovery, agent-owned selection, stack validation, and planning, backed by 2,600 agentic skills. Includes CLI, local MCP, catalog, plugins, and Workbench.项目地址https://gitcode.com/GitHub_Trending/an/agentic-awesome-skills点击查看免费下载相关推荐使用 Azure.ResourceManager.DurableTask 管理平面 SDK 在 .NET 中编排 Azure Durable Task Scheduler 资源使用 Azure.ResourceManager.DurableTask 管理平面 SDK 在 .NET 中编排 Azure Durable Task ScheAI 技能AI 插件人工智能使用 Azure.ResourceManager.Sql (.NET) 管理平面 SDK 编排 Azure SQL 资源使用 Azure.ResourceManager.Sql .NET 管理平面 SDK 编排 Azure SQL 资源 导读 本文基于 agentic awesoAI 技能AI 插件人工智能azure-mgmt-cosmosdb Python 管理 SDK 实战指南用 ARM 控制面管理 Azure Cosmos DB 资源azure mgmt cosmosdb Python 管理 SDK 实战指南用 ARM 控制面管理 Azure Cosmos DB 资源 本文是 Contex上一篇Stencil 类型声明架构解析从公共 API 契约到内部数据结构下一篇aiogram 中 Telegram Update 对象全解析字段、事件类型与分发机制创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑