Udostępnij przez


Konfigurowanie narzędzia do skalowania przy użyciu Azure Automation i usługi Azure Logic Apps dla usługi Azure Virtual Desktop

W tym artykule dowiesz się więcej o narzędziu do skalowania, które używa elementu runbook Azure Automation i aplikacji logiki platformy Azure do automatycznego skalowania maszyn wirtualnych hosta sesji w środowisku usługi Azure Virtual Desktop. Aby dowiedzieć się więcej o narzędziu do skalowania, zobacz Skalowanie hostów sesji przy użyciu Azure Automation i Azure Logic Apps.

Uwaga

  • Natywne rozwiązanie autoskalowania usługi Azure Virtual Desktop jest ogólnie dostępne dla pul i osobistych pul hostów i automatycznie skaluje maszyny wirtualne hosta sesji w poziomie na podstawie harmonogramu skalowania. Zalecamy używanie autoskalowania w celu łatwiejszej konfiguracji. Aby uzyskać więcej informacji, zobacz Automatyczne skalowanie planów skalowania.

  • Nie można skalować hostów sesji przy użyciu Azure Automation i usługi Azure Logic Apps wraz z automatycznym skalowaniem w tej samej puli hostów. Należy użyć jednego lub drugiego.

Wymagania wstępne

Przed rozpoczęciem konfigurowania narzędzia do skalowania upewnij się, że masz gotowe następujące elementy:

  • Pula hostów usługi Azure Virtual Desktop.
  • Maszyny wirtualne puli hostów sesji skonfigurowane i zarejestrowane w usłudze Azure Virtual Desktop.
  • Użytkownik z rolą kontroli dostępu opartej na rolach (RBAC) współautora przypisaną do subskrypcji platformy Azure w celu utworzenia zasobów. Do utworzenia tożsamości zarządzanej będzie również potrzebna rola RBAC administratora aplikacji i/lub właściciela .
  • Obszar roboczy usługi Log Analytics (opcjonalnie).

Maszyna używana do wdrażania narzędzia musi mieć następujące elementy:

Jeśli wszystko jest gotowe, zacznijmy.

Tworzenie lub aktualizowanie konta Azure Automation

Uwaga

Jeśli masz już konto Azure Automation z elementem Runbook z uruchomioną starszą wersją skryptu skalowania, wykonaj poniższe instrukcje, aby upewnić się, że został zaktualizowany.

Najpierw musisz mieć konto Azure Automation, aby uruchomić element Runbook programu PowerShell. Proces, który opisano w tej sekcji, jest prawidłowy, nawet jeśli masz istniejące konto Azure Automation, którego chcesz użyć do skonfigurowania elementu Runbook programu PowerShell. Oto jak go skonfigurować:

  1. Otwórz program PowerShell.

  2. Uruchom następujące polecenie cmdlet, aby zalogować się do konta platformy Azure.

    Login-AzAccount
    

    Uwaga

    Twoje konto musi mieć prawa współautora w subskrypcji platformy Azure, w której chcesz wdrożyć narzędzie skalowania.

  3. Uruchom następujące polecenie cmdlet, aby pobrać skrypt do utworzenia konta 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. Uruchom następujące polecenie cmdlet, aby wykonać skrypt i utworzyć konto Azure Automation. Możesz wypełnić wartości parametrów lub oznaczyć je jako komentarz, aby użyć ich wartości domyślnych.

    $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
    

    Uwaga

    Jeśli zasady nie umożliwiają tworzenia skalowania zasobów skryptów w określonym regionie, zaktualizuj przypisanie zasad i dodaj region, który chcesz dodać do listy dozwolonych regionów.

  5. Jeśli konto automatyzacji nie zostało wcześniej utworzone, dane wyjściowe polecenia cmdlet będą zawierać zaszyfrowany identyfikator URI elementu webhook w zmiennej konta usługi Automation. Pamiętaj, aby zachować rekord identyfikatora URI, ponieważ użyjesz go jako parametru podczas konfigurowania harmonogramu wykonywania dla aplikacji logiki platformy Azure. Jeśli aktualizujesz istniejące konto automatyzacji, możesz pobrać identyfikator URI elementu webhook przy użyciu programu PowerShell w celu uzyskania dostępu do zmiennych.

  6. Jeśli określono parametr WorkspaceName dla usługi Log Analytics, dane wyjściowe polecenia cmdlet będą również zawierać identyfikator obszaru roboczego usługi Log Analytics i jego klucz podstawowy. Zanotuj identyfikator obszaru roboczego i klucz podstawowy, ponieważ podczas konfigurowania harmonogramu wykonywania dla aplikacji logiki platformy Azure musisz użyć ich ponownie później z parametrami.

  7. Po skonfigurowaniu konta Azure Automation zaloguj się do subskrypcji platformy Azure i upewnij się, że konto Azure Automation i odpowiedni element Runbook zostały wyświetlone w określonej grupie zasobów, jak pokazano na poniższej ilustracji:

    Obraz przedstawiający stronę przeglądu platformy Azure przedstawiającą nowo utworzone konto Azure Automation i element Runbook.

    Aby sprawdzić, czy element webhook jest tam, gdzie powinien być, wybierz nazwę elementu Runbook. Następnie przejdź do sekcji Zasoby elementu Runbook i wybierz pozycję Elementy webhook.

