SPN + Azure Runbook + Webhook = Power BI Refresh (pt. 1) (Dansk)

(Perico Riccardo) (17. aug 2020)

Jeg læste for nylig en fantastisk artikel af Nicky Van Vroenhoven .

I hans scenarie skal Nicky affyre Power BI-datasætopdatering efter en bestemt trin i SQL Server Agents job, og dette skal gøres uden at bruge en rigtig brugers legitimationsoplysninger .

Han fik det til at skabe et PowerShell-script, der logger ind og udløser opdatering af datasæt gennem et SPN.

Efter at have læst dette begynder jeg at tænke, om jeg kunne indkapsle dette i en anden arkitektur, der kunne være indgangsstedet for mange typer forskellige applikationer.

Ideen er at pakke PowerShell-scriptet i en Azure Automation Runbook

og gør det derefter tilgængeligt for alle applikationer, der simpelthen kan udføre en postanmodning til en URI.

Fordele:

1. Kun en central version af scriptet

2. Power BI-styringsmodul er ikke installeret på applikationsmaskinen, men det er installeret og udført i skyen på et sæt virtuelle computere, der er klargjort efter behov, når udførelsen starter

3. Runbook kan planlægges (måske er det ikke en fordel, bare en ekstra funktion, da vi allerede kan planlægge en Power BI-opdatering)

4. Krypterede legitimationsoplysninger understøtter for at få det til at fungere uden at kende SPN-hemmeligheden

5. Variabler understøtter for dynamisk at ændre konteksten for din opdatering

6. Webhooks understøtter for at eksponere det som sort boks med et simpelt POST-opkald

Lad os antage, at følgende forudsætninger allerede er på plads:

– SPN oprettet og opsætning i AAD

– Aktiverede APIer bruges på Power BI-lejerniveau til SPN

– Worspace V2 med SPN-bruger som admin

Hvis dette allerede er i gang og kører opsætningen fra nu af, er det ret nemt, det kunne gøres manuelt af Azure Portal, men jeg foretrækker PowerShell med Az-modul , det er hurtigere, lettere at replikere og mindre “clicky-clicky” 🙂 (brug PowerShell 7.x som foreslået af MSFT, da jeg fandt nogle fejl ved hjælp af det i PowerShell 5.1.X).

Først og fremmest opsætningsparametre til oprettelse af ressourcer:

$resource\_group\_name = ""
$automation\_account\_name = ""
$automation\_account\_location = ""
$runbook\_name = ""
$tenant\_id = ""
$group\_id = "" # Workspace ID
$dataset\_id = "" # Dataset to Refresh ID
$app\_id = "" # Service PRincipal ID
$Password = ConvertTo-SecureString "ThisIsMyPassword" -AsPlainText -Force # Secret from Service Principal

Derefter forbinder til det azurblå abonnement

Connect-AzAccount

Opret en Azure Automation Konto (du kan bruge en eksisterende, hvis du vil)

New-AzAutomationAccount -ResourceGroupName $resource\_group\_name -Location $automation\_account\_location -Name $automation\_account\_name

Opret Runbook , der er vært for vores PowerShell-kode (bemærk Type-parameteren lig med PowerShell)

New-AzAutomationRunbook -Name $runbook\_name -ResourceGroupName $resource\_group\_name -AutomationAccountName $automation\_account\_name -Type PowerShell

Opret 3 variabler, der er værtsværdier for ider , der er nødvendige for at opdatere datasættet:

New-AzAutomationVariable -Name ‘TenantID’ -Description ‘Power BI Tenant ID’ -Value $tenant\_id -AutomationAccountName $automation\_account\_name -ResourceGroupName $resource\_group\_name -Encrypted $falseNew-AzAutomationVariable -Name ‘GroupID’ -Description ‘Power BI Workspace ID’ -Value $group\_id -AutomationAccountName $automation\_account\_name -ResourceGroupName $resource\_group\_name -Encrypted $falseNew-AzAutomationVariable -Name ‘DatasetID’ -Description ‘Power BI Dataset ID’ -Value $dataset\_id -AutomationAccountName $automation\_account\_name -ResourceGroupName $resource\_group\_name -Encrypted $false

Gem SPN-hemmeligheder sikkert udnyttelse af Azure Automations legitimationsfunktion:

$Credential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $app\_id, $passwordNew-AzAutomationCredential -name ‘SPN’ -Description ‘Service Principal’ -Value $Credential -AutomationAccountName $automation\_account\_name -ResourceGroupName $resource\_group\_name

Fuld kode:

Miljøet er klar.

Kun to manuelle trin til at udføre:

1. Importer MicrosoftPowerBIMgmt.Profile PowerShell-modul til Azure Automation. Dette giver Azure Automation mulighed for at bruge cmdlets indeholdt i dette modul.

a. Åbn Azure Portal

b. Naviger til din Azure Automation-konto

c. Klik på “Modular Gallery” under “Delt ressourcer” i venstre blad,

d. Søg efter “MicrosoftPowerBIMgmt.Profile”

e. Vælg det, og klik på “Importer”

2. Tilføj PowerShell-script for at udføre Power BI-opdatering gennem API-opkald