Condividi tramite


Configurare lo strumento di ridimensionamento usando Automazione di Azure e App per la logica di Azure per Desktop virtuale Azure

Questo articolo descrive lo strumento di ridimensionamento che usa un runbook Automazione di Azure e App per la logica di Azure per ridimensionare automaticamente le macchine virtuali host sessione nell'ambiente Desktop virtuale Azure. Per altre informazioni sullo strumento di ridimensionamento, vedere Ridimensionare gli host sessione usando Automazione di Azure e App per la logica di Azure.

Nota

  • La soluzione di scalabilità automatica nativa di Desktop virtuale Azure è disponibile a livello generale per i pool di host in pool e personali e verrà automaticamente ridimensionata in o in uscita le macchine virtuali host della sessione in base alla pianificazione del ridimensionamento. È consigliabile usare la scalabilità automatica per semplificare la configurazione. Per altre informazioni, vedere Piani di scalabilità automatica.

  • Non è possibile ridimensionare gli host di sessione usando Automazione di Azure e App per la logica di Azure insieme alla scalabilità automatica nello stesso pool di host. È necessario usare uno o l'altro.

Prerequisiti

Prima di iniziare a configurare lo strumento di ridimensionamento, assicurarsi di avere a disposizione gli elementi seguenti:

  • Pool di host di Desktop virtuale Azure.
  • Macchine virtuali del pool di host di sessione configurate e registrate con il servizio Desktop virtuale Azure.
  • Un utente con il ruolo Collaboratore per il controllo degli accessi in base al ruolo assegnato nella sottoscrizione di Azure per creare le risorse. Per creare un'identità gestita, è necessario anche il ruolo di amministratore dell'applicazione e/o di controllo degli accessi in base al ruolo proprietario.
  • Un'area di lavoro Log Analytics (facoltativa).

Il computer usato per distribuire lo strumento deve avere:

Se hai tutto pronto, iniziamo.

Creare o aggiornare un account Automazione di Azure

Nota

Se si dispone già di un account Automazione di Azure con un runbook che esegue una versione precedente dello script di ridimensionamento, è sufficiente seguire le istruzioni seguenti per assicurarsi che sia aggiornato.

Prima di tutto, sarà necessario un account Automazione di Azure per eseguire il runbook di PowerShell. Il processo descritto in questa sezione è valido anche se si dispone di un account Automazione di Azure esistente che si vuole usare per configurare il runbook di PowerShell. Ecco come configurarlo:

  1. Aprire PowerShell.

  2. Eseguire il cmdlet seguente per accedere all'account Azure.

    Login-AzAccount
    

    Nota

    L'account deve avere diritti di collaboratore nella sottoscrizione di Azure in cui si vuole distribuire lo strumento di ridimensionamento.

  3. Eseguire il cmdlet seguente per scaricare lo script per la creazione dell'account Automazione di 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/CreateOrUpdateAzAutoAccount.ps1"
    # Download the script
    Invoke-WebRequest -Uri $Uri -OutFile ".\CreateOrUpdateAzAutoAccount.ps1"
    
  4. Eseguire il cmdlet seguente per eseguire lo script e creare l'account Automazione di Azure. È possibile compilare i valori per i parametri o impostarli come commento per usare le impostazioni predefinite.

    $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
    

    Nota

    Se i criteri non consentono di creare risorse script di ridimensionamento in un'area specifica, aggiornare l'assegnazione dei criteri e aggiungere l'area desiderata all'elenco delle aree consentite.

  5. Se non è stato creato un account di automazione in precedenza, l'output del cmdlet includerà un URI webhook crittografato nella variabile dell'account di automazione. Assicurarsi di mantenere un record dell'URI perché verrà usato come parametro quando si configura la pianificazione dell'esecuzione per l'app per la logica di Azure. Se si aggiorna un account di automazione esistente, è possibile recuperare l'URI del webhook usando PowerShell per accedere alle variabili.

  6. Se è stato specificato il parametro WorkspaceName per Log Analytics, l'output del cmdlet includerà anche l'ID dell'area di lavoro di Log Analytics e la relativa chiave primaria. Prendere nota dell'ID area di lavoro e della chiave primaria perché sarà necessario usarli di nuovo in un secondo momento con i parametri quando si configura la pianificazione dell'esecuzione per l'app per la logica di Azure.

  7. Dopo aver configurato l'account Automazione di Azure, accedere alla sottoscrizione di Azure e verificare che l'account Automazione di Azure e il runbook pertinente siano visualizzati nel gruppo di risorse specificato, come illustrato nell'immagine seguente:

    Immagine della pagina di panoramica di Azure che mostra l'account e il runbook Automazione di Azure appena creati.

    Per verificare se il webhook è quello in cui deve trovarsi, selezionare il nome del runbook. Passare quindi alla sezione Risorse del runbook e selezionare Webhook.

Creare un'identità gestita

Ora che si dispone di un account Automazione di Azure, è anche necessario configurare un'identità gestita, se non è già stato fatto. Le identità gestite consentono al runbook di accedere ad altre risorse correlate Microsoft Entra e di autenticare importanti processi di automazione.

Per configurare un'identità gestita, seguire le istruzioni riportate in Uso di un'identità gestita assegnata dal sistema per un account Automazione di Azure. Dopo aver creato un'identità gestita, assegnarla con le autorizzazioni di collaboratore appropriate alle risorse di Desktop virtuale Azure, ad esempio pool di host, macchine virtuali e così via. Al termine, tornare a questo articolo e Creare l'app per la logica di Azure e la pianificazione dell'esecuzione per completare il processo di installazione iniziale.

Creare l'app per la logica di Azure e la pianificazione dell'esecuzione

