top of page
  • Foto del escritorAlejandro Caravantes Molina

Scale out de máquinas virtuales para RPA con Azure Virtual Desktop



En esta entrada vamos a explorar las capacidades RPA de Power Automate desde un punto de vista de infraestructura.


Antes de continuar y por mantener altas las espectativas, varias conclusiones saco con este post:

  • El límite de lo que podemos montar con Power Platform es única y exclusivamente hasta donde nuestras ideas puedan llegar.

  • Al próximo que oiga decir que Power Platform es para hacer cositas de andar por casa, le redirijo a este post 😎

Si estás trabajando con Power Automate Desktop para robotizar procesos, seguro que alguna vez has pensado: sí, todo esto está muy bien para robotizar un procesito sencillo, pero... ¿qué ocurre si tengo una pila de procesos muy elevada y necesito mas máquinas disponibles para ejecutar mi robot?, ¿necesito tener 100 máquinas levantadas constantemente?


Afortunadamente los ingenieros de Microsoft tambien han pensado en esto y es aquí donde aparece a nuestro rescate Power Automate Azure Virtual Desktop. No es mas que un starter kit mediante el cual con una serie de componentes de Azure y de Power Platform, podemos aprovisionar o desaprovisionar máquinas virtuales en Azure en función de la carga de trabajo y de los procesos RPA encolados en un determinado lapso de tiempo. Dicho así parece muy sencillita la cosa, pero tengamos en cuenta que este kit realiza de forma totalmente automática y desatendida lo siguiente:

  • Si el número de procesos encolados es superior a lo que hemos configurado, un flujo de Power Automate aprovisiona nuevas máquinas virtuales en Azure Virtual Desktop.

  • Cuando las máquinas se han aprovisionado, una Cuenta de Automatización ejecuta un script de Powershell que une las nuevas máquinas creadas al Machine Group donde corren los flujos RPA.

  • Cuando ha finalizado el paso anterior, los flujos RPA encolados se van ejecutando en estas nuevas máquinas en función de la prioridad que hemos configurado en el propio flujo.

  • Cuando el número de flujos encolados desciende, el mismo flujo cloud de Power Automate desaprovisiona las máquinas para controlar el gasto.

Un pool elástico y desatendido de máquinas virtuales

Vamos al lío, aunque con un pequeño spolier: la configuración es algo engorrosa y larga, pero creo que merece la pena.


Antes de empezar, por favor descárgate el paquete que contiene los recursos que vamos a necesitar y que forman parte del Starter Kit. Aquí tienes el link oficial.


Lo primero que vamos a hacer es crear un Machine Group desde el portal de Power Automate. Este Machine Group es el que nos va a dar la información de cuantos procesos hay encolados. Para esta prueba de concepto voy a agregar mi ordenador local a ese grupo de máquinas.


Para crear el Machine Group, dirígete al portal de Power Automate selecciona la opción Monitor > Machines > Machines Group. Crea un nuevo grupo, y a continuación crea una nueva máquina asociada al grupo que acabas de crear.


Para agregar la máquina al grupo de máquinas deberás tener instalada la última versión de Power Automate Desktop. Si es así, selecciona Launch it now y se abrirá en tu ordenador Power Automate Desktop desde donde podrás terminar de vincular tu pc al grupo de máquinas. Muy importante, copia el valor de la contraseña del grupo de máquinas que lo vamos a necesitar para precisamente conocer el número de procesos encolados.


Lo segundo que necesitamos es una serie de recursos en Azure.

  • Azure Virtual Desktop:


Este recurso va a ser el servicio que va a hospedar las máquinas virtuales que van a crearse y destruirse en función del número de procesos automáticos encolados. Dirígete al portal de Azure, y en la barra de búsqueda introduce Azure Virtual Desktop y selecciónalo. Una vez en la página de este componente, ve a Introducción y selecciona Inicio. Lo siguiente que nos pide es que indiquemos un grupo de recursos y demás datos. Especial atención a las dos credenciales que pide en la primera pestaña: la primera credencial debe ser de un usuario existente con permisos de administrador sobre la suscripción de Azure, la segunda sin embargo debe ser una nueva credencial para un nuevo usuario que se convertirá en el administrador de dominio que se utilice para unir las nuevas máquinas que se vayan creando.


En la pestaña de Máquinas Virtuales, nos va a pedir las características de las máquinas que se van a hospedar Azure Virtual Desktop. En mi caso para esta prueba de concepto he configurado la creación de una máquina multisesión con una imagen de Windows 11.

En la última pestaña, configura las credenciales de un usuario de prueba.


Inicia la implementación que ya te adelanto que va a tardar un buen rato.

  • Azure Automation Account:

Este componente se va a crear de forma automática como parte de la implementación de Azure Virtual Desktop. Este recurso es el que se va a encargar de ejecutar el script necesario para instalar Power Automate Desktop en las nuevas máquinas que se creen como consecuencia de un excesivo encolamiento de procesos a ejecutar, y a unir estas máquinas al Machine Group que hemos creado en el primer paso.


