Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este artículo, obtendrá información sobre la herramienta de escalado que usa un runbook de Azure Automation y Azure Logic App para escalar automáticamente las máquinas virtuales de host de sesión en el entorno de Azure Virtual Desktop. Para más información sobre la herramienta de escalado, consulte Escalado de hosts de sesión mediante Azure Automation y Azure Logic Apps.
Nota:
La solución de escalado automático nativa de Azure Virtual Desktop está disponible con carácter general para los grupos de hosts agrupados y personales, y se escalará o horizontalmente automáticamente las máquinas virtuales del host de sesión según la programación de escalado. Se recomienda usar escalabilidad automática para facilitar la configuración. Para obtener más información, consulte Planes de escalado automático.
No se pueden escalar los hosts de sesión mediante Azure Automation y Azure Logic Apps junto con la escalabilidad automática en el mismo grupo de hosts. Debe usar uno o el otro.
Requisitos previos
Antes de empezar a configurar la herramienta de escalado, asegúrese de que tiene listos los siguientes elementos:
- Un grupo de hosts de Azure Virtual Desktop.
- Máquinas virtuales del grupo de hosts de sesión configuradas y registradas con el servicio Azure Virtual Desktop.
- Un usuario con el rol de control de acceso basado en rol (RBAC) colaborador asignado en la suscripción de Azure para crear los recursos. También necesitará el rol RBAC de administrador de aplicaciones o propietario para crear una identidad administrada.
- Un área de trabajo de Log Analytics (opcional).
La máquina que use para implementar la herramienta debe tener:
- PowerShell 5.1 o posterior
- El módulo Azure Az PowerShell
Si tiene todo listo, comencemos.
Creación o actualización de una cuenta de Azure Automation
Nota:
Si ya tiene una cuenta de Azure Automation con un runbook que ejecuta una versión anterior del script de escalado, lo único que debe hacer es seguir las instrucciones siguientes para asegurarse de que se actualiza.
En primer lugar, necesitará una cuenta de Azure Automation para ejecutar el runbook de PowerShell. El proceso que describe esta sección es válido incluso si tiene una cuenta de Azure Automation existente que desea usar para configurar el runbook de PowerShell. A continuación se muestra cómo configurarlo:
Abra PowerShell.
Ejecute el siguiente cmdlet para iniciar sesión en su cuenta de Azure.
Login-AzAccountNota:
La cuenta debe tener derechos de colaborador en la suscripción de Azure donde desea implementar la herramienta de escalado.
Ejecute el siguiente cmdlet para descargar el script para crear la cuenta de 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"Ejecute el siguiente cmdlet para ejecutar el script y crear la cuenta de Azure Automation. Puede rellenar los valores de los parámetros o comentarlos para usar sus valores predeterminados.
$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 @ParamsNota:
Si la directiva no le permite crear recursos de script de escalado en una región específica, actualice la asignación de directivas y agregue la región que desea a la lista de regiones permitidas.
Si no ha creado una cuenta de automation antes, la salida del cmdlet incluirá un URI de webhook cifrado en la variable de cuenta de Automation. Asegúrese de mantener un registro del URI porque lo usará como parámetro al configurar la programación de ejecución de Azure Logic App. Si va a actualizar una cuenta de Automation existente, puede recuperar el URI del webhook mediante PowerShell para acceder a las variables.
Si especificó el parámetro WorkspaceName para Log Analytics, la salida del cmdlet también incluirá el identificador del área de trabajo de Log Analytics y su clave principal. Anote el identificador del área de trabajo y la clave principal porque tendrá que usarlos de nuevo más adelante con parámetros al configurar la programación de ejecución para la aplicación lógica de Azure.
Después de configurar la cuenta de Azure Automation, inicie sesión en la suscripción de Azure y compruebe que la cuenta de Azure Automation y el runbook correspondiente aparecen en el grupo de recursos especificado, como se muestra en la siguiente imagen:
Para comprobar si el webhook es donde debe estar, seleccione el nombre del runbook. A continuación, vaya a la sección Recursos del runbook y seleccione Webhooks.
Creación de una identidad administrada
Ahora que tiene una cuenta de Azure Automation, también tendrá que configurar una identidad administrada si aún no lo ha hecho. Las identidades administradas ayudarán al runbook a acceder a otros recursos relacionados con Microsoft Entra, así como a autenticar procesos de automatización importantes.
Para configurar una identidad administrada, siga las instrucciones de Uso de una identidad administrada asignada por el sistema para una cuenta de Azure Automation. Una vez que haya creado una identidad administrada, asígnela con los permisos de colaborador adecuados a los recursos de Azure Virtual Desktop, como grupos de hosts, máquinas virtuales, etc. Una vez que haya terminado, vuelva a este artículo y cree la programación de ejecución y la aplicación lógica de Azure para finalizar el proceso de instalación inicial.
Creación de la programación de ejecución y la aplicación lógica de Azure
Por último, deberá crear la aplicación lógica de Azure y configurar una programación de ejecución para la nueva herramienta de escalado. En primer lugar, descargue e importe el módulo de PowerShell de virtualización de escritorio que se usará en la sesión de PowerShell si aún no lo ha hecho.
Abra PowerShell.
Ejecute el siguiente cmdlet para iniciar sesión en su cuenta de Azure.
Login-AzAccountEjecute el siguiente cmdlet para descargar el script para crear la aplicación lógica de 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"Ejecute el siguiente script de PowerShell para crear la aplicación lógica de Azure y la programación de ejecución para el grupo host.
Nota:
Tendrá que ejecutar este script para cada grupo de hosts que quiera escalar automáticamente, pero solo necesita una cuenta 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 @ParamsDespués de ejecutar el script, la aplicación lógica de Azure debe aparecer en un grupo de recursos, como se muestra en la siguiente imagen.
Para realizar cambios en la programación de ejecución, como cambiar el intervalo de periodicidad o la zona horaria, vaya al programador de escalado automático de Azure Logic App y seleccione Editar para ir al Designer de Azure Logic App.
Administración de la herramienta de escalado
Ahora que ha creado la herramienta de escalado, puede acceder a su salida. En esta sección se describen algunas características que podría resultarle útiles.
Visualización del estado del trabajo
Puede ver un estado resumido de todos los trabajos de runbook o ver un estado más detallado de un trabajo de runbook específico en el Azure Portal.
A la derecha de la cuenta de Azure Automation seleccionada, en "Estadísticas de trabajos", puede ver una lista de resúmenes de todos los trabajos de runbook. Al abrir la página Trabajos en el lado izquierdo de la ventana se muestran los estados del trabajo actuales, las horas de inicio y las horas de finalización.
Visualización de los registros y la salida de la herramienta de escalado
Para ver los registros de las operaciones de escalado horizontal y escalado horizontal, abra el runbook y seleccione el trabajo.
Vaya al runbook del grupo de recursos que hospeda la cuenta de Azure Automation y seleccione Información general. En la página de información general, seleccione un trabajo en Trabajos recientes para ver la salida de la herramienta de escalado, como se muestra en la siguiente imagen.
Comprobación del número de versión del script de runbook
Para comprobar la versión del script de runbook que usa, abra el archivo de runbook en la cuenta de Azure Automation y seleccione Ver. Aparecerá un script para el runbook en el lado derecho de la pantalla. En el script, verá el número de versión en el formato v#.#.# de la SYNOPSIS sección . Puede encontrar el número de versión más reciente aquí. Si no ve un número de versión en el script de runbook, significa que está ejecutando una versión anterior del script y debe actualizarlo inmediatamente. Si necesita actualizar el script de runbook, siga las instrucciones de Creación o actualización de una cuenta de Azure Automation.
Informar de problemas
Cuando informe de un problema, deberá proporcionar la siguiente información para ayudarnos a solucionarlo:
Un registro completo de la pestaña Todos los registros del trabajo que provocó el problema. Para obtener información sobre cómo obtener el registro, siga las instrucciones de Visualización de registros y resultados de la herramienta de escalado. Si hay información confidencial o privada en el registro, puede quitarla antes de enviarnos el problema.
La versión del script de runbook que está usando. Para obtener información sobre cómo obtener el número de versión, consulte Comprobación del número de versión del script de runbook.
Número de versión de cada uno de los siguientes módulos de PowerShell instalados en la cuenta de Azure Automation. Para buscar estos módulos, abra Azure Automation cuenta, seleccione Módulos en la sección Recursos compartidos del panel del lado izquierdo de la ventana y, a continuación, busque el nombre del módulo.
- Az.Accounts
- Az.Compute
- Az.Resources
- Az.Automation
- OMSIngestionAPI
- Az.DesktopVirtualization
Log Analytics
Si decide usar Log Analytics, puede ver todos los datos de registro en un registro personalizado denominado WVDTenantScale_CL en Registros personalizados en la vista Registros del área de trabajo de Log Analytics. Hemos enumerado algunas consultas de ejemplo que puede resultarle útil.
Para ver todos los registros de un grupo de hosts, escriba la consulta siguiente:
WVDTenantScale_CL | where hostpoolName_s == "<host_pool_name>" | project TimeStampUTC = TimeGenerated, TimeStampLocal = TimeStamp_s, HostPool = hostpoolName_s, LineNumAndMessage = logmessage_s, AADTenantId = TenantIdPara ver el número total de máquinas virtuales de host de sesión en ejecución y sesiones de usuario activas en el grupo de hosts, escriba la consulta siguiente:
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 = TenantIdPara ver el estado de todas las máquinas virtuales de host de sesión de un grupo de hosts, escriba la consulta siguiente:
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 = TenantIdPara ver los errores y advertencias, escriba la consulta siguiente:
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
Limitaciones
Estas son algunas limitaciones con el escalado de máquinas virtuales de host de sesión con este script de escalado:
- El script de escalado no tiene en cuenta los cambios de hora entre el horario de verano y el estándar.