Run command en Azure VMs con PowerShell
Azure ofrece nuevas funcionalidades todo el tiempo, por lo que no es raro estar utilizando el portal y ver una nueva opción o feature lista para usar. Revisando dentro del blade de las VMs encontré una opción llamada Run Command dentro de las opciones de la sección “Operations”. No recordaba haber visto esa opción antes, por lo que le hice clic y me sorprendió lo que obtuve…
Si bien existen varios caminos para ejecutar comandos o scripts en Azure, dependen de lo que se necesite implementar. Se pueden utilizar Runbooks con Azure Automation, scripts de Desire State Configuration (DSC), Azure DevOps pipelines y otras There are several ways to run commands and scripts on Azure VMs depending on the design you need to implement. You can use runbooks, Desired State Configuration (DSC) scripts, Azure DevOps pipelines, and many other third-party solutions for this. There’s also a pretty simple standalone solution to execute commands on Azure VMs, which is a built-in feature in Azure Portal and is also usable through PowerShell.
Una lista con una variedad de opciones que permite, de forma sencilla y ágil, realizar ciertas tareas de gestión de recursos o resolución de problemas sin salir de la consola de Azure.
Indudablemente una de las opciones existentes es ejecutar un script de PowerShell, pero también se encuentra disponible la ejecución de los clásicos comandos de cmd. Adicional a lo anterior tenemos algunos “shorcuts”, como lo es la ejecución del comando ipconfig /all
o la habilitación del usuario administrador.
Ejecutar PowerShell desde el portal
Para ejecutar PowerShell basta seleccionar la opción RunPowerShellScript y escribir el código dentro del recuadro. Luego seleccionar el botón Run y analizar la salida. Para el ejemplo vamos a escribir una consulta seleccionando los 10 servicios en ejecución que más consumen CPU:
Obteniendo como resultado la siguiente salida:
Para los que gustan de contar con más detalles, la versión que utiliza esta funcionalidad es la 5.1
edición “Desktop”. Es decir que no utiliza la versión Core :(
Restricciones
Si bien tiene muchos usos prácticos, también es cierto que existen limitaciones:
- La salida tiene un límite de hasta 4096 bytes
- Demora alerdedor de unos 20 segundos ejecutar el script
- Únicamente se puede ejecutar uno a la vez
- No está soportado el modo interactivo (prompt)
- No se puede cancelar una ejecución
- El tiempo máximo que un script puede correr es 90 minutos, luego genera un time out
- Los scripts se ejecutan como System (se puede comprobar ejecutando
whoami
) - La VM necesita tener conectividad para retornar el resultado de la ejecución (básicamente tiene que tener conectividad a las IPs públicas de Azure por el puerto 443)
Utilizar Azure CLI y Azure PowerShell
También podemos realizar lo mismo que el portal sin salir de nuestra sesión en Azure CLI o Azure PowerShell, gracias a los siguientes ejemplos:
Azure CLI
Más información en la documentación oficial: az vm run-command
Azure PowerShell
Seguridad
La funcionalidad Run Command permite limitar el acceso a ésta funcionalidad. Para poder hacer uso de la misma es necesario contar con el siguiente nivel de permiso:
Microsoft.Compute/virtualMachines/runCommand/action
El cual ya viene incluído en el rol Virtual Machine Contributor (u otros roles con mayores privilegios).
Vale la pena recordar que es posible crear roles custom en donde es posible asignar este privilegio en particular para tener un mayor control en los recursos.
Happy scripting!
Comments