Nastavení nástroje pro škálování pomocí Azure Automation a Azure Logic Apps pro Azure Virtual Desktop

V tomto článku se dozvíte o nástroji pro škálování, který používá runbook Azure Automation a aplikaci logiky Azure k automatickému škálování hostitelských virtuálních počítačů relací ve vašem prostředí Azure Virtual Desktopu. Další informace o nástroji pro škálování najdete v tématu Škálování hostitelů relací pomocí Azure Automation a Azure Logic Apps.

Poznámka:

  • Nativní řešení automatického škálování služby Azure Virtual Desktop je obecně dostupné pro fondy a osobní hostitelské fondy a automaticky škáluje virtuální počítače hostitelů relací nebo jejich kapacitu na základě plánu škálování. Pro snadnější konfiguraci doporučujeme použít automatické škálování. Další informace najdete v tématu Plány automatického škálování škálování.

  • Hostitele relací nemůžete škálovat pomocí služby Azure Automation a Azure Logic Apps společně s automatickým škálováním ve stejném fondu hostitelů. Musíte použít jednu nebo druhou.

Požadavky

Než začnete s nastavením nástroje pro škálování, ujistěte se, že máte připravené následující věci:

  • Fond hostitelů služby Azure Virtual Desktop.
  • Virtuální počítače fondu hostitelů relací nakonfigurované a zaregistrované ve službě Azure Virtual Desktop
  • Uživatel s rolí řízení přístupu na základě role (RBAC) přispěvatele přiřazeným k předplatnému Azure k vytvoření prostředků. K vytvoření spravované identity budete také potřebovat roli správce aplikace nebo role RBAC vlastníka .
  • Pracovní prostor služby Log Analytics (volitelné)

Počítač, který používáte k nasazení nástroje, musí mít:

Pokud máte všechno připravené, pojďme začít.

Vytvoření nebo aktualizace účtu Azure Automation

Poznámka:

Pokud už máte účet Azure Automation s runbookem se starší verzí skriptu škálování, stačí postupovat podle následujících pokynů a ujistit se, že je aktualizovaný.

Nejprve budete potřebovat účet Azure Automation ke spuštění runbooku PowerShellu. Tento postup popisuje platnost i v případě, že máte existující účet Azure Automation, který chcete použít k nastavení runbooku PowerShellu. Tady je postup, jak ho nastavit:

  1. Otevřete PowerShell.

  2. Spuštěním následující rutiny se přihlaste ke svému účtu Azure.

    Login-AzAccount
    

    Poznámka:

    Váš účet musí mít oprávnění přispěvatele k předplatnému Azure, do kterého chcete nasadit nástroj pro škálování.

  3. Spuštěním následující rutiny stáhněte skript pro vytvoření účtu Azure Automation:

    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"
    
  4. Spuštěním následující rutiny spusťte skript a vytvořte účet Azure Automation. Můžete buď vyplnit hodnoty parametrů, nebo je okomentovat, aby používaly výchozí hodnoty.

    $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
    

    Poznámka:

    Pokud vaše zásada neumožňuje vytvářet prostředky skriptů škálování v konkrétní oblasti, aktualizujte přiřazení zásad a přidejte oblast, kterou chcete přidat do seznamu povolených oblastí.

  5. Pokud jste ještě nevytvořili účet Automation, bude výstup rutiny obsahovat šifrovaný identifikátor URI webhooku do proměnné účtu Automation. Nezapomeňte mít záznam identifikátoru URI, protože ho použijete jako parametr při nastavování plánu provádění pro aplikaci logiky Azure. Pokud aktualizujete existující účet Automation, můžete načíst identifikátor URI webhooku pomocí PowerShellu pro přístup k proměnným.

  6. Pokud jste zadali parametr WorkspaceName pro Log Analytics, výstup rutiny bude obsahovat také ID pracovního prostoru služby Log Analytics a jeho primární klíč. Poznamenejte si ID pracovního prostoru a primární klíč, protože je budete muset později znovu použít s parametry při nastavování plánu provádění pro aplikaci logiky Azure.

  7. Po nastavení účtu Azure Automation se přihlaste ke svému předplatnému Azure a zkontrolujte, že se váš účet Azure Automation a příslušná runbook zobrazí ve vaší zadané skupině prostředků, jak je znázorněno na následujícím obrázku:

    An image of the Azure overview page showing the newly created Azure Automation account and runbook.

    Pokud chcete zkontrolovat, jestli je váš webhook tam, kde má být, vyberte název runbooku. Dále přejděte do oddílu Prostředky runbooku a vyberte Webhooky.

Vytvoření spravované identity

Teď, když máte účet Azure Automation, budete také muset nastavit spravovanou identitu , pokud jste to ještě neudělali. Spravované identity pomohou runbooku přistupovat k dalším prostředkům souvisejícím s Microsoft Entra a také ověřovat důležité procesy automatizace.

Pokud chcete nastavit spravovanou identitu, postupujte podle pokynů v tématu Použití spravované identity přiřazené systémem pro účet Azure Automation. Jakmile vytvoříte spravovanou identitu, přiřaďte ji s příslušnými oprávněními přispěvatele k prostředkům Služby Azure Virtual Desktop, jako jsou fondy hostitelů, virtuální počítače atd. Jakmile budete hotovi, vraťte se do tohoto článku a vytvořte aplikaci logiky Azure a plán provádění, abyste dokončili počáteční proces nastavení.

Vytvoření aplikace logiky Azure a plánu provádění

