Azure 管理 Fabric .NET SDK
Azure.ResourceManager.Fabric (.NET)
用于通过 Azure Resource Manager 部署和管理 Microsoft Fabric 容量资源的管理平面 SDK。
> 仅限管理平面
> 此 SDK 用于管理 Fabric *容量*(计算资源)。如需操作 Fabric 工作区、Lakehouse、Warehouse 和数据项,请使用 Microsoft Fabric REST API 或数据平面 SDK。
安装
dotnet add package Azure.ResourceManager.Fabric
dotnet add package Azure.Identity当前版本: 1.0.0 (GA - 2025年9月)
API 版本: 2023-11-01
目标框架: .NET 8.0, .NET Standard 2.0
环境变量
AZURE_SUBSCRIPTION_ID=<your-subscription-id>
用于服务主体身份验证(可选)
AZURE_TENANT_ID=<tenant-id>
AZURE_CLIENT_ID=<client-id>
AZURE_CLIENT_SECRET=<client-secret>身份验证
using Azure.Identity;
using Azure.ResourceManager;
using Azure.ResourceManager.Fabric;
// 始终使用 DefaultAzureCredential
var credential = new DefaultAzureCredential();
var armClient = new ArmClient(credential);
// 获取订阅
var subscription = await armClient.GetDefaultSubscriptionAsync();
资源层级
ArmClient
└── SubscriptionResource
└── ResourceGroupResource
└── FabricCapacityResource核心工作流
1. 创建 Fabric 容量
using Azure.ResourceManager.Fabric;
using Azure.ResourceManager.Fabric.Models;
using Azure.Core;
// 获取资源组
var resourceGroup = await subscription.GetResourceGroupAsync("my-resource-group");
// 定义容量配置
var administration = new FabricCapacityAdministration(
new[] { "[email protected]" } // 容量管理员 (UPN 或对象 ID)
);
var properties = new FabricCapacityProperties(administration);
var sku = new FabricSku("F64", FabricSkuTier.Fabric);
var capacityData = new FabricCapacityData(
AzureLocation.WestUS2,
properties,
sku)
{
Tags = { ["Environment"] = "Production" }
};
// 创建容量(长时间运行的操作)
var capacityCollection = resourceGroup.Value.GetFabricCapacities();
var operation = await capacityCollection.CreateOrUpdateAsync(
WaitUntil.Completed,
"my-fabric-capacity",
capacityData);
FabricCapacityResource capacity = operation.Value;
Console.WriteLine($"Created capacity: {capacity.Data.Name}");
Console.WriteLine($"State: {capacity.Data.Properties.State}");
2. 获取 Fabric 容量
// 获取现有容量
var capacity = await resourceGroup.Value
.GetFabricCapacityAsync("my-fabric-capacity");
Console.WriteLine($"Name: {capacity.Value.Data.Name}");
Console.WriteLine($"Location: {capacity.Value.Data.Location}");
Console.WriteLine($"SKU: {capacity.Value.Data.Sku.Name}");
Console.WriteLine($"State: {capacity.Value.Data.Properties.State}");
Console.WriteLine($"Provisioning State: {capacity.Value.Data.Properties.ProvisioningState}");
3. 更新容量(缩放 SKU 或更改管理员)
var capacity = await resourceGroup.Value
.GetFabricCapacityAsync("my-fabric-capacity");
var patch = new FabricCapacityPatch
{
Sku = new FabricSku("F128", FabricSkuTier.Fabric), // 向上扩展
Properties = new FabricCapacityUpdateProperties
{
Administration = new FabricCapacityAdministration(
new[] { "admin
@contoso.com", "[email protected]" }
)
}
};
var updateOperation = await capacity.Value.UpdateAsync(
WaitUntil.Completed,
patch);
Console.WriteLine($"Updated SKU: {updateOperation.Value.Data.Sku.Name}");
### 4. 暂停与恢复容量// 暂停容量(停止计算计费)
await capacity.Value.SuspendAsync(WaitUntil.Completed);
Console.WriteLine("Capacity suspended");
// 恢复容量
var resumeOperation = await capacity.Value.ResumeAsync(WaitUntil.Completed);
Console.WriteLine($"Capacity resumed. State: {resumeOperation.Value.Data.Properties.State}");
### 5. 删除容量await capacity.Value.DeleteAsync(WaitUntil.Completed);
Console.WriteLine("Capacity deleted");
### 6. 列出所有容量// 在资源组中列出
await foreach (var cap in resourceGroup.Value.GetFabricCapacities())
{
Console.WriteLine($"- {cap.Data.Name} ({cap.Data.Sku.Name})");
}
// 在订阅中列出
await foreach (var cap in subscription.GetFabricCapacitiesAsync())
{
Console.WriteLine($"- {cap.Data.Name} in {cap.Data.Location}");
}
### 7. 检查名称可用性var checkContent = new FabricNameAvailabilityContent
{
Name = "my-new-capacity",
ResourceType = "Microsoft.Fabric/capacities"
};
var result = await subscription.CheckFabricCapacityNameAvailabilityAsync(
AzureLocation.WestUS2,
checkContent);
if (result.Value.IsNameAvailable == true)
{
Console.WriteLine("Name is available!");
}
else
{
Console.WriteLine($"Name unavailable: {result.Value.Reason} - {result.Value.Message}");
}
### 8. 列出可用 SKU// 列出订阅中所有可用的 SKU
await foreach (var skuDetails in subscription.GetSkusFabricCapacitiesAsync())
{
Console.WriteLine($"SKU: {skuDetails.Name}");
Console.WriteLine($" Resource Type: {skuDetails.ResourceType}");
foreach (var location in skuDetails.Locations)
{
Console.WriteLine($" Location: {location}");
}
}
// 列出现有容量可用的 SKU(用于扩缩容)
await foreach (var skuDetails in capacity.Value.GetSkusForCapacityAsync())
{
Console.WriteLine($"Can scale to: {skuDetails.Sku.Name}");
}
## SKU 参考
| SKU 名称 | 容量单位 (CU) | Power BI 等效级别 |
|----------|---------------------|---------------------|
| F2 | 2 | - |
| F4 | 4 | - |
| F8 | 8 | EM1/A1 |
| F16 | 16 | EM2/A2 |
| F32 | 32 | EM3/A3 |
| F64 | 64 | P1/A4 |
| F128 | 128 | P2/A5 |
| F256 | 256 | P3/A6 |
| F512 | 512 | P4/A7 |
| F1024 | 1024 | P5/A8 |
| F2048 | 2048 | - |
关键类型参考
| 类型 | 用途 |
|------|---------|
| ArmClient | 所有 ARM 操作的入口点 |
| FabricCapacityResource | 表示一个 Fabric 容量实例 |
| FabricCapacityCollection | 用于容量 CRUD 操作的集合 |
| FabricCapacityData | 容量创建/读取的数据模型 |
| FabricCapacityPatch | 容量更新的 Payload |
| FabricCapacityProperties | 容量属性(管理、状态) |
| FabricCapacityAdministration | 管理员成员配置 |
| FabricSku | SKU 配置(名称和层级) |
| FabricSkuTier | 定价层级(目前仅为 "Fabric") |
| FabricProvisioningState | 部署状态(Succeeded, Failed 等) |
| FabricResourceState | 资源状态(Active, Suspended 等) |
| FabricNameAvailabilityContent | 名称可用性检查请求 |
| FabricNameAvailabilityResult | 名称可用性检查响应 |
部署与资源状态
部署状态 (FabricProvisioningState)
Succeeded - 操作成功完成
Failed - 操作失败
Canceled - 操作已取消
Deleting - 容量正在删除
Provisioning - 正在进行初始部署
Updating - 更新操作正在进行
资源状态 (FabricResourceState)
Active - 容量正在运行且可用
Provisioning - 正在部署
Failed - 处于失败状态
Updating - 正在更新
Deleting - 正在删除
Suspending - 正在转换为暂停状态
Suspended - 已暂停(不收取计算费用)
Pausing - 正在转换为暂停状态
Paused - 已暂停
Resuming - 正在从暂停状态恢复
Scaling - 正在缩放至不同的 SKU
Preparing - 正在准备资源
最佳实践
1. 对于必须在继续之前完成的操作,请使用 WaitUntil.Completed
2. 如果需要手动轮询或并行运行操作,请使用 WaitUntil.Started
3. 始终使用 DefaultAzureCredential —— 切勿硬编码凭据
4. 使用 RequestFailedException 处理 ARM API 错误
5. 对于幂等操作,请使用 CreateOrUpdateAsync
6. 不使用时请暂停 —— Fabric 容量即使在闲置时也会收取计算费用
7. 在对容量执行操作前,请检查其部署状态
8. 使用合适的 SKU —— 开发/测试环境建议从小规模(F2/F4)开始,生产环境再向上扩展
错误处理
try
{
var operation = await capacityCollection.CreateOrUpdateAsync(
WaitUntil.Completed, capacityName, capacityData);
}
catch (RequestFailedException ex) when (ex.Status == 409)
{
Console.WriteLine("容量已存在或发生冲突");
}
catch (RequestFailedException ex) when (ex.Status == 400)
{
Console.WriteLine($"配置无效: {ex.Message}");
}
catch (RequestFailedException ex) when (ex.Status == 403)
{
Console.WriteLine("权限不足或配额超出");
}
catch (RequestFailedException ex)
{
Console.WriteLine($"ARM 错误: {ex.Status} - {ex.ErrorCode}: {ex.Message}");
}
``
常见陷阱
1. 容量名称必须全局唯一 —— Fabric 容量名称在所有 Azure 订阅中必须唯一
2. 暂停并非删除 —— 暂停的容量仍然存在,但不再收取计算费用
3. SKU 变更可能导致停机 —— 缩放操作可能需要几分钟时间
4. 管理员 UPN 必须有效 —— 容量管理员必须是有效的 Azure AD 用户
5. 区域限制 —— 并非所有 SKU 在所有区域都可用;请使用 GetSkusFabricCapacitiesAsync 进行检查
6. 部署时间较长 —— 创建容量可能需要 5-15 分钟
相关 SDK
| SDK | 用途 | 安装 |
|-----|---------|---------|
| Azure.ResourceManager.Fabric | 管理平面(本 SDK) | dotnet add package Azure.ResourceManager.Fabric |Microsoft.Fabric.Api
| | 数据平面操作 (beta) | dotnet add package Microsoft.Fabric.Api --prerelease |Azure.ResourceManager
| | ARM 核心 SDK | dotnet add package Azure.ResourceManager |Azure.Identity
| | 身份验证 | dotnet add package Azure.Identity` |
参考资料
abric/)适用场景
本技能适用于执行概览中所描述的工作流或操作。局限性
- 仅在任务明确符合上述范围时使用本技能。
- 不要将输出结果视为针对特定环境的验证、测试或专家评审的替代方案。
- 如果缺失必要的输入、权限、安全边界或成功标准,请停止操作并寻求澄清。