Ejecutar scripts en VM de Azure con la Extensión de Script Personalizado

Como su equipo comienza a aprovisionar y configurar más máquinas virtuales (VM) de Windows Azure, en algún momento se cansarán de reinventar la rueda. ¡Necesitan automatización! En este artículo, acompáñenme mientras les guío paso a paso para comenzar a utilizar las extensiones de script personalizadas de Azure y ejecutar scripts en sus VM de Azure.

Si su equipo trabaja en un entorno Windows, una de las mejores herramientas para automatizar la configuración del servidor es PowerShell. Al utilizar el módulo Azure PowerShell, su organización puede aprovechar el poder de PowerShell no solo para automatizar tareas locales, sino también para ejecutar comandos en varias VM de Azure a la vez, en lugar de hacerlo una por una.

Microsoft nos ha proporcionado una función llamada extensión de script personalizado de Azure. La extensión de script personalizado es una extensión de máquina virtual de Azure que el agente de VM ejecuta para ejecutar código arbitrario de PowerShell en sus VM mediante la API de Azure, en lugar de acceder a la consola de la VM o utilizar la conexión remota de PowerShell.

Ejecutar comandos de esta manera ofrece varios beneficios. Ejecutar comandos mediante la extensión personalizada de Azure en Windows:

  • proporciona mayor seguridad al no necesitar abrir puertos de red para la conexión remota de PowerShell
  • permite ejecutar fácilmente código de PowerShell al iniciar la VM
  • transfiere automáticamente recursos desde el almacenamiento de Azure a su VM como parte del proceso de aprovisionamiento.
  • Una manera sencilla de ejecutar scripts de PowerShell almacenados en varios cuentas de almacenamiento de Azure

La habilitación de una extensión de script personalizado de Azure para Windows se puede hacer de varias maneras. En este artículo, nos enfocaremos en habilitar la extensión de script personalizado a través de PowerShell, pero también puedes habilitar la extensión a través de una plantilla de Azure Resource Manager (ARM).

Como ejemplo sencillo, digamos que deseas asegurarte de que la conexión remota de PowerShell esté habilitada en una VM de Azure en tu suscripción. Para hacer esto, necesitarías ejecutar el siguiente comando localmente en cada VM:

Enable-PSRemoting -Force

Construyamos una extensión de script personalizado para hacer esto.

Usando Azure para Ejecutar un Script en una VM

Primero, crea un script de PowerShell llamado Enable-PSRemoting.ps1 en tu computadora local con el comando anterior adentro. Este script necesita ejecutarse en una VM de Azure. Para hacer esto, construiremos otro pequeño script de PowerShell llamado New-CustomScriptExtension.ps1 para cargarlo en Azure y crear una extensión de script personalizado para ejecutarlo. Antes de avanzar demasiado, necesitarás un par de elementos:

  • El grupo de recursos de Azure y el nombre de la cuenta de almacenamiento que almacenarán el script
  • El nombre del contenedor de almacenamiento de Azure
  • El nombre de la VM
  • El nombre del grupo de recursos de Azure en el que se encuentra la VM

Este script se puede dividir en dos secciones; subir el pequeño script de PowerShell a Azure y crear la extensión de script personalizado. Todo lo demás es necesario para unir estos dos procesos.

Subir un Script de PowerShell a Azure

Primero, subiremos el script Enable-PSRemoting.ps1 a la cuenta de almacenamiento de Azure ($StorageAccountName) dentro del contenedor ($ContainerName) en el grupo de recursos ($ResourceGroupName).

Copying Enable-PSRemoting.ps1 to Azure
$saParams = @{ 'ResourceGroupName' = $ResourceGroupName 'Name' = $StorageAccountName } $storageContainer = Get-AzureRmStorageAccount @saParams |Get-AzureStorageContainer -Container $ContainerName $bcParams = @{ 'File' = 'C:\Enable-PSRemoting.ps1' 'BlobType' = 'Block' 'Blob' = ' Enable-PSRemoting.ps1' } $storageContainer | Set-AzureStorageBlobContent @bcParams

Ejecutando la Extensión de Script Personalizado

Cuando ejecutas New-CustomScriptExtension.ps1, este script subirá el script Enable-PSRemoting.ps1 a la cuenta de almacenamiento de Azure especificada.

Ahora que el script está almacenado en Azure, puedes ejecutarlo a través de la extensión de script personalizado para la VM:

  • Nombre: $VMName
  • Grupo de Recursos: $rgName
  • Cuenta de Almacenamiento: $saName
  • Contenedor de Almacenamiento: $scName

Abre un editor de texto para New-CustomScriptExtension.ps1 y pega el siguiente ejemplo. Cuando lo ejecutes, ejecutará la extensión de script personalizado de Azure para Windows, la cual ejecutará el script de PowerShell Enable-PSRemoting.ps1 que subiste anteriormente.

New-CustomScriptExtension.ps1
# Obtenemos la VM que necesitamos configurar $vm = Get-AzureRmVM -ResourceGroupName $rgName -Name $VMName # Obtenemos la clave de la cuenta de almacenamiento $key = (Get-AzureRmStorageAccountKey -Name $saName -ResourceGroupName$rgname).Key1 ## Habilitamos la extensión de script personalizado y ejecutamos el script $scriptParams = @{ 'ResourceGroupName' = $rgName 'VMName' = $VMName 'Name' = 'Enable-PSRemoting.ps1' 'Location' = $vm.Location 'StorageAccountName' = $saName 'StorageAccountKey' = $key 'FileName' = 'Enable-PSRemoting.ps1' 'ContainerName' = $scName 'Run' = 'Enable-PSRemoting.ps1' } Set-AzureRmVMCustomScriptExtension @scriptParams

Resumen

Una vez que este script se complete, puede verificar que Enable-PSRemoting.ps1 se haya ejecutado en la VM y que la remoción de PowerShell se haya habilitado correctamente. Ahora debería poder utilizar Invoke-Command contra su VM de Azure.

Al aprovechar la extensión de script personalizado de Azure en Windows, ahora tiene la capacidad de ejecutar de forma remota cualquier tipo de scripts de PowerShell en sus VM de Azure.

Source:
https://adamtheautomator.com/azure-run-script-on-vm/