¡Hola de nuevo! si te perdiste la primera parte, te dejo un link donde vemos el porque usar Azure desde linea de comandos, y la forma de instalarlo.
En este blog post voy a comentarles el caso de uso más común para un script automatizado en Azure, que es el proceso de apagado o prendido de un recurso de forma programada. Como sabemos, hay recursos en Azure que al pagarse por tiempo de uso, es mejor tenerlos apagados cuando no están en uso. Para no estar prendiendo y apagando estos recursos de modo manual, se utilizan scripts que pueden ser ejecutados en alguna pc que siempre este prendida, una vm en Azure, o simplemente un runbook en Azure Automation. El método que veremos a continuacion sirve para los 2 primeros entornos de ejecucion, aunque lo correcto desde una VM seria usar una Managed Identity, pero ¡eso es tema para otro post! Azure Automation no soporta el login por modo interactivo.
Tomaré como ejemplo el recurso Azure Sql Datawarehouse, que como dijimos antes es un recurso que se paga por tiempo de uso (tiene un costo por almacenamiento, pero es despreciable comparado con el costo del computo cuando está encendido). Otros ejemplos de recursos que son de pago por tiempo son Azure Analysis Services, maquinas virtuales (VMs), clusters de Azure Data Explorer, etc.
Para comenzar abriremos Windows Powershell ISE, que es como un ide (la S en ISE viene por scripting), que viene instalado con Windows que nos simplificara la vida al momento de desarrollar nuestros scripts. Cuando termine de cargar, veremos a la derecha un listado de todos los cmdlets que tenemos a nuestra disposición y más arriba un listado con todos los módulos de Powershell instalados, los que nos interesan son aquellos que empiezan con "AzureRM." ya que son aquellos que nos permiten interactuar con Azure (1). En caso que no lo vean se activa en el menú "Ver". También veremos una parte en blanco (donde escribiremos nuestro script) (2) y una parte en azul, donde básicamente tenemos una ventana de Powershell disponible para probar cmdlets, ver estado de variables, etc.(3)

La mayoría de estos cmdlets necesitan que estemos autenticados contra Azure antes de ejecutarlos. Esto ya lo vimos en el post anterior, pero refresquemos un poco la memoria:
Login-AzureRmAccount
De este modo loguearemos de forma gráfica en Azure (SPOILER: no te pierdas el tercer episodio para ver como loguear ¡sin interacción del usuario!). Luego de que estemos logueados, debemos seleccionar la suscripción sobre la que trabajaremos. No importa si solo tienes una suscripción disponible, siempre es bueno seleccionar una para evitarnos errores innecesarios. Sera necesario que tengas a mano tu SubscriptionId, que es fácil de obtener. En el portal de Azure, tipeá en la barra de búsqueda en la parte superior "Subscriptions" y clickeá el icono parecido a una llave. Esto te llevará a una pagina que lista todas las suscripciones que tienes, con su correspondiente SubscriptionId. Ya con eso, lo recomendable es guardarlo en una variable, y luego llamar a esta variable desde el cmdlet. Ejecutamos lo siguiente para elegir la suscripción:
De este modo, a partir de este punto en el script estaremos logueados y habremos seleccionado la suscripción de Azure sobre la cual vamos a trabajar. Ahora ¡ya podemos usar cualquier comando de la librería AzureRM! Como dije en el comienzo, tomaré como ejemplo el prendido y apagado de un Azure Sql Datawarehouse. Si no sabemos cual es el cmdlet que debemos usar para apagarlo, podemos buscar en el ISE el módulo "AzureRM.Sql". Al seleccionarlo podemos ver todos los comandos de la librería que tienen que ver con el conocido motor de bases de datos. Uno de ellos es$SubsId = "aaaaaaaa-bbbbb-cccc-dddd-eeeeeeeeeeee"
Select-AzureRMSubscription -SubscriptionId $SubsId
Suspend-AzureRmSqlDatabase que es el que usaremos para apagarlo, y otro de los cmdlets que aparecen es Resume-AzureRmSqlData base que utilizaremos para encenderlo.Dando click en alguno de los cmdlets a utilizar y luego en Show Details, podemos ver que parámetros serán necesarios para ejecutar este cmdlet. En este caso tenemos la suerte de que ambos cmdlets que mencione usan los mismos parámetros: DatabaseName, ResourceGroupName y ServerName. Al igual que antes, lo mejor es tener variables con estos datos y luego invocar el cmdlet con estas variables como parámetro:
¡Y listo! Al ejecutar el script con estas 3 partes nos pedirá loguear de forma gráfica, seleccionara una suscripción, y apagara el recurso Azure Sql Datawarehouse que hayamos configurado. Para hacer el encendido del mismo, simplemente cambiaremos el cmdlet de la ultima parte por Resume-AzureRmSqlDatabase:$db_name="NombreDeBaseDatos"
$rs_name="NombreGrupoRecursos"
$sv_name="NombreServidorSQL"
Suspend-AzureRmSqlDatabase -DatabaseName $db_name -ServerName $sv_name -ResourceGroupName $rs_name
Este script puede ser guardado con la extensión .ps1 que indicara a Windows que se trata de un script de powershell. Para su ejecución, basta con abrir un cmd y tipear:$db_name="NombreDeBaseDatos"
$rs_name="NombreGrupoRecursos"
$sv_name="NombreServidorSQL"
Resume-AzureRmSqlDatabase -DatabaseName $db_name -ServerName $sv_name -ResourceGroupName $rs_name
powershell C:/ruta/al/archivo.ps1
Este script puede ser automatizado de forma básica con el programador de tareas de Windows, aunque aun le falta poder loguear sin interacción del usuario para que sea 100% automatizable.
Esto es solo un ejemplo para ilustrar la forma en la que se pueden desarrollar scripts para automatizar todo tipo de tareas en Azure. El procedimiento es siempre el mismo, buscar el modulo dentro de AzureRM que se refiere al recurso que queremos administrar desde nuestro script, buscar dentro de ese modulo el cmdlet que nos sirva y ver que parámetros requiere para su ejecución.
Espero que les sea de utilidad, los casos de uso que tiene esta herramienta son muchísimos y por supuesto dependerán de las necesidades de cada cliente, pero la forma de hacer las llamadas a los cmdlets son siempre similares.
No te pierdas el próximo episodio para ver como automatizar el login al 100%.
Escrito por Martin Zurita