Konfigurera skalningsverktyg med Azure Automation och Azure Logic Apps för Azure Virtual Desktop
I den här artikeln får du lära dig mer om skalningsverktyget som använder en Azure Automation-runbook och Azure Logic App för att automatiskt skala virtuella sessionsvärddatorer i din Azure Virtual Desktop-miljö. Mer information om skalningsverktyget finns i Skala sessionsvärdar med hjälp av Azure Automation och Azure Logic Apps.
Kommentar
Azure Virtual Desktops interna autoskalningslösning är allmänt tillgänglig för poolbaserade och personliga värdpooler och kommer automatiskt att skala in eller ut virtuella sessionsvärddatorer baserat på skalningsschemat. Vi rekommenderar att du använder autoskalning för enklare konfiguration. Mer information finns i Autoskala skalningsplaner.
Du kan inte skala sessionsvärdar med hjälp av Azure Automation och Azure Logic Apps tillsammans med autoskalning i samma värdpool. Du måste använda det ena eller det andra.
Förutsättningar
Innan du börjar konfigurera skalningsverktyget måste du se till att du har följande saker redo:
- En Azure Virtual Desktop-värdpool.
- Virtuella datorer i sessionsvärdpoolen har konfigurerats och registrerats med Azure Virtual Desktop-tjänsten.
- En användare med rollen Rollbaserad åtkomstkontroll för deltagare (RBAC) som tilldelats i Azure-prenumerationen för att skapa resurserna. Du behöver även rbac-rollen Programadministratör och/eller ägare för att skapa en hanterad identitet.
- En Log Analytics-arbetsyta (valfritt).
Den dator som du använder för att distribuera verktyget måste ha:
- PowerShell 5.1 eller senare
- Azure Az PowerShell-modulen
Om du har allt klart ska vi komma igång.
Skapa eller uppdatera ett Azure Automation-konto
Kommentar
Om du redan har ett Azure Automation-konto med en runbook som kör en äldre version av skalningsskriptet behöver du bara följa anvisningarna nedan för att se till att det uppdateras.
Först behöver du ett Azure Automation-konto för att köra PowerShell-runbooken. Processen som beskrivs i det här avsnittet är giltig även om du har ett befintligt Azure Automation-konto som du vill använda för att konfigurera PowerShell-runbooken. Så här konfigurerar du det:
Öppna PowerShell.
Kör följande cmdlet för att logga in på ditt Azure-konto.
Login-AzAccount
Kommentar
Ditt konto måste ha deltagarbehörighet för den Azure-prenumeration där du vill distribuera skalningsverktyget.
Kör följande cmdlet för att ladda ned skriptet för att skapa Azure Automation-kontot:
New-Item -ItemType Directory -Path "C:\Temp" -Force Set-Location -Path "C:\Temp" $Uri = "https://raw.githubusercontent.com/Azure/RDS-Templates/master/wvd-templates/wvd-scaling-script/CreateOrUpdateAzAutoAccount.ps1" # Download the script Invoke-WebRequest -Uri $Uri -OutFile ".\CreateOrUpdateAzAutoAccount.ps1"
Kör följande cmdlet för att köra skriptet och skapa Azure Automation-kontot. Du kan antingen fylla i värden för parametrarna eller kommentera dem så att de använder sina standardvärden.
$Params = @{ "AADTenantId" = "<Azure_Active_Directory_tenant_ID>" # Optional. If not specified, it will use the current Azure context "SubscriptionId" = "<Azure_subscription_ID>" # Optional. If not specified, it will use the current Azure context "UseARMAPI" = $true "ResourceGroupName" = "<Resource_group_name>" # Optional. Default: "WVDAutoScaleResourceGroup" "AutomationAccountName" = "<Automation_account_name>" # Optional. Default: "WVDAutoScaleAutomationAccount" "Location" = "<Azure_region_for_deployment>" "WorkspaceName" = "<Log_analytics_workspace_name>" # Optional. If specified, Log Analytics will be used to configure the custom log table that the runbook PowerShell script can send logs to } .\CreateOrUpdateAzAutoAccount.ps1 @Params
Kommentar
Om principen inte låter dig skapa skalningsskriptresurser i en viss region uppdaterar du principtilldelningen och lägger till den region som du vill ha i listan över tillåtna regioner.
Om du inte har skapat ett automationskonto tidigare innehåller cmdletens utdata en krypterad webhook-URI i automationskontovariabeln. Se till att behålla en post för URI:n eftersom du använder den som en parameter när du konfigurerar körningsschemat för Azure Logic App. Om du uppdaterar ett befintligt automationskonto kan du hämta webhooks-URI:n med hjälp av PowerShell för att komma åt variabler.
Om du har angett parametern WorkspaceName för Log Analytics innehåller cmdletens utdata även Log Analytics-arbetsyte-ID och dess primärnyckel. Anteckna arbetsytans ID och primärnyckel eftersom du måste använda dem igen senare med parametrar när du konfigurerar körningsschemat för Azure Logic App.
När du har konfigurerat ditt Azure Automation-konto loggar du in på din Azure-prenumeration och kontrollerar att ditt Azure Automation-konto och relevant runbook har dykt upp i din angivna resursgrupp, enligt följande bild:
Om du vill kontrollera om webhooken är där den ska vara väljer du namnet på din runbook. Gå sedan till avsnittet Resurser i din runbook och välj Webhooks.
Skapa en hanterad identitet
Nu när du har ett Azure Automation-konto måste du också konfigurera en hanterad identitet om du inte redan har gjort det. Hanterade identiteter hjälper din runbook att komma åt andra Microsoft Entra-relaterade resurser samt autentisera viktiga automatiseringsprocesser.
Om du vill konfigurera en hanterad identitet följer du anvisningarna i Använda en systemtilldelad hanterad identitet för ett Azure Automation-konto. När du har skapat en hanterad identitet tilldelar du den med lämpliga deltagarbehörigheter till Azure Virtual Desktop-resurser som värdpooler, virtuella datorer osv. När du är klar går du tillbaka till den här artikeln och Skapar Azure Logic App och körningsschemat för att slutföra den inledande installationsprocessen.
Skapa Azure Logic App och körningsschemat
Slutligen måste du skapa Azure Logic App och konfigurera ett körningsschema för det nya skalningsverktyget. Börja med att ladda ned och importera PowerShell-modulen För skrivbordsvirtualisering som ska användas i PowerShell-sessionen om du inte redan har gjort det.
Öppna PowerShell.
Kör följande cmdlet för att logga in på ditt Azure-konto.
Login-AzAccount
Kör följande cmdlet för att ladda ned skriptet för att skapa Azure Logic App.
New-Item -ItemType Directory -Path "C:\Temp" -Force Set-Location -Path "C:\Temp" $Uri = "https://raw.githubusercontent.com/Azure/RDS-Templates/master/wvd-templates/wvd-scaling-script/CreateOrUpdateAzLogicApp.ps1" # Download the script Invoke-WebRequest -Uri $Uri -OutFile ".\CreateOrUpdateAzLogicApp.ps1"
Kör följande PowerShell-skript för att skapa Azure Logic App och körningsschemat för din värdpool
Kommentar
Du måste köra det här skriptet för varje värdpool som du vill skala automatiskt, men du behöver bara ett Azure Automation-konto.
$AADTenantId = (Get-AzContext).Tenant.Id $AzSubscription = Get-AzSubscription | Out-GridView -OutputMode:Single -Title "Select your Azure Subscription" Select-AzSubscription -Subscription $AzSubscription.Id $ResourceGroup = Get-AzResourceGroup | Out-GridView -OutputMode:Single -Title "Select the resource group for the new Azure Logic App" $WVDHostPool = Get-AzResource -ResourceType "Microsoft.DesktopVirtualization/hostpools" | Out-GridView -OutputMode:Single -Title "Select the host pool you'd like to scale" $LogAnalyticsWorkspaceId = Read-Host -Prompt "If you want to use Log Analytics, enter the Log Analytics Workspace ID returned by when you created the Azure Automation account, otherwise leave it blank" $LogAnalyticsPrimaryKey = Read-Host -Prompt "If you want to use Log Analytics, enter the Log Analytics Primary Key returned by when you created the Azure Automation account, otherwise leave it blank" $RecurrenceInterval = Read-Host -Prompt "Enter how often you'd like the job to run in minutes, e.g. '15'" $BeginPeakTime = Read-Host -Prompt "Enter the start time for peak hours in local time, e.g. 9:00" $EndPeakTime = Read-Host -Prompt "Enter the end time for peak hours in local time, e.g. 18:00" $TimeDifference = Read-Host -Prompt "Enter the time difference between local time and UTC in hours, e.g. +5:30" $SessionThresholdPerCPU = Read-Host -Prompt "Enter the maximum number of sessions per CPU that will be used as a threshold to determine when new session host VMs need to be started during peak hours" $MinimumNumberOfRDSH = Read-Host -Prompt "Enter the minimum number of session host VMs to keep running during off-peak hours" $MaintenanceTagName = Read-Host -Prompt "Enter the name of the Tag associated with VMs you don't want to be managed by this scaling tool" $LimitSecondsToForceLogOffUser = Read-Host -Prompt "Enter the number of seconds to wait before automatically signing out users. If set to 0, any session host VM that has user sessions, will be left untouched" $LogOffMessageTitle = Read-Host -Prompt "Enter the title of the message sent to the user before they are forced to sign out" $LogOffMessageBody = Read-Host -Prompt "Enter the body of the message sent to the user before they are forced to sign out" $WebhookURI = Read-Host -Prompt "Enter the webhook URI that has already been generated for this Azure Automation account. The URI is stored as encrypted in the above Automation Account variable. To retrieve the value, see https://learn.microsoft.com/azure/automation/shared-resources/variables?tabs=azure-powershell#powershell-cmdlets-to-access-variables" $Params = @{ "AADTenantId" = $AADTenantId # Optional. If not specified, it will use the current Azure context "SubscriptionID" = $AzSubscription.Id # Optional. If not specified, it will use the current Azure context "ResourceGroupName" = $ResourceGroup.ResourceGroupName # Optional. Default: "WVDAutoScaleResourceGroup" "Location" = $ResourceGroup.Location # Optional. Default: "West US2" "UseARMAPI" = $true "HostPoolName" = $WVDHostPool.Name "HostPoolResourceGroupName" = $WVDHostPool.ResourceGroupName # Optional. Default: same as ResourceGroupName param value "LogAnalyticsWorkspaceId" = $LogAnalyticsWorkspaceId # Optional. If not specified, script will not log to the Log Analytics "LogAnalyticsPrimaryKey" = $LogAnalyticsPrimaryKey # Optional. If not specified, script will not log to the Log Analytics "RecurrenceInterval" = $RecurrenceInterval # Optional. Default: 15 "BeginPeakTime" = $BeginPeakTime # Optional. Default: "09:00" "EndPeakTime" = $EndPeakTime # Optional. Default: "17:00" "TimeDifference" = $TimeDifference # Optional. Default: "-7:00" "SessionThresholdPerCPU" = $SessionThresholdPerCPU # Optional. Default: 1 "MinimumNumberOfRDSH" = $MinimumNumberOfRDSH # Optional. Default: 1 "MaintenanceTagName" = $MaintenanceTagName # Optional. "LimitSecondsToForceLogOffUser" = $LimitSecondsToForceLogOffUser # Optional. Default: 1 "LogOffMessageTitle" = $LogOffMessageTitle # Optional. Default: "Machine is about to shutdown." "LogOffMessageBody" = $LogOffMessageBody # Optional. Default: "Your session will be logged off. Please save and close everything." "WebhookURI" = $WebhookURI } .\CreateOrUpdateAzLogicApp.ps1 @Params
När du har kört skriptet bör Azure Logic App visas i en resursgrupp, enligt följande bild.
Om du vill göra ändringar i körningsschemat, till exempel ändra upprepningsintervallet eller tidszonen, går du till autoskalningsschemat för Azure Logic App och väljer Redigera för att gå till Azure Logic App Designer.
Hantera skalningsverktyget
Nu när du har skapat skalningsverktyget kan du komma åt dess utdata. I det här avsnittet beskrivs några funktioner som kan vara användbara.
Visa jobbstatus
Du kan visa en sammanfattad status för alla runbook-jobb eller visa en mer djupgående status för ett specifikt runbook-jobb i Azure-portalen.
Till höger om ditt valda Azure Automation-konto under "Jobbstatistik" kan du visa en lista med sammanfattningar av alla runbook-jobb. Om du öppnar sidan Jobb till vänster i fönstret visas aktuella jobbstatusar, starttider och slutförandetider.
Visa loggar och utdata för skalningsverktyget
Du kan visa loggarna för utskalnings- och inskalningsåtgärder genom att öppna runbooken och välja jobbet.
Gå till runbooken i resursgruppen som är värd för Azure Automation-kontot och välj Översikt. På översiktssidan väljer du ett jobb under Senaste jobb för att visa utdata för skalningsverktyget, som du ser i följande bild.
Kontrollera versionsnumret för runbook-skriptet
Du kan kontrollera vilken version av runbook-skriptet du använder genom att öppna runbook-filen i ditt Azure Automation-konto och välja Visa. Ett skript för runbooken visas till höger på skärmen. I skriptet visas versionsnumret i formatet v#.#.#
under avsnittet SYNOPSIS
. Du hittar det senaste versionsnumret här. Om du inte ser något versionsnummer i runbook-skriptet innebär det att du kör en tidigare version av skriptet och du bör uppdatera det direkt. Om du behöver uppdatera runbook-skriptet följer du anvisningarna i Skapa eller uppdatera ett Azure Automation-konto.
Rapporteringsproblem
När du rapporterar ett problem måste du ange följande information för att hjälpa oss att felsöka:
En fullständig logg från fliken Alla loggar i jobbet som orsakade problemet. Om du vill lära dig hur du hämtar loggen följer du anvisningarna i Visa loggar och utdata för skalningsverktyget. Om det finns känslig eller privat information i loggen kan du ta bort den innan du skickar problemet till oss.
Den version av runbook-skriptet som du använder. Information om hur du hämtar versionsnumret finns i Kontrollera versionsnumret för runbook-skript
Versionsnumret för var och en av följande PowerShell-moduler som är installerade på ditt Azure Automation-konto. Om du vill hitta de här modulerna öppnar du Azure Automation-kontot, väljer Moduler under avsnittet Delade resurser i fönstret till vänster i fönstret och söker sedan efter modulens namn.
- Az.Accounts
- Az.Compute
- Az.Resources
- Az.Automation
- OMSIngestionAPI
- Az.DesktopVirtualization
Log Analytics
Om du har valt att använda Log Analytics kan du visa alla loggdata i en anpassad logg med namnet WVDTenantScale_CL under Anpassade loggar i loggvyn för din Log Analytics-arbetsyta. Vi har listat några exempelfrågor som du kanske tycker är användbara.
Om du vill se alla loggar för en värdpool anger du följande fråga:
WVDTenantScale_CL | where hostpoolName_s == "<host_pool_name>" | project TimeStampUTC = TimeGenerated, TimeStampLocal = TimeStamp_s, HostPool = hostpoolName_s, LineNumAndMessage = logmessage_s, AADTenantId = TenantId
Om du vill visa det totala antalet virtuella sessionsvärddatorer som körs och aktiva användarsessioner i värdpoolen anger du följande fråga:
WVDTenantScale_CL | where logmessage_s contains "Number of running session hosts:" or logmessage_s contains "Number of user sessions:" or logmessage_s contains "Number of user sessions per Core:" | where hostpoolName_s == "<host_pool_name>" | project TimeStampUTC = TimeGenerated, TimeStampLocal = TimeStamp_s, HostPool = hostpoolName_s, LineNumAndMessage = logmessage_s, AADTenantId = TenantId
Om du vill visa status för alla virtuella sessionsvärddatorer i en värdpool anger du följande fråga:
WVDTenantScale_CL | where logmessage_s contains "Session host:" | where hostpoolName_s == "<host_pool_name>" | project TimeStampUTC = TimeGenerated, TimeStampLocal = TimeStamp_s, HostPool = hostpoolName_s, LineNumAndMessage = logmessage_s, AADTenantId = TenantId
Om du vill visa eventuella fel och varningar anger du följande fråga:
WVDTenantScale_CL | where logmessage_s contains "ERROR:" or logmessage_s contains "WARN:" | project TimeStampUTC = TimeGenerated, TimeStampLocal = TimeStamp_s, HostPool = hostpoolName_s, LineNumAndMessage = logmessage_s, AADTenantId = TenantId
Begränsningar
Här följer några begränsningar med skalning av virtuella sessionsvärddatorer med det här skalningsskriptet:
- Skalningsskriptet tar inte hänsyn till tidsändringar mellan standard- och sommartidsbesparingar.