PowerShell para la administración de nuestras aplicaciones en Windows Azure

 

 
 
En muchos post hemos visto la forma de utilizar el portal de la plataforma para desplegar, actualizar, eliminar, etcétera los servicios que tenemos actualmente ejecutándose en la nube. Pero esta no es la única alternativa para realizar estas tareas más propias del administrador ;) . La otra opción es utilizando la API de administración que nos proporciona Windows Azure. Podemos hacer uso de la misma a través de REST o también usando Windows Azure Management CmdLets,  un snap-in para PowerShell que actúa como wrap de la API facilitándonos el trabajo. Podemos descargarlo a través del siguiente enlace.
Una vez descargado, descomprimimos el archivo y abrimos con Visual Studio la solución alojada en la carpeta code para compilar la misma. Es posible que no encuentre la librería Microsoft.WindowsAzure.StorageClient por lo que debemos eliminar la referencia existente y agregar la última versión del SDK 1.3 de esta librería. Compilamos la solución y ejecutamos el archivo startHere.cmd para instalar los componentes necesarios, además del snap-in.
Ya estamos listos para administrar nuestras aplicaciones a golpe de comando :) . Abrimos una ventana de Windows PowerShell/Windows PowerShell ISE  y ejecutamos lo siguiente:
Add-PSSnapin AzureManagementToolsSnapIn
Con este comando lo único que estamos haciendo es añadir el snap-in que acabamos de instalar a la sesión actual. Para comprobar que funcionó correctamente podemos recuperar los comandos disponibles:
Get-Command -PSSnapIn AzureManagementToolsSnapIn

Lanzar un nuevo despliegue

 Uno de los objetivos más comunes sería desplegar un paquete en uno de los entornos. Para ello utilizaremos el comando New-Deployment con los siguientes parámetros obligatorios:
New-Deployment -serviceName <LOWER_CASE_SERVICENAME>
-storageServiceName <LOWER_CASE_STORAGE_SERVICE_NAME>
-subscriptionId <YOUR_SUBSCRIPTION_ID>
-certificate (get-item cert:CurrentUserMY<CERTIFICATE_THUMPRINT>)
-slot staging –package <PACKAGE_LOCATION> -configuration <CONFIGURATION_LOCATION>
-label "From PS"
Un ejemplo del comando anterior podría ser el siguiente:
New-Deployment -serviceName returngis -storageServiceName myazurestorage
-subscriptionId 5rtegtsw-0i93d-46b0-5tre-nh64w24
-certificate (get-item cert:CurrentUserMY327BBBABFE909FDJGR9ERJGFGDDFS30E76D370F2F95)
-slot staging –package c:DeployWindowsAzurePowerShell.cspkg
-configuration C:DeployServiceConfiguration.cscfg -label "From PS"
(Los datos son ficticios ;) )
Si utilizamos un cliente para visualizar los containers en la cuenta de Storage que hemos incluido en la llamada, podemos ver que existe un nuevo container llamado mydeployments con todos los paquetes utilizados para los despliegues a través de PowerShell.
 
 
Si bien con el anterior comando hemos conseguido desplegar un nuevo paquete en el entorno de staging, la máquina virtual no ha sido arrancada :( Afortunadamente esta acción también podemos ejecutarla desde PowerShell utilizando el Set-DeploymentStatus:
Set-DeploymentStatus -status running -slot <staging/production>
-serviceName <LOWER_CASE_SERVICENAME>
-SubscriptionId <YOUR_SUBSCRIPTION_ID>
-certificate (get-item cert:CurrentUserMY<CERTIFICATE_THUMPRINT>)
Un ejemplo de lo anterior podría ser lo siguiente:
Set-DeploymentStatus -status running -slot staging
-serviceName returngis -SubscriptionId 5rtegtsw-0i93d-46b0-5tre-nh64w24
-certificate (get-item cert:CurrentUserMY327BBBABFE909FDJGR9ERJGFGDDFS30E76D370F2F95)

Eliminiar despliegue

Para eliminar un despliegue los parámetros son prácticamente los mismos que al realizar la subida, a excepción de especificar los paquetes.
Remove-deployment -slot staging -serviceName <LOWER_CASE_SERVICENAME>
 -subscriptionId <YOUR_SUBSCRIPTION_ID>
 -certificate (get-item cert:CurrentUserMY<CERTIFICATE_THUMPRINT>)
Si nos fijamos en la consola, podemos pensar que el despliegue se ha eliminado correctamente… Lo cual no es cierto.
 
 
El mensaje de error nos avisa que Windows Azure no puede eliminar un despliegue cuando el mismo se está ejecutando, por lo que tendremos que utilizar el comando anterior, Set-DeploymentStatus, pero esta vez para suspender la ejecución de la máquina virtual.
Set-DeploymentStatus -status suspended -slot <staging/production>
-serviceName <LOWER_CASE_SERVICENAME>
-SubscriptionId <YOUR_SUBSCRIPTION_ID>
-certificate (get-item cert:CurrentUserMY<CERTIFICATE_THUMPRINT>)

¿Cómo podemos saber cuándo ha finalizado un proceso?

Debido a que las acciones que lanzamos se llevan a cabo en segundo plano no podemos saber cuándo ha finalizado el proceso. Por ello, podemos asignarle un comando adicional separado por un pipeline para permanecer en espera hasta que la ejecución finalice. Este comando es Get-OperationStatus -WaitToComplete
Set-DeploymentStatus -status running -slot staging -serviceName <LOWER_CASE_STORAGE_SERVICE_NAME>
-SubscriptionId <YOUR_SUBSCRIPTION_ID>
-certificate (get-item cert:CurrentUserMY<CERTIFICATE_THUMPRINT>) | Get-OperationStatus -WaitToComplete
Si estamos utilizando Windows PowerShell ISE aparecerá una nueva ventana con el progreso:
 
 
Espero que sea de utilidad :)
¡Saludos!

 

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *