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

(Perico Riccardo) (17 aug 2020)

Jag läste nyligen en fantastisk artikel av Nicky Van Vroenhoven .

I sitt scenario måste Nicky aktivera Power BI-datasetuppdatering efter en specifik steg i SQL Server Agents jobb och detta måste göras utan att använda en riktig användares referenser en annan arkitektur som kan vara ingångspunkten för många typer av olika applikationer.

Tanken är att packa PowerShell-skriptet i en Azure Automation Runbook

och gör det sedan tillgängligt för alla applikationer som helt enkelt kan utföra en postförfrågan till en URI.

Fördelar:

1. Endast en central version av skriptet

2. Power BI-hanteringsmodul är inte installerad på applikationsmaskinen men den är installerad och körs i molnet på en uppsättning virtuella datorer som tillhandahålls på begäran när körningen startar

3. Runbook kan schemaläggas (kanske är det inte en fördel, bara en ytterligare funktion eftersom vi redan kan schemalägga en Power BI-uppdatering)

4. Krypterade referenser stöder för att få det att fungera utan att känna till SPN-hemligheten

5. Variabler stöder för att dynamiskt ändra kontext för din uppdatering

6. Webhooks stöder för att exponera det som en svart ruta med ett enkelt POST-samtal

Låt oss anta att följande förutsättningar redan är på plats:

– SPN skapas och konfigureras i AAD

– Aktiverade API: er används på Power BI-klientnivå för SPN

– Worspace V2 med SPN-användare som admin

Om det här redan är igång och installationen är igång är det ganska enkelt, det kan göras manuellt av Azure Portal men jag föredrar PowerShell med Az-modul , det är snabbare, lättare att replikera och mindre “clicky-clicky” 🙂 (använd PowerShell 7.x som föreslås av MSFT eftersom jag hittade några buggar som använde det i PowerShell 5.1.X).

Först och främst installationsparametrar för att skapa resurser:

$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

anslut till den azurblå prenumerationen

Connect-AzAccount

Skapa en Azure Automation Konto (du kan använda ett befintligt om du vill)

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

Skapa Runbook som är värd för vår PowerShell-kod (notera typparametern lika med PowerShell)

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

Skapa 3 variabler som värdvärden för ID: er som behövs för att uppdatera dataset:

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

Spara SPN-hemligheter säkert utnyttja Azure Automations referensfunktion:

$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

Fullständig kod:

Miljön är klar.

Bara två manuella steg att utföra:

1. Importera MicrosoftPowerBIMgmt.Profile PowerShell-modulen till Azure Automation. Detta gör att Azure Automation kan använda cmdlets i den modulen.

a. Öppna Azure Portal

b. Navigera till ditt Azure Automation-konto

c. I det vänstra bladet, under “Delade resurser” klickar du på “Modules Gallery”

d. Sök efter “MicrosoftPowerBIMgmt.Profile”

e. Välj det och klicka på ”Importera”

2. Lägg till PowerShell-skript för att utföra Power BI-uppdatering genom API-samtal