Azure 管理 MongoDB Atlas .NET

azure-mgmt-mongodbatlas-dotnet
分类通用
作者Agentic Awesome Skills 社区
许可MIT
评分4.40/5
使用6.8K

Azure.ResourceManager.MongoDBAtlas SDK

通过 Azure Marketplace 实现统一计费,将 MongoDB Atlas 组织作为 Azure ARM 资源进行管理。

包信息

| 属性 | 值 |
|----------|-------|
| 包名 | Azure.ResourceManager.MongoDBAtlas |
| 版本 | 1.0.0 (GA) |
| API 版本 | 2025-06-01 |
| 资源类型 | MongoDB.Atlas/organizations |
| NuGet | Azure.ResourceManager.MongoDBAtlas |

安装

bash
dotnet add package Azure.ResourceManager.MongoDBAtlas
dotnet add package Azure.Identity
dotnet add package Azure.ResourceManager

重要范围限制

此 SDK 将 MongoDB Atlas 组织作为 Azure ARM 资源进行管理,用于 Marketplace 集成。它直接管理以下内容:

  • Atlas 集群

  • 数据库

  • 集合 (Collections)

  • 用户/角色

如需进行集群管理,请在创建组织后直接使用 MongoDB Atlas API。

身份验证

csharp
using Azure.Identity;
using Azure.ResourceManager;
using Azure.ResourceManager.MongoDBAtlas;
using Azure.ResourceManager.MongoDBAtlas.Models;

// 使用 DefaultAzureCredential 创建 ARM 客户端
var credential = new DefaultAzureCredential();
var armClient = new ArmClient(credential);

核心类型

| 类型 | 用途 |
|------|---------|
| MongoDBAtlasOrganizationResource | 代表 Atlas 组织的 ARM 资源 |
| MongoDBAtlasOrganizationCollection | 资源组中的组织集合 |
| MongoDBAtlasOrganizationData | 组织资源的数据模型 |
| MongoDBAtlasOrganizationProperties | 组织特定属性 |
| MongoDBAtlasMarketplaceDetails | Azure Marketplace 订阅详情 |
| MongoDBAtlasOfferDetails | Marketplace 方案配置 |
| MongoDBAtlasUserDetails | 组织的用户信息 |
| MongoDBAtlasPartnerProperties | MongoDB 特定属性(组织名称、ID) |

工作流

获取组织集合

csharp
// 获取资源组
var subscription = await armClient.GetDefaultSubscriptionAsync();
var resourceGroup = await subscription.GetResourceGroupAsync("my-resource-group");

// 获取组织集合
MongoDBAtlasOrganizationCollection organizations =
resourceGroup.Value.GetMongoDBAtlasOrganizations();

创建组织

csharp
var organizationName = "my-atlas-org";
var location = AzureLocation.EastUS2;

// 构建组织数据
var organizationData = new MongoDBAtlasOrganizationData(location)
{
Properties = new MongoDBAtlasOrganizationProperties(
marketplace: new MongoDBAtlasMarketplaceDetails(
subscriptionId: "your-azure-subscription-id",
offerDetails: new MongoDBAtlasOfferDetails(
publisherId: "mongodb",
offerId: "mongodb_atlas_azure_native_prod",
planId: "private_plan",
planName: "Pay as You Go (Free) (Private)",
termUnit: "P1M",
termId: "gmz7xq9ge3py"
)
),
user: new MongoDBAtlasUserDetails(
emailAddress: "[email protected]",
upn: "[email protected]"
)
{
FirstName = "Admin",
LastName = "User"


}
)
{
PartnerProperties = new MongoDBAtlasPartnerProperties
{
OrganizationName = organizationName
}
},
Tags = { ["Environment"] = "Production" }
};

// 创建组织(长时间运行的操作)
var operation = await organizations.CreateOrUpdateAsync(
WaitUntil.Completed,
organizationName,
organizationData
);

MongoDBAtlasOrganizationResource organization = operation.Value;
Console.WriteLine($"Created: {organization.Id}");

code
### 获取现有组织
csharp
// 选项 1:从集合中获取
MongoDBAtlasOrganizationResource org =
await organizations.GetAsync("my-atlas-org");

// 选项 2:通过资源标识符获取
var resourceId = MongoDBAtlasOrganizationResource.CreateResourceIdentifier(
subscriptionId: "subscription-id",
resourceGroupName: "my-resource-group",
organizationName: "my-atlas-org"
);
MongoDBAtlasOrganizationResource org2 =
armClient.GetMongoDBAtlasOrganizationResource(resourceId);
await org2.GetAsync(); // 获取数据

code
### 列出组织
csharp
// 列出资源组中的组织
await foreach (var org in organizations.GetAllAsync())
{
Console.WriteLine($"Org: {org.Data.Name}");
Console.WriteLine($" Location: {org.Data.Location}");
Console.WriteLine($" State: {org.Data.Properties?.ProvisioningState}");
}

// 列出订阅中的所有组织
await foreach (var org in subscription.GetMongoDBAtlasOrganizationsAsync())
{
Console.WriteLine($"Org: {org.Data.Name} in {org.Data.Id}");
}

code
### 更新标签
csharp
// 添加单个标签
await organization.AddTagAsync("CostCenter", "12345");

// 替换所有标签
await organization.SetTagsAsync(new Dictionary<string, string>
{
["Environment"] = "Production",
["Team"] = "Platform"
});

// 删除标签
await organization.RemoveTagAsync("OldTag");

