关于 azure-mgmt-fabric-dotnet
面向 .NET 开发者的 Azure.ResourceManager.Fabric 管理 SDK 指南,用于通过 Azure Resource Manager 配置和管理 Fabric 容量;不管理工作区或数据项。
主要功能
- 01创建和查询 Fabric 容量
- 02调整 SKU 与管理员
- 03暂停、恢复或删除容量
- 04检查名称与可用 SKU
适用场景
- 01为环境配置 Fabric 容量
- 02按需调整容量 SKU
- 03闲置时暂停容量
- 04确认区域可用的 SKU
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ sickn33/ agentic-awesome-skills --skill azure-mgmt-fabric-dotnet安装后在 Claude Code 中输入/azure-mgmt-fabric-dotnet确认已加载。
详细介绍
Azure.ResourceManager.Fabric (.NET)
用于通过 Azure Resource Manager 预配和管理 Microsoft Fabric 容量资源的管理平面 SDK。
仅限管理平面 此 SDK 用于管理 Fabric 容量(计算资源)。如需使用 Fabric 工作区、湖仓、数据仓库和数据项,请使用 Microsoft Fabric REST API 或数据平面 SDK。
安装
dotnet add package Azure.ResourceManager.Fabric
dotnet add package Azure.Identity
当前版本:1.0.0(GA - September 2025)
API 版本:2023-11-01
目标框架:.NET 8.0、.NET Standard 2.0
环境变量
AZURE_SUBSCRIPTION_ID=<your-subscription-id>
# For service principal auth (optional)
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;
// Always use DefaultAzureCredential
var credential = new DefaultAzureCredential();
var armClient = new ArmClient(credential);
// Get subscription
var subscription = await armClient.GetDefaultSubscriptionAsync();
资源层次结构
ArmClient
└── SubscriptionResource
└── ResourceGroupResource
└── FabricCapacityResource
核心工作流
执行写入操作前,请确认凭据租户和准确的订阅 ID;仅仅列出 AZURE_SUBSCRIPTION_ID 并不会让 GetDefaultSubscriptionAsync 选择该订阅。预配、扩缩和恢复会产生费用;暂停和删除会影响可用性。请将授权范围限定为实际的资源、SKU 和操作。示例面向文档中所述的 API,并非经过测试的部署;请在 Microsoft API 参考 中验证软件包签名。容量名称只能使用小写字母和数字,不能包含连字符。
1. 创建 Fabric 容量
using Azure.ResourceManager.Fabric;
using Azure.ResourceManager.Fabric.Models;
using Azure.Core;
// Get resource group
var resourceGroup = await subscription.GetResourceGroupAsync("my-resource-group");
// Define capacity configuration
var administration = new FabricCapacityAdministration(
new[] { "[email protected]" } // Capacity administrators (UPNs or object IDs)
);
var properties = new FabricCapacityProperties(administration);
var sku = new FabricSku("F64", FabricSkuTier.Fabric);
var capacityData = new FabricCapacityData(
AzureLocation.WestUS2,
properties,
sku)
{
Tags = { ["Environment"] = "Production" }
};
// Create capacity (long-running operation)
var capacityCollection = resourceGroup.Value.GetFabricCapacities();
var operation = await capacityCollection.CreateOrUpdateAsync(
WaitUntil.Completed,
"myfabriccapacity",
capacityData);
FabricCapacityResource capacity = operation.Value;
Console.WriteLine($"Created capacity: {capacity.Data.Name}");
Console.WriteLine($"State: {capacity.Data.Properties.State}");
2. 获取 Fabric 容量
// Get existing capacity
var capacity = await resourceGroup.Value
.GetFabricCapacityAsync("myfabriccapacity");
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("myfabriccapacity");
var patch = new FabricCapacityPatch
{
Sku = new FabricSku("F128", FabricSkuTier.Fabric), // Scale up
Properties = new FabricCapacityUpdateProperties
{
Administration = new FabricCapacityAdministration(
new[] { "[email protected]", "[email protected]" }
)
}
};
var updateOperation = await capacity.Value.UpdateAsync(
WaitUntil.Completed,
patch);
Console.WriteLine($"Updated SKU: {updateOperation.Value.Data.Sku.Name}");
4. 暂停和恢复容量
// Suspend capacity (stop billing for compute)
await capacity.Value.SuspendAsync(WaitUntil.Completed);
Console.WriteLine("Capacity suspended");
// Resume capacity
await capacity.Value.ResumeAsync(WaitUntil.Completed);
var resumedCapacity = await capacity.Value.GetAsync();
Console.WriteLine($"Capacity resumed. State: {resumedCapacity.Value.Data.Properties.State}");
5. 删除容量
await capacity.Value.DeleteAsync(WaitUntil.Completed);
Console.WriteLine("Capacity deleted");
6. 列出所有容量
// In a resource group
await foreach (var cap in resourceGroup.Value.GetFabricCapacities())
{
Console.WriteLine($"- {cap.Data.Name} ({cap.Data.Sku.Name})");
}
// In a subscription
await foreach (var cap in subscription.GetFabricCapacitiesAsync())
{
Console.WriteLine($"- {cap.Data.Name} in {cap.Data.Location}");
}
7. 检查名称是否可用
var checkContent = new FabricNameAvailabilityContent
{
Name = "mynewcapacity",
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
// List all SKUs available in subscription
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}");
}
}
// List SKUs available for an existing capacity (for scaling)
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 | 容量更新负载 |
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- 正在扩缩到不同的 SKUPreparing- 正在准备资源
最佳实践
- 使用
WaitUntil.Completed,确保操作完成后再继续 - 在需要手动轮询或并行运行操作时,使用
WaitUntil.Started - 始终使用
DefaultAzureCredential——切勿硬编码凭据 - 处理
RequestFailedException,以应对 ARM API 错误 - 对幂等操作使用
CreateOrUpdateAsync - 不使用时暂停——即使处于空闲状态,Fabric 容量仍会产生计算费用
- 对容量执行操作前,检查其预配状态
- 使用合适的 SKU——开发/测试从较小规格(F2/F4)开始,生产环境则按需扩展
错误处理
using Azure;
try
{
var operation = await capacityCollection.CreateOrUpdateAsync(
WaitUntil.Completed, capacityName, capacityData);
}
catch (RequestFailedException ex) when (ex.Status == 409)
{
Console.WriteLine("Capacity already exists or conflict");
}
catch (RequestFailedException ex) when (ex.Status == 400)
{
Console.WriteLine($"Invalid configuration: {ex.Message}");
}
catch (RequestFailedException ex) when (ex.Status == 403)
{
Console.WriteLine("Insufficient permissions or quota exceeded");
}
catch (RequestFailedException ex)
{
Console.WriteLine($"ARM Error: {ex.Status} - {ex.ErrorCode}: {ex.Message}");
}
常见问题
- 容量名称必须全局唯一——Fabric 容量名称在所有 Azure 订阅中都必须唯一
- 暂停不会删除容量——暂停的容量仍然存在,但不会产生计算费用
- 更改 SKU 可能需要停机——扩缩操作可能需要几分钟
- 管理员 UPN 必须有效——容量管理员必须是有效的 Azure AD 用户
- 区域限制——并非所有 SKU 在所有区域都可用;使用
GetSkusFabricCapacitiesAsync进行检查 - 预配时间较长——创建容量可能需要 5-15 分钟
相关 SDK
| SDK | 用途 | 安装 |
|---|---|---|
Azure.ResourceManager.Fabric | 管理平面(此 SDK) | dotnet add package Azure.ResourceManager.Fabric |
Microsoft.Fabric.Api | 数据平面操作(测试版) | dotnet add package Microsoft.Fabric.Api --prerelease |
Azure.ResourceManager | 核心 ARM SDK | dotnet add package Azure.ResourceManager |
Azure.Identity | 身份验证 | dotnet add package Azure.Identity |
参考资料
适用场景
当需要执行概述中描述的工作流或操作时,可使用此技能。
限制
- 仅当任务明确符合上述范围时,才使用此技能。
- 不要将输出视为环境特定验证、测试或专家审查的替代品。
- 如果缺少必需的输入、权限、安全边界或成功标准,请停止并请求澄清。
评论
支持 Markdown