Om je Azure omgeving te beheren kan men gebruik maken van de GUI via het Azure Portal. Dit werkt erg goed voor handmatige acties. Maar voor een BI landschap, waar processen vaak ’s nachts draaien en waar dynamisch moet worden opgeschaald of gepauzeerd, wil je deze taken automatiseren.
Denk bijvoorbeeld aan:
- Het tijdelijk opschalen van een Azure SQL Database voordat een zwaar laadproces start.
- Het pauzeren van een Fabric Capacity buiten kantooruren.
- Het ophalen van de logging van je Azure Data Factory pipelines.
Om dit te automatiseren kan je gebruik maken van de Azure Resource Manager (ARM) REST API. In deze blog bespreek ik
- Hoe de authorisatie voor ARM werkt.
- Hoe de ARM endpoints zijn opgebouwd.
- Waar je je de orchestrator voor je processen kan uitvoeren.
- Veelvoorkomende BI use-cases in een datagedregen organisatie
1. Authorizatie voor Azure Resource Manager
Om te autoriseren gebruik je een Bearer token die je opvraagt voor de ARM resource
Je kan een token ophalen voor 3 type users
- Named user: Je haalt handmatig een token op via MFA. Dit werkt goed om je code te testen.
- App Registration: Geschikt als je processen buiten Azure om wilt automatiseren.
- Managed Identity: Je hoeft geen credentials te beheren en in de meeste Azure resources zit standaard functionaliteit om te authoriseren via Managed Identity.
Als je orchestratie draait binnen een Azure resource dan heeft de Managed Identity de voorkeur.
Rechten in Entra ID
In het Azure Entra ID geef je de user die je gebruikt de juiste rechten op de Azure resource. Deze rechten zijn afhankelijk van de resource die je wilt gaan beheren. Het token bevat ook de verwijzing naar de tenant waar het token vandaan komt, dus deze hoeft je niet nog los mee te geven in je aanroep van ARM.
standaard rol met de minste privileges die je kan gebruiken staan bij het logo. Vaak zal dit de Contributor rol zijn omdat er geen standaard rollen zijn met minder privileges die de taken uit kunnen voeren. Het is ook mogelijk om een custom rol hiervoor in te richten.
2. Opbouw van een Azure Resource Manager endpoint
ARM heeft voor iedere resource een eigen endpoint. De structuur van de endpoints is wel altijd hetzelfde:
https://management.azure.com
/subscriptions/{subscriptionId}
/resourceGroups/{resourceGroupName}
/{Endpoint wat je wilt beheren}
?api-version={versie van endpoint}
Je verwijst met de base url naar het managent endpoint. Dan geef je op in welke subscription en resource group je resource zit. Vervolgens heb je een resource specifiek stuk voor je endpoint. En als laatste geef je de API versie mee die je wilt gebruiken. Elke resource heeft zijn eigen API versie die je gemakkelijk kan opzoeken in de Microsoft documentatie.
Je stuurt een GET, POST, PUT, PATCH of DELETE request, afhankelijk van de bewerking. Bij POST, PUT en PATCH stuur je de extra parameters mee in de request body.
3. Orchestrator voor het aansturen van Azure Resource Manager
Het aansturen van ARM kan via elke methode waarmee je een API call kan uitvoeren. Binnen Azure zijn de meest gebruikelijke manieren om dit te doen via Azure Data Factory, Azure Functions of Azure Automation Accounts. Het is afhankelijk van je doel en de ervaring van je ontwikkelaars waar je de aansturing gaat doen.
Azure Data Factory
Met de grafische UI van Azure Data Factory maak je pipelines waarbij je de web activity kan gebruiken voor ARM calls. Met de ingebouwde scheduler kan je de pipelines inplannen.
Zolang je orchestrator niet te complex wordt, kan dit een goede optie zijn. Voor complexe logica is het maken van een eigen script in bijvoorbeeld een Azure Automation Account runbook geschikter.
Voorbeeld Azure Data Factory
Fabric Capacity -> Contributor
Of custom rol met
- Microsoft.Fabric/capacities/read
- Microsoft.Fabric/capacities/write
- Microsoft.Fabric/capacities/suspend/action
- Microsoft.Fabric/capacities/resume/action
Het starten of pauzeren van een Fabric Capacity. Dit kunnen we dit in Azure Data Factory via een web activity inrichten waarbij we gebruik maken van de Managed Identity.

Azure Automation Account
Automation Accounts zijn goed voor het uitvoeren van flexibele, code-gedreven aansturing. Een goede optie is om je aansturing in Powershell runbooks te maken.
- Az-modules zijn standaard beschikbaar
- Grote library van extra modules te downloaden (wel de juiste Powershell versie kiezen)
- Authenticatie via Managed Identity doe je eenvoudig met:
Connect-AzAccount -Identity
Daarna is de huidige sessie verbonden met Azure en kan je bijvoorbeeld ARM endpoints aanroepen met:
Invoke-AzRestMethod
Dit is een wrapper methode om REST aan te roepen welke meteen de authorisatie en resource verwijzing afhandeld voor een verbonden sessie.
Voorbeeld Automation Account
Fabric Capacity -> Contributor
Of custom rol met
- Microsoft.Fabric/capacities/read
- Microsoft.Fabric/capacities/write
- Microsoft.Fabric/capacities/suspend/action
- Microsoft.Fabric/capacities/resume/action
Het beheren van een Fabric Capacity. Afhankelijk van de huidige status van de capacity willen we deze starten, stoppen of juist op- afschalen. Dan kunnen we de volgende stappen ondernemen.
- Sessie verbdinden via de Managed Identity van het Automation account.
- De huidige status van de Fabric Capacity opvragen via een ARM GET.
- Deze status bevat onder meer de huidige state en SKU welke als parameters gebruikt worden in de rest van ons script.