Lo único que tenemos que hacer con este componente una vez se haya creado, son dos cosas:

  • Dirígete a la sección Credenciales y apunta el nombre de la credencial AdminAzureCredentials

  • Ahora ve a la sección Runbooks e importa el fichero runbookWorkflow.ps1 incluido en el Starter Kit. Este es el script que va a instalar Power Automate Desktop en cada máquina virtual que se cree y acto seguido la va a unir al Machine Group.


  • Registro de aplicación en Azure AD:

Esta aplicación se va a utilizar para crear el flujo de Power Automate que va a hacer el autoescalado del pool de máquinas y para crear o destruir las propias máquinas. Registra una aplicación en el directorio activo de Azure, y otórgale los siguientes permisos:


Después crea un secreto y copia tanto el identificador de aplicación como el valor del secreto.

  • Azure Key Vault:

Este recurso va a almacenar de forma segura distintos valores que vamos a necesitar como son el identificador de aplicación y el secreto de la aplicación registrada. Crea el componente y da de alta tres secretos:

  • El identificador de la aplicación creada en el paso anterior

  • El valor del secreto creado en el paso anterior

  • La contraseña del grupo de máquinas que copiaste al configurar tu ordenador en el primer paso


Hemos terminado con Azure, así que lo último que necesitamos hacer es importar la solución que contiene toda la chicha. Selecciona un entorno sobre el que trabajar e importa la solución: AzureVirtualDesktopStarterKit_1_0_0_1.zip. Configura las conexiones como siempre hacemos cuando importamos una solución con Referencias de Conexión y establece los valores correctos para la conexión al Key Vault, Automation Account, etc.


La solución tardará unos minutos en importarse y cuando haya finalizado podremos empezar a ensamblar todo lo que hemos venido haciendo hasta ahora.


Ejecuta la aplicación Azure Virtual Desktop Integration Configuration App y selecciona New Scaling Configuration. Lo primero que nos va a pedir es el nombre y el identificador del Tenant, y el entorno sobre el que vamos a trabajar.


Una vez hayas indicado estos tres parámetros, en la sección Azure Virtual Desktop Service Principal debes incluir el nombre de los secretos que has creado en el Key Vault y que almacenan los valores de identificador de aplicacion y el valor de su secreto. Exactamente lo mismo para la parte de Service Principal Power Automate. En mi caso, como a la misma aplicación le he dado permisos de Flow.Read.All y Azure Service Management, los valores coinciden.


En el paso dos, necesitamos configurar el Machine Group que hemos configurado al principio. Si has configurado los secretos del Key Vault de forma correcta, en este segundo paso se mostrará el nombre del Machine Group. Si ves que la app reporta algún error revisa que los secretos estén bien configurados y revisa los nombres de Azure Virtual Desktop Service Principal y Service Principal Power Automate del paso previo de la aplicación.

En el tercer paso, vamos a indicar la configuración del host de máquinas virtuales que va a albergar las nuevas VMs y la cuenta de automatización que va a ejecutar el script de configuración. Selecciona la suscripción de Azure, el grupo de recursos y el recurso de Azure Virtual Desktop. En la parte inferior debes indicar, el nombre de la cuenta de automatización, las credenciales de la cuenta de automatización que has apuntado antes (en mi caso AdminAzureCredentials), y por último en Machine Group Password indica el nombre del secreto que almacena la contraseña del grupo de máquinas.


¡Vamos con el último paso de la configuración!


En Scaling Strategy como te puedes imaginar, necesitamos configurar por un lado la recurrencia con la que se va a comprobar la cola de procesos RPA encolados, el número de procesos encolados que deben existir para que se aprovisionen mas máquinas, el número mínimo de máquinas que deben estar levantadas, y el modo de desescalado: desaprovisionamiento (que lleva mas tiempo y literalmente destruye las máquinas creadas) o apagado. Para esta prueba de concepto esta es mi configuración:


¡Ya está! Si todo ha ido bien, que seguro que sí, te invito a que hagas una prueba: lanza un flujo cloud que lance un flujo RPA y fuerza la ejecución del flujo cloud con nombre: Auto Generated Orchestration Flow.


Observa lo siguiente:

  • Fíjate que en el Machine Group hay solo una máquina levantada

  • Mira como el flujo Auto Generated Orchestration Flow está en ejecución:

  • Dale un vistazo a la Cuenta de Automatización y comprueba que el runbook runbookWorkflow se ha ejecutado satisfactoriamente. Como ves, me han hecho falta unas cuantas pruebas 😝:

  • Y por último la traca final. Vuelve al Machine Group y.... ¡tachán! Una nueva máquina se ha vinculado al grupo de máquinas y esta disponible para balancear la carga de procesos RPA. Si sigues probando, verás como cuando el número de procesos encolados baja de lo que hemos configurado, la nueva máquina virtual hace shutdown de forma automática.


¿Qué?, Con que Power Platform es para cosas simples ¿eh?


¡Espero haber sido de ayuda!, ¡Hasta la próxima!



bottom of page