You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Azure.ResourceManager.CosmosDB 1.2.0在C#中创建Cosmos DB及容器的问题

使用Azure.ResourceManager.CosmosDB 1.2.0创建Cosmos数据库和容器的解决方案

核心原因说明

你遇到的403错误是因为CosmosClient属于数据平面操作,需要Cosmos DB账户的访问密钥或数据平面权限;而你配置的「参与者」是**管理平面(ARM)**权限,只能通过ARM管理库(即Azure.ResourceManager.CosmosDB)执行资源创建操作,两者权限体系不互通。

实现步骤与代码示例

1. 安装必要NuGet包

确保安装以下包:

  • Azure.ResourceManager.CosmosDB 1.2.0
  • Azure.Identity(用于获取ARM身份验证凭据)

2. 完整代码实现

using Azure;
using Azure.Identity;
using Azure.ResourceManager;
using Azure.ResourceManager.CosmosDB;
using Azure.ResourceManager.CosmosDB.Models;
using Azure.ResourceManager.Resources;

// 1. 初始化ArmClient(支持本地开发/托管标识/服务主体等多种身份验证场景)
var armClient = new ArmClient(new DefaultAzureCredential());

// 2. 获取目标订阅资源
string subscriptionId = "你的订阅ID";
SubscriptionResource subscription = await armClient.GetSubscriptionResource(new ResourceIdentifier($"/subscriptions/{subscriptionId}")).GetAsync();

// 3. 获取或创建资源组(资源组已存在则直接获取)
string resourceGroupName = "你的资源组名称";
ResourceGroupResource resourceGroup = await subscription.GetResourceGroups().GetOrCreateAsync(WaitUntil.Completed, resourceGroupName);

// 4. 创建或获取Cosmos DB账户(账户已存在则跳过创建)
string accountName = "你的CosmosDB账户名称";
CosmosDBAccountCollection accountCollection = resourceGroup.GetCosmosDBAccounts();
CosmosDBAccountCreateOrUpdateContent accountContent = new CosmosDBAccountCreateOrUpdateContent(
    location: "East US", // 替换为你的目标区域
    databaseAccountOfferType: DatabaseAccountOfferType.Standard,
    locations: new[] { new CosmosDBLocation("East US") })
{
    EnableFreeTier = false, // 根据需求设置
};

Response<CosmosDBAccountResource> accountResponse = await accountCollection.CreateOrUpdateAsync(WaitUntil.Completed, accountName, accountContent);
CosmosDBAccountResource cosmosAccount = accountResponse.Value;

// 5. 创建Cosmos数据库
string dbName = "目标数据库名称";
CosmosDBDatabaseCollection dbCollection = cosmosAccount.GetCosmosDBDatabases();
CosmosDBDatabaseCreateOrUpdateContent dbContent = new CosmosDBDatabaseCreateOrUpdateContent(dbName)
{
    Options = new CosmosDBDatabaseCreateUpdateOptions()
    {
        Throughput = 400 // 设置数据库吞吐量,按需调整
    }
};

Response<CosmosDBDatabaseResource> dbResponse = await dbCollection.CreateOrUpdateAsync(WaitUntil.Completed, dbName, dbContent);
CosmosDBDatabaseResource cosmosDb = dbResponse.Value;

// 6. 创建Cosmos容器
string containerName = "目标容器名称";
CosmosDBContainerCollection containerCollection = cosmosDb.GetCosmosDBContainers();
CosmosDBContainerCreateOrUpdateContent containerContent = new CosmosDBContainerCreateOrUpdateContent(
    id: containerName,
    partitionKeyPath: "/partitionKey", // 替换为你的分区键路径
    indexPolicy: new CosmosDBIndexPolicy())
{
    Options = new CosmosDBContainerCreateUpdateOptions()
    {
        Throughput = 400 // 设置容器吞吐量,也可继承数据库吞吐量
    }
};

Response<CosmosDBContainerResource> containerResponse = await containerCollection.CreateOrUpdateAsync(WaitUntil.Completed, containerName, containerContent);
CosmosDBContainerResource cosmosContainer = containerResponse.Value;

3. 权限说明

确保执行代码的身份(本地开发账户、服务主体、托管标识等)拥有目标订阅/资源组的参与者权限,该权限足以完成上述ARM层面的资源创建操作。

内容的提问来源于stack exchange,提问作者EnenDaveyBoy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 18:35:50