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

(Perico Riccardo) (17. august 2020)

Jeg har nylig lest en flott artikel av Nicky Van Vroenhoven .

I sitt scenario må Nicky utløse Power BI-datasettoppdatering etter en bestemt trinn i SQL Server Agent-jobben, og dette må gjøres uten å bruke en ekte brukerlegitimasjon en annen arkitektur som kan være inngangspunktet for mange typer forskjellige applikasjoner.

Ideen er å pakke PowerShell-skriptet i en Azure Automation Runbook

og gjør det tilgjengelig for alle applikasjonene som ganske enkelt kan utføre en forespørsel om innlegg til en URI.

Fordeler:

1. Bare en sentral versjon av skriptet

2. Power BI-administrasjonsmodul er ikke installert på applikasjonsmaskinen, men den er installert og utført i skyen på et sett med virtuelle maskiner klargjort på forespørsel når kjøringen starter

3. Runbook kan planlegges (kanskje det ikke er en fordel, bare en ekstra funksjon siden vi allerede kan planlegge en Power BI-oppdatering)

4. Kryptert legitimasjon støtter for å få det til å fungere uten å vite SPN-hemmeligheten

5. Variabler støtter for å endre konteksten for oppdateringen dynamisk

6. Webhooks støtter for å utsette det som en svart boks med et enkelt POST-anrop

La oss anta at følgende forutsetninger allerede er på plass:

– SPN opprettet og konfigurert i AAD

– Aktiverte APIer brukes på Power BI-leietakernivå for SPN

– Worspace V2 med SPN-bruker som admin

Hvis dette allerede er i gang og kjører installasjonen fra nå av, er det ganske enkelt, det kan gjøres manuelt av Azure Portal, men jeg foretrekker PowerShell med Az-modul , det er raskere, lettere å replikere og mindre “clicky-clicky” 🙂 (bruk PowerShell 7.x som foreslått av MSFT, siden jeg fant noen feil som brukte den i PowerShell 5.1.X).

Først og fremst oppsettparametere for oppretting av ressurser:

$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

Så koble til til det azurblå abonnementet

Connect-AzAccount

Opprett en Azure Automation Konto (du kan bruke en eksisterende hvis du vil)

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

Opprett Runbook som er vert for PowerShell-koden (merk Type-parameteren lik PowerShell)

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

Opprett 3 variabler som er vert for verdier for IDer som trengs for å oppdatere datasettet:

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

Lagre SPN-hemmeligheter trygt utnytte Azure Automations legitimasjonsfunksjon:

$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

Full kode:

Miljøet er klart.

Bare to manuelle trinn å utføre:

1. Importer MicrosoftPowerBIMgmt.Profile PowerShell-modul til Azure Automation. Dette gjør at Azure Automation kan bruke cmdlets som finnes i den modulen.

a. Åpne Azure Portal

b. Naviger til Azure Automation-konto

c. I venstre blad klikker du på «Modules Gallery» under «Delt ressurser»

d. Søk etter “MicrosoftPowerBIMgmt.Profile”

e. Velg det og klikk på “Importer”

2. Legg til PowerShell-skript for å utføre Power BI-oppdatering gjennom API-anrop