code
### 更新组织属性
csharp
var patch = new MongoDBAtlasOrganizationPatch
{
Tags = { ["UpdatedAt"] = DateTime.UtcNow.ToString("o") },
Properties = new MongoDBAtlasOrganizationUpdateProperties
{
// 如有需要,更新用户信息
User = new MongoDBAtlasUserDetails(
emailAddress: "[email protected]",
upn: "[email protected]"
)
}
};

var updateOperation = await organization.UpdateAsync(
WaitUntil.Completed,
patch
);

code
### 删除组织
csharp
// 删除(长时间运行的操作)
await organization.DeleteAsync(WaitUntil.Completed);
code
## 模型属性参考

MongoDBAtlasOrganizationProperties

| 属性 | 类型 | 描述 |
|----------|------|-------------|
| Marketplace | MongoDBAtlasMarketplaceDetails | 必填。Marketplace 订阅详情 |
| User | MongoDBAtlasUserDetails | 必填。组织管理员用户 |
| PartnerProperties | MongoDBAtlasPartnerProperties | MongoDB 特定属性 |
| ProvisioningState | MongoDBAtlasResourceProvisioningState | 只读。当前配置状态 |

MongoDBAtlasMarketplaceDetails

| 属性 | 类型 | 描述 |
|----------|------|-------------|
| SubscriptionId | string | 必填。用于计费的 Azure 订阅 ID |
| OfferDetails | MongoDBAtlasOfferDetails | 必填。Marketplace 方案配置 |
| SubscriptionStatus | MarketplaceSubscriptionStatus | 只读。订阅状态 |

MongoDBAtlasOfferDetails

| 属性 | 类型 | 描述 |
|----------|------|-------------|
| PublisherId | string | 必填。
| PublisherId | string | 必填。发布者 ID(通常为 "mongodb") |
| OfferId | string | 必填。产品 ID |
| PlanId | string | 必填。方案 ID |
| PlanName | string | 必填。方案的显示名称 |
| TermUnit | string | 必填。计费周期单位(例如 "P1M") |
| TermId | string | 必填。周期标识符 |

MongoDBAtlasUserDetails

| 属性 | 类型 | 描述 |
|----------|------|-------------|
| EmailAddress | string | 必填。用户电子邮件地址 |
| Upn | string | 必填。用户主体名称 (UPN) |
| FirstName | string | 可选。用户名字 |
| LastName | string | 可选。用户姓氏 |

MongoDBAtlasPartnerProperties

| 属性 | 类型 | 描述 |
|----------|------|-------------|
| OrganizationName | string | MongoDB Atlas 组织名称 |
| OrganizationId | string | 只读。MongoDB Atlas 组织 ID |

部署状态 (Provisioning States)

| 状态 | 描述 |
|-------|-------------|
| Succeeded | 资源部署成功 |
| Failed | 部署失败 |
| Canceled | 部署已取消 |
| Provisioning | 资源正在部署中 |
| Updating | 资源正在更新中 |
| Deleting | 资源正在删除中 |
| Accepted | 请求已接受,部署即将开始 |

Marketplace 订阅状态

| 状态 | 描述 |
|--------|-------------|
| PendingFulfillmentStart | 订阅等待激活 |
| Subscribed | 订阅已激活 |
| Suspended | 订阅已暂停 |
| Unsubscribed | 订阅已取消 |

最佳实践

使用异步方法

csharp // 所有操作优先使用 async var org = await organizations.GetAsync("my-org"); await org.Value.AddTagAsync("key", "value");
code
### 处理长时间运行的操作
csharp // 等待操作完成 var operation = await organizations.CreateOrUpdateAsync( WaitUntil.Completed, // 阻塞直到完成 name, data );

// 或者启动后稍后轮询
var operation = await organizations.CreateOrUpdateAsync(
WaitUntil.Started, // 立即返回
name,
data
);

// 轮询检查是否完成
while (!operation.HasCompleted)
{
await Task.Delay(TimeSpan.FromSeconds(5));
await operation.UpdateStatusAsync();
}

code
### 检查部署状态
csharp
var org = await organizations.GetAsync("my-org");
if (org.Value.Data.Properties?.ProvisioningState ==
MongoDBAtlasResourceProvisioningState.Succeeded)
{
Console.WriteLine("Organization is ready");
}
code
### 使用资源标识符
csharp
// 无需 API 调用即可创建标识符
var resourceId = MongoDBAtlasOrganizationResource.CreateResourceIdentifier(
subscriptionId,
resourceGroupName,
organizationName
);

// 获取资源句柄(此时尚未获取数据)
var orgResource = armClient.GetMongoDBAtlasOrganizationResource(resourceId);

// 在需要时获取数据
var response = await orgResource.GetAsync();
``

常见错误

| 错误 | 原因 | 解决方案 |
|-------|-------|----------|
|
ResourceNotFound | 组织不存在 | 验证名称和资源组 |
|
AuthorizationFailed | 权限不足 | 检查资源组上的 RBAC 角色 |
|
InvalidParameter | 缺失必填属性 | 确保所有必填字段均已设置 |
|
MarketplaceError` | Marketplace 订阅问题 | 验证产品详情和订阅状态 |

相关资源

API 参考

使用场景

本技能适用于执行概览中所描述的工作流或操作。

局限性

  • 仅在任务明确符合上述范围时使用此技能。
  • 不要将输出结果视为针对特定环境的验证、测试或专家评审的替代方案。
  • 如果缺少必要的输入、权限、安全边界或成功标准,请停止操作并寻求澄清。