Tworzenie tożsamości zarządzanej

Teraz, gdy masz konto Azure Automation, musisz również skonfigurować tożsamość zarządzaną, jeśli jeszcze tego nie zrobiono. Tożsamości zarządzane ułatwiają elementowi Runbook dostęp do innych Microsoft Entra powiązanych zasobów, a także uwierzytelnianie ważnych procesów automatyzacji.

Aby skonfigurować tożsamość zarządzaną, postępuj zgodnie z instrukcjami w temacie Korzystanie z przypisanej przez system tożsamości zarządzanej dla konta Azure Automation. Po utworzeniu tożsamości zarządzanej przypisz ją z odpowiednimi uprawnieniami współautora do zasobów usługi Azure Virtual Desktop, takich jak pule hostów, maszyny wirtualne itp. Po zakończeniu wróć do tego artykułu i utwórz aplikację logiki platformy Azure i harmonogram wykonywania , aby zakończyć początkowy proces konfiguracji.

Tworzenie aplikacji logiki platformy Azure i harmonogram wykonywania

Na koniec musisz utworzyć aplikację logiki platformy Azure i skonfigurować harmonogram wykonywania dla nowego narzędzia do skalowania. Najpierw pobierz i zaimportuj moduł Programu PowerShell wirtualizacji pulpitu do użycia w sesji programu PowerShell, jeśli jeszcze tego nie zrobiono.

  1. Otwórz program PowerShell.

  2. Uruchom następujące polecenie cmdlet, aby zalogować się do konta platformy Azure.

    Login-AzAccount
    
  3. Uruchom następujące polecenie cmdlet, aby pobrać skrypt do tworzenia aplikacji logiki platformy 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. Uruchom następujący skrypt programu PowerShell, aby utworzyć aplikację logiki platformy Azure i harmonogram wykonywania dla puli hostów

    Uwaga

    Musisz uruchomić ten skrypt dla każdej puli hostów, którą chcesz skalować automatycznie, ale potrzebujesz tylko jednego konta 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 uruchomieniu skryptu aplikacja logiki platformy Azure powinna pojawić się w grupie zasobów, jak pokazano na poniższej ilustracji.

    Obraz strony przeglądu przykładowej aplikacji logiki platformy Azure.

    Aby wprowadzić zmiany w harmonogramie wykonywania, takie jak zmiana interwału cyklu lub strefy czasowej, przejdź do harmonogramu automatycznego skalowania aplikacji usługi Azure Logic App i wybierz pozycję Edytuj, aby przejść do Designer aplikacji logiki platformy Azure.

    Obraz Designer aplikacji logiki platformy Azure. Menu Cykl i element webhook, które umożliwiają użytkownikowi edytowanie czasów cyklu i otwierania pliku elementu webhook.

Zarządzanie narzędziem do skalowania

Po utworzeniu narzędzia do skalowania możesz uzyskać dostęp do jego danych wyjściowych. W tej sekcji opisano kilka funkcji, które mogą okazać się przydatne.

Wyświetlanie stanu zadania

Możesz wyświetlić stan podsumowania wszystkich zadań elementu Runbook lub wyświetlić bardziej szczegółowy stan określonego zadania elementu Runbook w Azure Portal.

Po prawej stronie wybranego konta Azure Automation w obszarze "Statystyki zadań" możesz wyświetlić listę podsumowań wszystkich zadań elementu Runbook. Otwarcie strony Zadania po lewej stronie okna pokazuje bieżące stany zadania, godziny rozpoczęcia i czasy ukończenia.