4. Azure Function
Wanneer je processen op aanvraag of korte taken wilt uitvoeren kan je ook een Azure Function gebruiken. Hier kan je vergelijkbare Powershell scripts uitvoeren. Lees ook eens mijn andere blog om een voorbeeld hiervan te zien.
5. Use-cases BI
Bij Alistar gebruiken we ARM binnen veel BI-landschappen om kosten te besparen, processen te versnellen, en resources flexibel te laten meebewegen. Hieronder komt een selectie van veelvoorkomende scenario’s.
Nog even als herhaling, de basis van ieder endpoint is:
https://management.azure.com/subscriptions/{subscriptionId}/
resourceGroups/{resourceGroupName}/providers
In de voorbeelden zal ik alleen de resource specifieke uitbreidingen hierop benoemen.
En als best practice:
➡️ Begin altijd met een GET request om de huidige status van je resource op te halen voordat je een wijzigingsverzoek doet. Dan weet je ook of het nuttig is om dit te doen.
Use-case 1: Azure SQL Database op- en afschalen
Azure SQL Server -> Contributor
Of custom rol met
- Microsoft.Sql/servers/databases/read
- Microsoft.Sql/servers/databases/write
Vaak wordt de data van de verschillende bronsystemen in de nacht geladen naar een datawarehouse. Voordat het bedrijf actief wordt is deze data dan al vervder verwerkt en geladen naar een of meerdere semantische modellen.
Tijdens deze ETL processen kan je meer rekenkracht en data size nodig hebben voor de processen en transactional logs. Na de laadprocessen kunnen we weer afschalen.
Endpoint
PUT /Microsoft.Sql/servers/{server}/databases/{Database}?api-version=2021-11-01′
Body:

Dit voorbeeld gebruikt het DTU model. Voor een vCores model gebruik je een vergelijkbare call.
Use-case 2: Fabric Capacity pauzeren, hervatten en schalen
Fabric Capacity -> Contributor
Of custom rol met
- Microsoft.Fabric/capacities/read
- Microsoft.Fabric/capacities/write
- Microsoft.Fabric/capacities/suspend/action
- Microsoft.Fabric/capacities/resume/action
Wanneer je delen van je PowerBI omgeving onder een Fabric Capacity licentie draait dan heb je een gedeelde resource poule waar alle processen uit putten. Het kan hierdoor nodig zijn om de Fabric Capacity tijdelijk op te schalen als je bijvoorbeeld zware ETL processen in Fabric Pipelines draait. En als je onder een F32 SKU of lager draait dan kan het ook nuttig zijn om de Capacity te pauzeren als hij niet nodig is om kosten te besparen. Let er dan alleen wel op dat alles onder een gepauzeerde Fabric Capacity draait niet werkt totdat deze weer geactiveerd wordt. Dus je moet je ARM aansturing dan vanuit een andere plaats doen.
Endpoint
Pauzeren / hervatten
POST /Microsoft.Fabric/capacities/{capacity}/{state}?api-version=2023-11-01
{state} = suspend voor pauzeren of resume voor hervatten
Schalen
PATCH /Microsoft.Fabric/capacities/{capacityName}?api-version=2023-11-01
Body:

Use-case 3: Azure Analysis Services starten, pauzeren en schalen
Azure Analysis Services -> Contributor
Of custom rol met
- Microsoft.AnalysisServices/servers/read
- Microsoft.AnalysisServices/servers/suspend/action
- Microsoft.AnalysisServices/servers/resume/action
- Microsoft.AnalysisServices/servers/write
Wanneer je model gehost wordt in Azure Analysis Services kunnen de kosten al snel oplopen. Het is daarom verstandig om de instance te pauzeren wanneer deze niet in gebruik is. Afhankelijk van de semantische modellen die je host en de laadstrategie die gekozen wordt kan er tijdens het laden van je model ook een piekbelasting zijn het beschikbare geheugen van de Analysis Services. Het kan dan nodig zijn om deze tijdelijk op te schalen tijdens het laden.
Endpoints
Pauzeren / hervatten
POST /Microsoft.AnalysisServices/servers/{serverName}/{state}?api-version=2017-08-01
{state} = suspend voor pauzeren of resume voor hervatten
SKU wijzigen
PATCH /Microsoft.AnalysisServices/servers/{serverName}?api-version=2017-08-01
Body:

Use-case 4: Azure Data Factory pipeline runs ophalen
Azure Data Factory -> Data Factory Reader
Of custom rol met
- Microsoft.DataFactory/factories/read
- Microsoft.DataFactory/factories/pipelineruns/read
Bij Azure Data Factory gebeurt de aansturing meestal ook binnen de interne scheduler. Toch kan het nuttig zijn om via ARM een deel van de aansturing te doen. Bijvoorbeeld om de logging van de gelopen pipelines op te halen. In de body geeft je het datumbereik op dat je wilt ophalen en je kan ook filteren op bijvoorbeeld specifieke pipelines.
Endpoint
POST /Microsoft.DataFactory/factories/{factoryName}/queryPipelineRuns?api-version=2018-06-01
Body:

6. Conclusie
De Azure Resource Manager bied een grote flexibiliteit voor het automatiseren van processen in zowel Azure als Fabric. Door hier slim gebruik van te maken kan je
- Kosten verlagen.
- Processen flexibel en op het juiste niveau inrichten.
- In control blijven van je BI landschap.
Ben je benieuwd welke toegevoegde waarde de Azure Resource Manager voor jou organisatie kan bieden? Neem dan contact met ons op, we denken graag met je mee!