Infine, sarà necessario creare l'app per la logica di Azure e configurare una pianificazione dell'esecuzione per il nuovo strumento di ridimensionamento. Prima di tutto, scaricare e importare il modulo PowerShell di Virtualizzazione desktop da usare nella sessione di PowerShell, se non è già stato fatto.

  1. Aprire PowerShell.

  2. Eseguire il cmdlet seguente per accedere all'account Azure.

    Login-AzAccount
    
  3. Eseguire il cmdlet seguente per scaricare lo script per la creazione dell'app per la logica di 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. Eseguire lo script di PowerShell seguente per creare l'app per la logica di Azure e la pianificazione dell'esecuzione per il pool di host

    Nota

    È necessario eseguire questo script per ogni pool di host da ridimensionare automaticamente, ma è necessario un solo account Automazione di Azure.

    $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
    

    Dopo aver eseguito lo script, l'app per la logica di Azure dovrebbe essere visualizzata in un gruppo di risorse, come illustrato nell'immagine seguente.

    Immagine della pagina di panoramica per un esempio di app per la logica di Azure.

    Per apportare modifiche alla pianificazione dell'esecuzione, ad esempio la modifica dell'intervallo di ricorrenza o del fuso orario, passare all'utilità di pianificazione della scalabilità automatica dell'app per la logica di Azure e selezionare Modifica per passare all'app per la logica di Azure Designer.

    Immagine dell'app per la logica di Azure Designer. I menu Ricorrenza e webhook che consentono all'utente di modificare i tempi di ricorrenza e il file webhook sono aperti.

Gestire lo strumento di ridimensionamento

Ora che è stato creato lo strumento di ridimensionamento, è possibile accedere al relativo output. Questa sezione descrive alcune funzionalità che potrebbero risultare utili.

Visualizzare lo stato del processo

È possibile visualizzare uno stato riepilogato di tutti i processi runbook o visualizzare uno stato più approfondito di un processo di runbook specifico nel portale di Azure.

A destra dell'account Automazione di Azure selezionato, in "Statistiche processi" è possibile visualizzare un elenco di riepiloghi di tutti i processi runbook. L'apertura della pagina Processi sul lato sinistro della finestra mostra gli stati correnti del processo, gli orari di inizio e gli orari di completamento.

Screenshot della pagina di stato del processo.

Visualizzare i log e l'output dello strumento di ridimensionamento

È possibile visualizzare i log delle operazioni di scalabilità orizzontale e di scalabilità orizzontale aprendo il runbook e selezionando il processo.

Passare al runbook nel gruppo di risorse che ospita l'account Automazione di Azure e selezionare Panoramica. Nella pagina di panoramica selezionare un processo in Processi recenti per visualizzare l'output dello strumento di ridimensionamento, come illustrato nell'immagine seguente.

Immagine della finestra di output per lo strumento di ridimensionamento.

Controllare il numero di versione dello script del runbook

È possibile controllare la versione dello script del runbook in uso aprendo il file del runbook nell'account di Automazione di Azure e selezionando Visualizza. Sul lato destro dello schermo verrà visualizzato uno script per il runbook. Nello script verrà visualizzato il numero di versione nel formato v#.#.# nella SYNOPSIS sezione . È possibile trovare il numero di versione più recente qui. Se non viene visualizzato un numero di versione nello script del runbook, significa che si sta eseguendo una versione precedente dello script ed è necessario aggiornarlo immediatamente. Se è necessario aggiornare lo script del runbook, seguire le istruzioni in Creare o aggiornare un account Automazione di Azure.

Problemi di segnalazione

Quando si segnala un problema, è necessario fornire le informazioni seguenti per semplificare la risoluzione dei problemi:

  • Log completo dalla scheda Tutti i log del processo che ha causato il problema. Per informazioni su come ottenere il log, seguire le istruzioni in Visualizzare i log e l'output dello strumento di ridimensionamento. Se nel log sono presenti informazioni riservate o private, è possibile rimuoverle prima di inviare il problema.

  • Versione dello script del runbook in uso. Per informazioni su come ottenere il numero di versione, vedere Controllare il numero di versione dello script del runbook

  • Numero di versione di ognuno dei moduli di PowerShell seguenti installati nell'account Automazione di Azure. Per trovare questi moduli, aprire Automazione di Azure account, selezionare Moduli nella sezione Risorse condivise nel riquadro a sinistra della finestra e quindi cercare il nome del modulo.

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

Log Analytics

Se si decide di usare Log Analytics, è possibile visualizzare tutti i dati di log in un log personalizzato denominato WVDTenantScale_CL in Log personalizzati nella visualizzazione Log dell'area di lavoro Log Analytics. Sono state elencate alcune query di esempio che potrebbero risultare utili.

  • Per visualizzare tutti i log per un pool di host, immettere la query seguente:

    WVDTenantScale_CL
    | where hostpoolName_s == "<host_pool_name>"
    | project TimeStampUTC = TimeGenerated, TimeStampLocal = TimeStamp_s, HostPool = hostpoolName_s, LineNumAndMessage = logmessage_s, AADTenantId = TenantId
    
  • Per visualizzare il numero totale di macchine virtuali host sessione attualmente in esecuzione e sessioni utente attive nel pool di host, immettere la query seguente:

    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
    
  • Per visualizzare lo stato di tutte le macchine virtuali host della sessione in un pool di host, immettere la query seguente:

    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
    
  • Per visualizzare eventuali errori e avvisi, immettere la query seguente:

    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
    

Limitazioni

Ecco alcune limitazioni con il ridimensionamento delle macchine virtuali host sessione con questo script di ridimensionamento:

  • Lo script di ridimensionamento non considera le modifiche all'ora tra l'ora legale e quella standard.