- Azure.ResourceManager.Fabric (.NET)
- Management plane SDK for provisioning and managing Microsoft Fabric capacity resources via Azure Resource Manager.
- Management Plane Only
- This SDK manages Fabric
- capacities
- (compute resources). For working with Fabric workspaces, lakehouses, warehouses, and data items, use the Microsoft Fabric REST API or data plane SDKs.
- Installation
- dotnet
- add
- package Azure.ResourceManager.Fabric
- dotnet
- add
- package Azure.Identity
- Current Version
-
- 1.0.0 (GA - September 2025)
- API Version
-
- 2023-11-01
- Target Frameworks
- .NET 8.0, .NET Standard 2.0 Environment Variables 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
Authentication 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 ( ) ; Resource Hierarchy ArmClient └── SubscriptionResource └── ResourceGroupResource └── FabricCapacityResource Core Workflows 1. Create Fabric Capacity 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 [ ] { "admin@contoso.com" } // 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 , "my-fabric-capacity" , capacityData ) ; FabricCapacityResource capacity = operation . Value ; Console . WriteLine ( $"Created capacity: { capacity . Data . Name } " ) ; Console . WriteLine ( $"State: { capacity . Data . Properties . State } " ) ; 2. Get Fabric Capacity // Get existing capacity 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. Update Capacity (Scale SKU or Change Admins) var capacity = await resourceGroup . Value . GetFabricCapacityAsync ( "my-fabric-capacity" ) ; var patch = new FabricCapacityPatch { Sku = new FabricSku ( "F128" , FabricSkuTier . Fabric ) , // Scale up Properties = new FabricCapacityUpdateProperties { Administration = new FabricCapacityAdministration ( new [ ] { "admin@contoso.com" , "newadmin@contoso.com" } ) } } ; var updateOperation = await capacity . Value . UpdateAsync ( WaitUntil . Completed , patch ) ; Console . WriteLine ( $"Updated SKU: { updateOperation . Value . Data . Sku . Name } " ) ; 4. Suspend and Resume Capacity // Suspend capacity (stop billing for compute) await capacity . Value . SuspendAsync ( WaitUntil . Completed ) ; Console . WriteLine ( "Capacity suspended" ) ; // Resume capacity var resumeOperation = await capacity . Value . ResumeAsync ( WaitUntil . Completed ) ; Console . WriteLine ( $"Capacity resumed. State: { resumeOperation . Value . Data . Properties . State } " ) ; 5. Delete Capacity await capacity . Value . DeleteAsync ( WaitUntil . Completed ) ; Console . WriteLine ( "Capacity deleted" ) ; 6. List All Capacities // 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. Check Name Availability 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. List Available SKUs // 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 Reference SKU Name Capacity Units (CU) Power BI Equivalent 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 - Key Types Reference Type Purpose ArmClient Entry point for all ARM operations FabricCapacityResource Represents a Fabric capacity instance FabricCapacityCollection Collection for capacity CRUD operations FabricCapacityData Capacity creation/read data model FabricCapacityPatch Capacity update payload FabricCapacityProperties Capacity properties (administration, state) FabricCapacityAdministration Admin members configuration FabricSku SKU configuration (name and tier) FabricSkuTier Pricing tier (currently only "Fabric") FabricProvisioningState Provisioning states (Succeeded, Failed, etc.) FabricResourceState Resource states (Active, Suspended, etc.) FabricNameAvailabilityContent Name availability check request FabricNameAvailabilityResult Name availability check response Provisioning and Resource States Provisioning States ( FabricProvisioningState ) Succeeded - Operation completed successfully Failed - Operation failed Canceled - Operation was canceled Deleting - Capacity is being deleted Provisioning - Initial provisioning in progress Updating - Update operation in progress Resource States ( FabricResourceState ) Active - Capacity is running and available Provisioning - Being provisioned Failed - In failed state Updating - Being updated Deleting - Being deleted Suspending - Transitioning to suspended Suspended - Suspended (not billing for compute) Pausing - Transitioning to paused Paused - Paused Resuming - Resuming from suspended/paused Scaling - Scaling to different SKU Preparing - Preparing resources Best Practices Use WaitUntil.Completed for operations that must finish before proceeding Use WaitUntil.Started when you want to poll manually or run operations in parallel Always use DefaultAzureCredential — never hardcode credentials Handle RequestFailedException for ARM API errors Use CreateOrUpdateAsync for idempotent operations Suspend when not in use — Fabric capacities bill for compute even when idle Check provisioning state before performing operations on a capacity Use appropriate SKU — Start small (F2/F4) for dev/test, scale up for production Error Handling 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 } " ) ; } Common Pitfalls Capacity names must be globally unique — Fabric capacity names must be unique across all Azure subscriptions Suspend doesn't delete — Suspended capacities still exist but don't bill for compute SKU changes may require downtime — Scaling operations can take several minutes Admin UPNs must be valid — Capacity administrators must be valid Azure AD users Location constraints — Not all SKUs are available in all regions; use GetSkusFabricCapacitiesAsync to check Long provisioning times — Capacity creation can take 5-15 minutes Related SDKs SDK Purpose Install Azure.ResourceManager.Fabric Management plane (this SDK) dotnet add package Azure.ResourceManager.Fabric Microsoft.Fabric.Api Data plane operations (beta) dotnet add package Microsoft.Fabric.Api --prerelease Azure.ResourceManager Core ARM SDK dotnet add package Azure.ResourceManager Azure.Identity Authentication dotnet add package Azure.Identity References Azure.ResourceManager.Fabric NuGet GitHub Source Microsoft Fabric Documentation Fabric Capacity Management When to Use This skill is applicable to execute the workflow or actions described in the overview.