101 COSAS QUE PUEDES HACER CON CLOUD OS – Cosa 16

COSA #16: POWERSHELL AZURE

Hola a todos, siguiendo con nuestra serie de “Cosas” hoy les voy a hablar acerca de Powershell Azure y todas las capacidades que nos ofrece esta herramienta.

Como bien lo sabemos, una máquina Windows viene con Powershell y Powershell ISE y si quiero administrar una o varias suscripciones de Azure debo usar la herramienta Powershell Azure.

Hay por supuesto un procedimiento de instalación que incluye usar el Microsoft Web Platform Installer, haciendo clic en este link se descargará un ejecutable ( WindowsAzurePowerShell.3f.3f.3fnew.exe) que tan pronto lo ejecuten los guiará por el proceso de instalación de Powershell Azure.

Una vez se instale, es necesario conectarlo con la o las suscripciones que quieran gestionar.

Existen varios métodos pero el que yo prefiero es uno muy simple, lo primero que hay que hacer es tener abierto el portal de Azure de la suscripción a gestionar, luego abrimos una sesión de Powershell Azure con privilegios:

 

powershell-azure-01

Una vez esté allí debo descargar un certificado digital para establecer una conexión segura hacia Azure. -Recuerden que es importante tener abierto el portal en un navegador-

Para descargar el certificado digital debo escribir el siguiente comando:

Get-AzurePublishSettingsFile

Tan pronto lo ejecute se abrirá una ventana del explorador de Internet con algo similar a lo siguiente:

powershell-azure-02

Observen que se va a descargar un archivo muy pequeño, presionen el botón Save para descargarlo o Save As para descargarlo a la ruta que prefieran, en mi caso lo descargué hacia D:\tmp\Azure.

Ahora es necesario importar el archivo para enlazar a Powershell Azure con la suscripción, para ello escribo lo siguiente:

Import-AzurePublishSettingsFile 'D:\tmp\Azure\Azure Pass-11-15-2014-credentials.publishsettings'

En este ejemplo Azure Pass-11-15-2014-credentials.publishsettings es el archivo que descargué en el paso anterior y que contiene un certificado digital para la conexión segura hacia mi suscripción.

El resultado en mi ejemplo es el siguiente:

powershell-azure-03

Observen que es mi suscripción por defecto.

Como lo mencioné anteriormente, puedo agregar varias suscripciones para gestionar a través de Powershell Azure pero solamente una es la que queda como suscripción por defecto, y me puedo cambiar de suscripción usando Set-AzureSubscription y el nombre de mi suscripción. Toda operación que haga afectará a los recursos (VMs, Sitios Web, BDs, Redes, etc) de mi suscripción por defecto.

si quiero ver información de mi suscripción puedo escribir el comando

Get-AzureSubscription

Y la salida del comando será similar a la siguiente:

powershell-azure-04

Esta suscripción se denomina “Azure Pass”

¡Ahora estamos listos para empezar!

Empecemos por preguntarle al sistema acerca de mis máquinas:

powershell-azure-05

En este ejemplo se ve que tengo 4 máquinas. Todas se encuentran en estado ReadyRole de modo que se encuentran encendidas.

¿Cuál es la diferencia entre ServiceName y Name? Pues bien, Name es el nombre interno que tienen mis máquinas en mi suscripción.

Otros usuarios muy seguramente dentro de su suscripción tienen máquinas denominadas centos01 o Coreos01, pues este es un nombre de referencia. ServiceName corresponde al nombre público de la máquina, el cual es un nombre único. Recuerden que toda máquina de Azure tiene el sufijo cloudapp.net de modo que en mi ejemplo el nombre público de la máquina Coreos01 es Coreos01.cloudapp.net

Observen que no todas las veces coinciden estos nombres, como en el caso de srv2012r2dc (Name) cuyo ServiceName o nombre público es srv2012r2dcabarba.

Quiero empezar con el apagado de una de las máquinas a través de Powershell Azure, para ello usaré el siguiente comando:

Stop-AzureVM -ServiceName "ubuntu00ab" -name "ubuntu00ab"  

Aquí voy a apagar la máquina ubuntu00ab, que previamente listé usando el comando Get-AzureVM

powershell-azure-06 

Me pregunta si estoy seguro puesto que es la última máquina del Cloud Service o contenedor en donde se encuentra la máquina. Si quiero que la IP se conserve para cuando reinicie la máquina debo usar el parámetro –StayProvisioned, de modo que así lo haré:

powershell-azure-07

…Y arranca el proceso.

Una vez termine se me indicará que el apagado se hizo bien:

powershell-azure-08

Si ahora le pregunto por mis máquinas usando Get-AzureVM observen el estado de la máquina que apagué:

powershell-azure-09

Eso muestra que está apagada.