Nakonec budete muset vytvořit aplikaci logiky Azure a nastavit plán provádění nového nástroje pro škálování. Nejprve si stáhněte a naimportujte modul PowerShellu virtualizace desktopové plochy, který se má použít v relaci PowerShellu, pokud jste to ještě neudělali.

  1. Otevřete PowerShell.

  2. Spuštěním následující rutiny se přihlaste ke svému účtu Azure.

    Login-AzAccount
    
  3. Spuštěním následující rutiny stáhněte skript pro vytvoření aplikace logiky Azure.

    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"
    
  4. Spuštěním následujícího skriptu PowerShellu vytvořte aplikaci logiky Azure a plán spouštění pro váš fond hostitelů.

    Poznámka:

    Tento skript budete muset spustit pro každý fond hostitelů, který chcete automaticky škálovat, ale potřebujete jenom jeden účet Azure Automation.

    $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
    

    Po spuštění skriptu by se aplikace logiky Azure měla zobrazit ve skupině prostředků, jak je znázorněno na následujícím obrázku.

    An image of the overview page for an example Azure Logic App.

    Pokud chcete provést změny plánu provádění, jako je změna intervalu opakování nebo časového pásma, přejděte do plánovače automatického škálování aplikace logiky Azure a výběrem možnosti Upravit přejděte do Návrháře aplikací logiky Azure.

    An image of the Azure Logic App Designer. The Recurrence and webhook menus that let the user edit recurrence times and the webhook file are open.

Správa nástroje pro škálování

Teď, když jste vytvořili nástroj pro škálování, máte přístup k jeho výstupu. Tato část popisuje několik funkcí, které můžou být užitečné.

Zobrazení stavu úlohy

Můžete zobrazit souhrnný stav všech úloh runbooku nebo zobrazit podrobnější stav konkrétní úlohy runbooku na webu Azure Portal.

Na pravé straně vybraného účtu Azure Automation v části Statistika úloh můžete zobrazit seznam souhrnů všech úloh runbooku. Otevření stránky Úlohy na levé straně okna zobrazuje aktuální stavy úloh, časy spuštění a časy dokončení.

A screenshot of the job status page.

Zobrazení protokolů a výstupu nástroje pro škálování

Protokoly operací horizontálního navýšení kapacity a horizontálního navýšení kapacity můžete zobrazit tak, že otevřete runbook a vyberete úlohu.

Přejděte do runbooku ve vaší skupině prostředků, která je hostitelem účtu Azure Automation, a vyberte Přehled. Na stránce přehledu vyberte úlohu v části Poslední úlohy , abyste zobrazili výstup nástroje pro škálování, jak je znázorněno na následujícím obrázku.

An image of the output window for the scaling tool.

Zkontrolujte číslo verze skriptu runbooku.

Verzi skriptu runbooku, který používáte, můžete zkontrolovat tak, že otevřete soubor runbooku ve svém účtu Azure Automation a vyberete Zobrazit. Na pravé straně obrazovky se zobrazí skript pro runbook. Ve skriptu uvidíte číslo verze ve formátu v#.#.# pod SYNOPSIS částí. Nejnovější číslo verze najdete tady. Pokud ve skriptu runbooku nevidíte číslo verze, znamená to, že používáte starší verzi skriptu a měli byste ho hned aktualizovat. Pokud potřebujete aktualizovat skript runbooku, postupujte podle pokynů v tématu Vytvoření nebo aktualizace účtu Azure Automation.

Hlášení problémů

Když nahlásíte problém, budete muset poskytnout následující informace, které nám pomůžou s řešením potíží:

  • Úplný protokol z karty Všechny protokoly v úloze, která způsobila problém. Pokud chcete zjistit, jak získat protokol, postupujte podle pokynů v zobrazení protokolů a výstupu nástroje pro škálování. Pokud jsou v protokolu nějaké citlivé nebo soukromé informace, můžete je před odesláním problému odebrat.

  • Verze skriptu runbooku, který používáte. Informace o tom, jak získat číslo verze, najdete v tématu Kontrola čísla verze skriptu runbooku.

  • Číslo verze každého z následujících modulů PowerShellu nainstalovaných ve vašem účtu Azure Automation. Pokud chcete tyto moduly najít, otevřete účet Azure Automation, vyberte moduly v části Sdílené prostředky v podokně na levé straně okna a vyhledejte název modulu.

    • Az.Accounts
    • Az.Compute
    • Az.Resources
    • Az.Automation
    • OMSIngestionAPI
    • Az.DesktopVirtualization

Log Analytics

Pokud jste se rozhodli používat Log Analytics, můžete zobrazit všechna data protokolu ve vlastním protokolu s názvem WVDTenantScale_CLv zobrazení Protokoly pracovního prostoru služby Log Analytics. Přidali jsme několik ukázkových dotazů, které vám můžou pomoct.

  • Pokud chcete zobrazit všechny protokoly pro fond hostitelů, zadejte následující dotaz:

    WVDTenantScale_CL
    | where hostpoolName_s == "<host_pool_name>"
    | project TimeStampUTC = TimeGenerated, TimeStampLocal = TimeStamp_s, HostPool = hostpoolName_s, LineNumAndMessage = logmessage_s, AADTenantId = TenantId
    
  • Pokud chcete zobrazit celkový počet aktuálně spuštěných virtuálních počítačů hostitele relací a aktivních uživatelských relací ve vašem fondu hostitelů, zadejte následující dotaz:

    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
    
  • Pokud chcete zobrazit stav všech virtuálních počítačů hostitele relací ve fondu hostitelů, zadejte následující dotaz:

    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
    
  • Pokud chcete zobrazit jakékoli chyby a upozornění, zadejte následující dotaz:

    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
    

Omezení

Tady jsou některá omezení škálování virtuálních počítačů hostitele relace pomocí tohoto skriptu škálování:

  • Skript škálování nebere v úvahu změny času mezi standardními a letními úspory.