Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Dans cet article, vous allez découvrir l’outil de mise à l’échelle qui utilise un runbook Azure Automation et Une application logique Azure pour mettre automatiquement à l’échelle les machines virtuelles hôtes de session dans votre environnement Azure Virtual Desktop. Pour en savoir plus sur l’outil de mise à l’échelle, consultez Mettre à l’échelle les hôtes de session à l’aide de Azure Automation et d’Azure Logic Apps.
Remarque
La solution de mise à l’échelle automatique native d’Azure Virtual Desktop est généralement disponible pour les pools d’hôtes mis en pool et personnels, et effectue automatiquement un scale-in ou un scale-out des machines virtuelles hôtes de session en fonction de la planification de la mise à l’échelle. Nous vous recommandons d’utiliser la mise à l’échelle automatique pour faciliter la configuration. Pour plus d’informations, consultez Plans de mise à l’échelle automatique.
Vous ne pouvez pas mettre à l’échelle les hôtes de session à l’aide de Azure Automation et d’Azure Logic Apps avec la mise à l’échelle automatique sur le même pool d’hôtes. Vous devez utiliser l’un ou l’autre.
Configuration requise
Avant de commencer à configurer l’outil de mise à l’échelle, vérifiez que les éléments suivants sont prêts :
- Un pool d’hôtes Azure Virtual Desktop.
- Machines virtuelles du pool d’hôtes de session configurées et inscrites auprès du service Azure Virtual Desktop.
- Un utilisateur avec le rôle de contrôle d’accès en fonction du rôle (RBAC) Contributeur attribué sur l’abonnement Azure pour créer les ressources. Vous aurez également besoin du rôle RBAC Administrateur d’application et/ou Propriétaire pour créer une identité managée.
- Un espace de travail Log Analytics (facultatif).
La machine que vous utilisez pour déployer l’outil doit avoir :
- PowerShell 5.1 ou version ultérieure
- Le module Azure Az PowerShell
Si tout est prêt, commençons.
Créer ou mettre à jour un compte Azure Automation
Remarque
Si vous disposez déjà d’un compte Azure Automation avec un runbook exécutant une version antérieure du script de mise à l’échelle, il vous suffit de suivre les instructions ci-dessous pour vous assurer qu’il est mis à jour.
Tout d’abord, vous aurez besoin d’un compte Azure Automation pour exécuter le runbook PowerShell. Le processus décrit dans cette section est valide même si vous disposez d’un compte Azure Automation existant que vous souhaitez utiliser pour configurer le runbook PowerShell. Voici comment le configurer :
Ouvrez PowerShell.
Exécutez l’applet de commande suivante pour vous connecter à votre compte Azure.
Login-AzAccountRemarque
Votre compte doit disposer de droits contributeur sur l’abonnement Azure dans lequel vous souhaitez déployer l’outil de mise à l’échelle.
Exécutez l’applet de commande suivante pour télécharger le script de création du compte 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"Exécutez l’applet de commande suivante pour exécuter le script et créer le compte Azure Automation. Vous pouvez renseigner des valeurs pour les paramètres ou les commenter pour utiliser leurs valeurs par défaut.
$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 @ParamsRemarque
Si votre stratégie ne vous permet pas de créer des ressources de script de mise à l’échelle dans une région spécifique, mettez à jour l’attribution de stratégie et ajoutez la région souhaitée à la liste des régions autorisées.
Si vous n’avez pas encore créé de compte Automation, la sortie de l’applet de commande inclut un URI de webhook chiffré dans la variable de compte Automation. Veillez à conserver un enregistrement de l’URI, car vous l’utiliserez comme paramètre lorsque vous configurez la planification d’exécution pour l’application logique Azure. Si vous mettez à jour un compte Automation existant, vous pouvez récupérer l’URI de webhook à l’aide de PowerShell pour accéder aux variables.
Si vous avez spécifié le paramètre WorkspaceName pour Log Analytics, la sortie de l’applet de commande inclut également l’ID de l’espace de travail Log Analytics et sa clé primaire. Notez l’ID de l’espace de travail et la clé primaire, car vous devrez les réutiliser ultérieurement avec les paramètres lorsque vous configurez la planification d’exécution pour l’application logique Azure.
Une fois que vous avez configuré votre compte Azure Automation, connectez-vous à votre abonnement Azure et case activée pour vous assurer que votre compte Azure Automation et le runbook approprié apparaissent dans le groupe de ressources spécifié, comme illustré dans l’image suivante :
Pour case activée si votre webhook est là où il doit se trouver, sélectionnez le nom de votre runbook. Ensuite, accédez à la section Ressources de votre runbook et sélectionnez Webhooks.
Créer une identité managée
Maintenant que vous disposez d’un compte Azure Automation, vous devez également configurer une identité managée si ce n’est pas déjà fait. Les identités managées permettent à votre runbook d’accéder à d’autres ressources Microsoft Entra associées, ainsi qu’à authentifier des processus d’automatisation importants.
Pour configurer une identité managée, suivez les instructions décrites dans Utilisation d’une identité managée affectée par le système pour un compte Azure Automation. Une fois que vous avez créé une identité managée, attribuez-la avec les autorisations de contributeur appropriées aux ressources Azure Virtual Desktop telles que les pools d’hôtes, les machines virtuelles, etc. Une fois que vous avez terminé, revenez à cet article et à Créer l’application logique Azure et la planification d’exécution pour terminer le processus d’installation initial.
Créer l’application logique Azure et planifier l’exécution
Enfin, vous devez créer l’application logique Azure et configurer une planification d’exécution pour votre nouvel outil de mise à l’échelle. Tout d’abord, téléchargez et importez le module PowerShell De virtualisation de bureau à utiliser dans votre session PowerShell si vous ne l’avez pas déjà fait.
Ouvrez PowerShell.
Exécutez l’applet de commande suivante pour vous connecter à votre compte Azure.
Login-AzAccountExécutez l’applet de commande suivante pour télécharger le script de création de l’application logique 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"Exécutez le script PowerShell suivant pour créer l’application logique Azure et la planification d’exécution pour votre pool d’hôtes
Remarque
Vous devez exécuter ce script pour chaque pool d’hôtes que vous souhaitez mettre à l’échelle automatiquement, mais vous n’avez besoin que d’un seul compte 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 @ParamsUne fois le script exécuté, l’application logique Azure doit apparaître dans un groupe de ressources, comme illustré dans l’image suivante.
Pour apporter des modifications à la planification d’exécution, telles que la modification de l’intervalle de périodicité ou du fuseau horaire, accédez au planificateur de mise à l’échelle automatique d’application logique Azure et sélectionnez Modifier pour accéder à l’Designer Azure Logic App.
Gérer votre outil de mise à l’échelle
Maintenant que vous avez créé votre outil de mise à l’échelle, vous pouvez accéder à sa sortie. Cette section décrit quelques fonctionnalités que vous pouvez trouver utiles.
Afficher les status de travail
Vous pouvez afficher une status résumée de tous les travaux de runbook ou afficher une status plus détaillée d’un travail de runbook spécifique dans le Portail Azure.
À droite de votre compte Azure Automation sélectionné, sous « Statistiques des travaux », vous pouvez afficher une liste de résumés de toutes les tâches de runbook. L’ouverture de la page Travaux sur le côté gauche de la fenêtre affiche l’état des travaux, les heures de début et les heures d’achèvement actuelles.
Afficher les journaux et la sortie de l’outil de mise à l’échelle
Vous pouvez afficher les journaux des opérations de scale-out et de scale-in en ouvrant votre runbook et en sélectionnant le travail.
Accédez au runbook dans votre groupe de ressources hébergeant le compte Azure Automation, puis sélectionnez Vue d’ensemble. Dans la page vue d’ensemble, sélectionnez un travail sous Travaux récents pour afficher sa sortie de l’outil de mise à l’échelle, comme illustré dans l’image suivante.
Vérifier le numéro de version du script de runbook
Vous pouvez case activée la version du script de runbook que vous utilisez en ouvrant le fichier de runbook dans votre compte Azure Automation et en sélectionnant Afficher. Un script pour le runbook s’affiche sur le côté droit de l’écran. Dans le script, vous verrez le numéro de version dans le format v#.#.# sous la SYNOPSIS section . Vous trouverez le numéro de version le plus récent ici. Si vous ne voyez pas de numéro de version dans votre script de runbook, cela signifie que vous exécutez une version antérieure du script et que vous devez la mettre à jour immédiatement. Si vous devez mettre à jour votre script de runbook, suivez les instructions fournies dans Créer ou mettre à jour un compte Azure Automation.
Signaler des problèmes
Lorsque vous signalez un problème, vous devez fournir les informations suivantes pour nous aider à résoudre les problèmes :
Journal complet de l’onglet Tous les journaux du travail à l’origine du problème. Pour savoir comment obtenir le journal, suivez les instructions fournies dans Afficher les journaux et la sortie de l’outil de mise à l’échelle. Si le journal contient des informations sensibles ou privées, vous pouvez les supprimer avant de nous soumettre le problème.
Version du script de runbook que vous utilisez. Pour savoir comment obtenir le numéro de version, consultez Vérifier le numéro de version du script de runbook.
Numéro de version de chacun des modules PowerShell suivants installés dans votre compte Azure Automation. Pour trouver ces modules, ouvrez Azure Automation compte, sélectionnez Modules sous la section Ressources partagées dans le volet de gauche de la fenêtre, puis recherchez le nom du module.
- Az.Accounts
- Az.Compute
- Az.Resources
- Az.Automation
- OMSIngestionAPI
- Az.DesktopVirtualization
Log Analytics
Si vous avez décidé d’utiliser Log Analytics, vous pouvez afficher toutes les données de journal dans un journal personnalisé nommé WVDTenantScale_CL sous Journaux personnalisés dans la vue Journaux de votre espace de travail Log Analytics. Nous avons répertorié quelques exemples de requêtes que vous pourriez trouver utiles.
Pour afficher tous les journaux d’un pool d’hôtes, entrez la requête suivante :
WVDTenantScale_CL | where hostpoolName_s == "<host_pool_name>" | project TimeStampUTC = TimeGenerated, TimeStampLocal = TimeStamp_s, HostPool = hostpoolName_s, LineNumAndMessage = logmessage_s, AADTenantId = TenantIdPour afficher le nombre total de machines virtuelles hôtes de session en cours d’exécution et de sessions utilisateur actives dans votre pool d’hôtes, entrez la requête suivante :
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 = TenantIdPour afficher les status de toutes les machines virtuelles hôtes de session dans un pool d’hôtes, entrez la requête suivante :
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 = TenantIdPour afficher les erreurs et les avertissements, entrez la requête suivante :
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
Limitations
Voici quelques limitations de la mise à l’échelle des machines virtuelles hôtes de session avec ce script de mise à l’échelle :
- Le script de mise à l’échelle ne prend pas en compte les changements de temps entre les économies standard et d’été.