Por supuesto puedo encender la máquina usando un comando muy similar, sólo debo cambiar Stop-AzureVM por Start-AzureVM y dejar los mismos parámetros:

Start-AzureVM -ServiceName "ubuntu00ab" -name "ubuntu00ab"  

Con Azure Powershell puedo hacer cualquier actividad que yo quiera ejecutar, por ejemplo agregarle disco a una máquina que se encuentre en mi suscripción.

Antes de agregarle disco lo primero que debo hacer es determinar mis cuentas de almacenamiento usando el comando Get-StorageAccount:

powershell-azure-10a

En este ejemplo tengo 2 cuentas de almacenamiento –de paso observen que tienen Geo-Replicación habilitada-, voy a usar una de ellas que es donde se encuentra mi máquina para crear allí el nuevo disco.

Ahora lo que debo hacer es establecer la cuenta de almacenamiento por defecto:

powershell-azure-10b

Usé el siguiente comando:

Set-AzureSubscription -SubscriptionName "Azure Pass" CurrentStorageAccountName "portalvhdslnxjs96g6n3f3"

portalvhdslnxjs96g6n3f3 es el nombre de mi cuenta de almacenamiento.

Ahora sí estoy listo para usar el comando Add-AzureDataDisk:

Get-AzureVM "centos01abarba00" -Name "centos01" | Add-AzureDataDisk -CreateNew -DiskSizeInGB 12 -DiskLabel "datos" -LUN 0 | Update-AzureVM

En donde le estoy agregando un disco de 12 GB a mi máquina denominada centos01, que es una Linux CentOS

powershell-azure-10c

Aquí usé Powershell ISE. Si todos los parámetros están bien la máquina tendrá un nuevo disco de 12 GB listo para su uso.

Antes del comando los discos del sistema se veían así:

powershell-azure-10

 Y después… se ven así:

powershell-azure-11

Observen que ya hay un nuevo disco de 12 GB en la máquina.

Hay muchas cosas que se pueden hacer con Powershell Azure, como trabajar con parámetros de Red, Máquinas Virtuales, Discos, Imágenes, Certificados Digitales, etc. Su poder es ilimitado.

Para la lista completa de los CMDLets de Azure haga clic Aquí 

Y ya para terminar les voy a mostrar cómo hacer la recuperación de la contraseña de una máquina Linux usando Powershell Azure. Ello es posible debido a que tanto las VMs Windows como las Linux tienen un agente instalado –su uso es obligatorio en el caso de la plataforma Linux- y a través de este agente se tiene interacción con lo que se denominan las Extensiones.

Hay una Extensión para Linux que se denomina VMAccessForLinux y es la que permite hacer esa recuperación de contraseña, usuario y configuración de SSH.

En el caso de las máquinas Windows la extensión se denomina VMAccessAgent y permite recuperar la contraseña del usuario que se definió al crear la máquina. 

Lo primero que hay que hacer es tener claro a qué máquina se le va a hacer recuperación de la contraseña, para ello podemos usar el comando Get-AzureVM para listar las VMs de mi suscripción:

powershell-azure-12

Yo ya identifiqué a la máquina ubuntu00ab como la máquina a la que quiero recuperar la contraseña. Sé que el usuario es abarba pero olvidé la contraseña de este usuario.

Ahora voy a agregar una variable denominada vm con el nombre de la máquina –tanto el nombre del servicio como el nombre en sí-

powershell-azure-13 

Observen que ya la variable vm contiene el nombre de la máquina a la que le voy a cambiar la contraseña.

Ahora voy a definir el usuario y la nueva contraseña que le voy a asignar a dicho usuario usando:

$UserName = "abarba"
$Password = "MiNuevoPassword$$"
$PrivateConfig = '{"username":"' + $UserName + '", "password": "' + $Password + '”}'

powershell-azure-14

La nueva contraseña de abarba será MiNuevoPassword$ $ en este ejemplo.

Debo ejecutar el comando

$VM.GetInstance().ProvisionGuestAgent = $true

powershell-azure-15

Ahora defino 3 variables más:

$ExtensionName = 'VMAccessForLinux'
$Publisher = 'Microsoft.OSTCExtensions'
$Version = '1.0'

powershell-azure-16

Ya estamos listos para ejecutar el comando de recuperación de la contraseña del usuario abarba:

Set-AzureVMExtension -ExtensionName $ExtensionName -VM $vm -Publisher $Publisher -Version $Version -PrivateConfiguration $PrivateConfig | Update-AzureVM

Como lo ven, Azure Powershell es una herramienta muy poderosa que me permite hacer tareas muy complejas –o sencillas- con mi ambiente de Azure. Los invito a que conozcan la herramienta y la usen.

¡Nos vemos en la próxima!