Zrzut ekranu przedstawiający stronę stanu zadania.

Wyświetlanie dzienników i danych wyjściowych narzędzia skalowania

Dzienniki operacji skalowania w poziomie i skalowania w poziomie można wyświetlić, otwierając element Runbook i wybierając zadanie.

Przejdź do elementu Runbook w grupie zasobów hostującej konto Azure Automation i wybierz pozycję Przegląd. Na stronie przeglądu wybierz zadanie w obszarze Ostatnie zadania , aby wyświetlić dane wyjściowe narzędzia skalowania, jak pokazano na poniższej ilustracji.

Obraz okna danych wyjściowych narzędzia skalowania.

Sprawdzanie numeru wersji skryptu elementu Runbook

Możesz sprawdzić, której wersji skryptu runbook używasz, otwierając plik runbook na koncie Azure Automation i wybierając pozycję Wyświetl. Skrypt elementu Runbook zostanie wyświetlony po prawej stronie ekranu. W skryptze zobaczysz numer wersji w formacie v#.#.# w SYNOPSIS sekcji. Najnowszy numer wersji można znaleźć tutaj. Jeśli w skryptze elementu Runbook nie widzisz numeru wersji, oznacza to, że używasz wcześniejszej wersji skryptu i należy zaktualizować go od razu. Jeśli musisz zaktualizować skrypt elementu Runbook, postępuj zgodnie z instrukcjami w temacie Tworzenie lub aktualizowanie konta Azure Automation.

Problemy z raportowaniem

Po zgłoszeniu problemu należy podać następujące informacje, aby ułatwić nam rozwiązywanie problemów:

  • Pełny dziennik na karcie Wszystkie dzienniki w zadaniu, które spowodowało problem. Aby dowiedzieć się, jak uzyskać dziennik, postępuj zgodnie z instrukcjami w temacie Wyświetlanie dzienników i skalowanie danych wyjściowych narzędzia. Jeśli w dzienniku znajdują się jakiekolwiek informacje poufne lub prywatne, możesz je usunąć przed przesłaniem problemu do nas.

  • Wersja używanego skryptu elementu Runbook. Aby dowiedzieć się, jak uzyskać numer wersji, zobacz Sprawdzanie numeru wersji skryptu elementu Runbook

  • Numer wersji każdego z następujących modułów programu PowerShell zainstalowanych na koncie Azure Automation. Aby znaleźć te moduły, otwórz konto Azure Automation, wybierz pozycję Moduły w sekcji Zasoby udostępnione w okienku po lewej stronie okna, a następnie wyszukaj nazwę modułu.

    • Az.Accounts
    • Az.Compute
    • Az.Resources
    • Az.Automation
    • Interfejs OMSIngestionAPI
    • Az.DesktopWirtualizacja

Log Analytics

Jeśli zdecydujesz się na użycie usługi Log Analytics, możesz wyświetlić wszystkie dane dziennika w dzienniku niestandardowym o nazwie WVDTenantScale_CL w obszarze Dzienniki niestandardowe w widoku Dzienniki obszaru roboczego usługi Log Analytics. Wymieniliśmy kilka przykładowych zapytań, które mogą okazać się przydatne.

  • Aby wyświetlić wszystkie dzienniki dla puli hostów, wprowadź następujące zapytanie:

    WVDTenantScale_CL
    | where hostpoolName_s == "<host_pool_name>"
    | project TimeStampUTC = TimeGenerated, TimeStampLocal = TimeStamp_s, HostPool = hostpoolName_s, LineNumAndMessage = logmessage_s, AADTenantId = TenantId
    
  • Aby wyświetlić całkowitą liczbę aktualnie uruchomionych maszyn wirtualnych hosta sesji i aktywnych sesji użytkowników w puli hostów, wprowadź następujące zapytanie:

    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
    
  • Aby wyświetlić stan wszystkich maszyn wirtualnych hosta sesji w puli hostów, wprowadź następujące zapytanie:

    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
    
  • Aby wyświetlić błędy i ostrzeżenia, wprowadź następujące zapytanie:

    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
    

Ograniczenia

Poniżej przedstawiono pewne ograniczenia dotyczące skalowania maszyn wirtualnych hosta sesji za pomocą tego skryptu skalowania:

  • Skrypt skalowania nie uwzględnia zmian czasu między standardowym a czasem letnim.