Apagado Diario de Máquinas Virtuales con Azure Automation (How To)
ACTUALIZACION (Jun/12/2018) Pueden encontrar en procedimiento actualizado para la Arquitectura ARM en el enlace:
https://blogs.technet.microsoft.com/latampts/2018/06/12/apagar-prender-maquinas-virtuales/
En la actualidad, muchos de nosotros hemos creado máquinas virtuales para demos y pruebas, y esto nos puede crear altos costos en nuestras subscripciones. Por ejemplo, si tenemos Máquinas Virtuales (MVs) en la region Oeste de EU con discos SSD, 2 procesadores, 7 GB de RAM y 100 GB de disco, el costo aproximado es de $208.32 al mes. Podemos calcular el precio exacto en la calculadora que nos ofrece el portal en https://azure.microsoft.com/en-us/pricing/calculator/ . El uso de nuestras máquinas virtuales en estos ambientes puede hacerse costoso, sin embargo, podemos reducir esos costos de las MVs reduciendo el tiempo que están encendidas con un Apagado Automático.
Esta publicación está diseñada para mostrarles cómo crear un apagado automatizado de sus máquinas virtuales en Microsoft Azure.
Paso 1: Crear un nuevo usuario en Active Directory
Los scripts de PowerShell están diseñados específicamente para la administración del sistema. Para correr un script de PowerShell, necesitamos tener un Usuario asociado a uno de los directorios. Es conveniente tener un usuario para esta funcionalidad.
1.- Abra el portal de Azure y haga clic en ACTIVE DIRECTORY. Azure Active Directory es una solución en la nube de identidad y control de acceso que provee capacidades completas de administración de usuarios.
2.- De la lista de directorios, seleccionamos nuestro directorio, en este caso es el de omisión (Default).
3.- Dentro del Directorio, hacemos clic en USERS.
4.- En la barra de comandos, hacemos clic en “ADD USER”.
5. Aparece una nueva pantalla “Tell us about this user”. En “TYPE OF USER” seleccione “New user in your organization”.
6.- En “USER NAME” capture un nombre que considere apropiado, en este caso usare “PowerShell”.
7.- Del menú, seleccione su dominio, en este caso selecciono onmicrosoft.com.
8.- Oprima la flecha para continuar.
9.- En la página “user profile” Capture el nombre y apellido, en nuestro caso “Power”, “Shell”.
10.- En “Display Name” capture el nombre que desplegara, en nuestro caso “PowerShell”
11.- En el campo de ROLE, seleccione “Global Admin” del Menú. Este rol tiene acceso a todas las funciones administrativas y es quien puede asignar otros administradores. La persona que crea la cuenta de Azure tiene la función de “Global Administrator”.
12.- En el campo “ALTERNATE EMAIL ADDRESS” proporcione un email adicional que posea. Esta dirección se utiliza para notificaciones importantes, incluyendo re asignación de contraseñas, por lo cual, el usuario debe tener acceso a este correo.
13.- NO seleccione marca en MULTI-FACTOR AUTENTICATION, debido a que esta cuenta será utilizada para Automatizaciones. Microsoft Azure Multi-Factor Autentication agrega una verificación adicional a las aplicaciones en la nube.
14.- Haga clic en la flecha para continuar.
15.- En la página de “Get temporary password”, haga clic en “créate” para generar una contraseña temporal que necesitara cambiar después.
16.- Su usuario obtendrá una contraseña temporal, en este caso “Bosa4887“. Vamos a copiar esta contraseña generada, ya que la vamos a necesitar para firmarnos por primera vez y cambiarla.
17.- Haga clic en la Señal de terminado.
18.- Ya se nos muestra el nuevo usuario con el nombre PowerShell en el directorio de omisión.
19.- Para cambiar la contraseña de nuestro nuevo usuario “PowerShell”, vamos a microsoftonline.com
20.- Fírmese en Office 365. Teclee, la dirección de email del nuevo usuario, en este caso “PowerShell@mcarroamsn.onmicrosoft.com” y copie la contraseña
21.- Haga clic en Sign In.
22.- En el campo de contraseña actual, capture la contraseña temporal, y en “New Password” capture una nueva contraseña, confírmela en el segundo campo.
23.- Haga clic en “Update Password and sign in”.
Paso 2: Seleccionar al co-administrador para la suscripción.
Ya que creamos el nuevo usuario <PowerShell>, necesitamos asignarlo como co-administrador. Los co-administradores tienen acceso completo a los servicios de la suscripción.
Para asignar a <PowerShell> como co administrador haremos lo siguiente:
1.- Regrese a su portal de Azure y haga clic en “Settings”.
2.- Una vez en Settings, haga clic en “ADMINISTRATORS”.
3.- En el menú de la base de pantalla, haga clic en “ADD”.
4.- Aparece una nueva pantalla de “Specify a co-administrator for subscriptions”. En esta pantalla capturamos la dirección de email del nuevo co administrador, en nuestro caso <PowerShell@mcarroamsn.onmicrosoft.com>
5.- En el área de suscripción, seleccionamos la suscripción en la que será co administrador, en nuestro ejemplo <MCarroTest>.
6.- Haga clic en la señal te terminado para concluir.
7.- Ya se muestra PowerShell como co administrador en la suscripción.
Paso 3: Agregar una cuenta de Automatización.
Ya que tenemos el co administrador creado, podemos crear la cuenta de Automatización. La automatización en Microsoft Azure nos ayuda a automatizar las tareas de administración repetitivas. La galería de Runbooks de Automatización nos da ejemplos, utilerías, y procesos de escenarios a nuestra disposición para acelerar nuestra implementación de tareas.
Las cuentas de Automatización creadas en el Portal Clásico se pueden administrar en ambos portales. Una vez que se crea la cuenta, no hay diferencia en como crea y administra los recursos de la cuenta. En este ejercicio continuaremos trabajando en el Portal Clásico.
1.- En el portal, haga clic en “AUTOMATION”.
2.- En el menú de la base del portal, haga clic en CREATE.
3.- Obtendrá una pantalla de “Add a New Automation Account”. Capture un nombre para su Cuenta en “ACCOUNT NAME”. En nuestro caso es “Procesos-Demo”
4.- Seleccione una Región,
5.- Haga clic en la señal de terminado.
6.- Podemos ver que la cuenta de Automatización “Procesos-Demo” ha sido creada.
Paso 4: Creación de credenciales de la cuenta de Automatización.
Ya que creamos la cuenta de automatización, necesitamos definir las credenciales que utilizara antes de crear los Runbooks de apagado de máquinas virtuales. Se requiere una credencial para autenticar el proceso en la suscripción que contiene las MVs. La página de ASSETS o valores de la cuenta de automatización presenta diferentes valores o características, incluyendo conexiones, credenciales, agendas y variables que pueden utilizarse en los procesos o “Runbooks”. El valor de credencial de automatización contiene el objeto de Credenciales de Usuario y contraseña para uso de PowerShell
1.- En la página de Automatización, haga clic en nuestra cuenta de Automatización “Procesos-Demo”.
2.- Una vez en “Procesos-Demo”, hacemos clic en “ASSEST” en la parte superior.
3.- Del menú en la base, hacemos clic en “ADD SETTING”.
4.- Obtenemos una nueva pantalla “Select the type of setting you want to add”. En esta lista de opciones, seleccionamos ADD CREDENTIAL.
Las credenciales pueden ser una combinación de Usuario y Contraseña que pueden ser usados por PowerShell o un certificado que se sube a la cuenta de Automatización. Las propiedades de las credenciales pueden ser utilizadas en el proceso o “Runbook”.
5.- En la primera pantalla de “ADD CREDENTIAL”, seleccione “Windows PowerShell Credential” en CREDENTIAL TYPE
6.- Capture un nombre apropiado en NAME. En este caso pondremos “PowerShell Credentials”.
7.- En DESCRIPTION, captura la descripción que considere apropiada que le recuerde para que se usan las credenciales. En este caso pondremos “Para scripts de PowerShell”.
8.- De clic en la fecha para continuar.
9.- En la segunda pantalla de credenciales, En USER NAME capture la dirección de email del nuevo usuario que creamos “PowerShell@mcarroamsn.onmicrosoft.com”
10.- Teclee y confirme la contraseña que creamos anteriormente e el paso 1-22.
11.- Haga clic en la señal de terminado.
12.- Ya podemos ver nuestras Credenciales “PowerShell Credentials” en la lista de valores o “Assets” para poderlo utilizar en nuestros procesos.
Paso 5: Creación de Runbook.
Una vez creadas las Credenciales “PowerShell Credentials”, ya podemos crear nuestro Runbook, el cual es básicamente un script encapsulado de PowerShell en un objeto de tipo “Flujo de trabajo” que nos ayuda a trabajar. Un Runbook es un conjunto de tareas que ejecutan procesos automatizados en Azure. El portal de Microsoft Azure provee 2 métodos básicos para crear un Runbook: Quick Create y desde Galería. En este ejercicio vamos a tomarlo de la Galería.
1.- En la cuenta de Automatización <Procesos-Demo>, haga clic en RUNBOOKS.
2.- Del menú en la base a la izquierda, haga clic en NEW
3.- Aparecerá una pantalla donde seleccionamos RUNBOOK.
4.- Después de RUNBOOK, Seleccionamos FROM GALLERY
5.- En la página de selección de Runbook, podemos filtrar los Runbooks creados por Microsoft o la Comunidad, así como POWERSHELL WOKFLOWS o POWERSHELL SCRIPTS. En la pantalla vemos que hay más de 200 Runbooks pre configurados para escoger. Hacemos clic en “VM Lifecycle Management” a la izquierda de la ventana y buscamos el Runbook que detiene las máquinas virtuales
6.- Al seleccionar “VM Lifecycle Management”, hagamos clic en “Azure Automation Workflow to Schedule stopping of all Azure Virtual Machines” en el centro de la pantalla.
7.- Haga clic en la flecha para continuar.
8.- En la página “Review Runbook definition”, podemos leer la información y decidir si es lo que necesitamos.
9.- Haga clic en la flecha para continuar.
10.- En la página de “Enter Runbook details”, en el campo de “RUNBOOK NAME” cambiaremos el nombre a “Stop-AllAzureVM-RunBook”
11.- Seleccione la cuenta de Automatización “Procesos-Demo” y la suscripción (en este caso MCarroTest). La REGION se llena automáticamente.
12.- Haga clic en la señal Terminado.
13.- Al terminar el proceso, veremos nuestro Runbook <Stop-AllAzureVM-RunBook> creado con el script de PowerShell que detendrá las máquinas virtuales.
Paso 6: Agregar agenda al Runbook.
Después de crear el Runbook <Stop-AllAzureVM-RunBook> que incluye el script de PowerShell, necesitamos crear una agenda de ejecución, ya sea para una fecha específica, o recurrentemente. No es necesaria la intervención manual para iniciar los procesos.
Aunque las agendas son valores “ASSETS”, difieren un poco de los otros “Assets” tales como conexiones, certificados y variables. La diferencia es que nunca llamamos una agenda o calendario desde código script. En vez de eso, enlazamos una agenda a un Runbook. Un “Asset” de Agenda (Schedule) determina cuando corren los Runbooks asociados a él. Una agenda dispara la ejecución de un Runbook cuando se activa. Al momento de publicar el Runbook, en la pestaña de “Schedule” escogemos asociarlo a una nueva agenda. Los Runbooks en estado “Draft” no pueden asociarse a una agenda.
Las agendas son un mayor nivel de automatización además del script. Es como automatizar la automatización.
1.- En la página de la cuenta de automatización “procesos-demo”, haga clic en ASSETS.
2.- En el menú de la base, haga clic en ADD SETTING
3.- Obtenemos una nueva página de selección de tipo de “setting”. En esta pantalla, seleccionamos ADD SCHEDULE
4.- En la primera página de “Configure Schedule” capture un nombre en NAME, en este caso pondremos “Stop-VM Schedule”.
5.- Capture una descripción adecuada en DESCRIPTION
6.- Haga clic en la flecha para continuar.
7.- En la segunda pantalla de “Configure Schedule”, en TYPE, podemos seleccionar UNA VEZ, POR HORA o DIARIO. En nuestro caso, seleccionamos DIARIO. Dependiendo de su selección cambiaran los demás campos de la pantalla.
8.- En START TIME, seleccione una fecha y hora, en nuestro caso escogemos <2016-08-08 y 20:00>. Opcionalmente, podemos seleccionar fecha de expiración y seleccionar fecha de término de ejecución. También podemos capturar la recurrencia en días.
9.- Haga clic en la señal de terminado.
10.- Ahora ya podemos ver que nuestro valor de < > esta listado en nuestra cuenta de Automatización < >, para ejecutar el Runbook < > automáticamente.
Paso 7: Probar y publicar el Runbook.
Antes que podamos publicar un Runbook, necesitamos probarlo para asegurarnos que está listo para usarse. Una corrida de prueba de un Runbook ejecuta todo el código y sus tareas, es conveniente probarlos con parámetros que contengan ambientes de pruebas, cuando el Runbook esté listo, podemos cambiarlo al ambiente de producción.
Vamos a promover el Runbook de estatus “draft” a “publicado” después de probarlo y asegurarnos que trabaja correctamente. Si posteriormente queremos modificarlo, lo podemos regresar a “draft” editarlo, y publicarlo nuevamente. Mientras editamos un Runbook, la versión publicada seguirá en ejecución.
1.- En la página de la Cuenta de Automatización “procesos-demo” haga clic en RUNBOOKS
2.- Haga clic en el Runbook que desea publicar, en este caso “Stop-AllAzureVM-RunBook”.
3.- Dentro de “stop-allazurevm-runbook”, haga clic en AUTHOR. Esto automáticamente pone el Runbook en modo “Draft” para la versión que estamos editando. Una buena práctica al hacer Runbooks es hacer módulos de tareas sencillas para poder re usarlas e insertarlas después en otros Runbooks.
4.- Ahora, en script, llenamos el parámetro -Name con el nombre del componente PSCredential que tiene acceso a nuestra suscripción. En nuestro caso “PowerShell Credentials”, así que en la línea 32 reemplazamos el texto “myPScredName” con “PowerShell Credentials”. El flujo del script llama al cmdlet Get-AutomationPSCredential para autenticarse.
5.- Este comando regresa un objeto tipo credencial que se pasa al comando Add-AzureAccount. Que después se usara para las actividades posteriores.
6.- Ahora, para probar las credenciales, cortamos las líneas hasta el fin del script (líneas 37 a 64) y las pegamos en el clipboard para usarlo después.
7.- Teclee Write-Output $Cred en línea 36 para probar las credenciales. Este comando manda el objeto al siguiente comando. Si es el último comando, del objeto se despliega en la consola.
De la barra de comandos en la base, haga clic en TEST para correr el código y ver la salida.
8.- Una vez completado, recibiremos la información básica de la cuenta en el OUTPUT PANE. Esto confirma que la credencial es válida.
9.- Ahora que ya hemos probado exitosamente las credenciales y vimos la suscripción en el OUTPUT PANE, eliminamos el “Write-Output $Cred” de la línea 36.
10.- Y regresamos todas las líneas que habíamos cortado en el paso 7-6 (Líneas 37 a 64).
11.- Ahora, llenamos el nombre de nuestra suscripción en el parámetro -SubscriptionName, en nuestro caso “MCarroTest” en la línea 39
12.- Ahora, el script detendrá todas las MVs, pero si no queremos que detenga todas las máquinas virtuales, digamos que queremos que el controlador de dominio o algún otro equipo corra todo el tiempo. En ese caso, cambiaremos un poco el script y agregaremos una condición “If ($vm.ServiceName -ne ‘domain-mra’)” para mantener el Controlador de Dominio corriendo.
13.- En el menú de comandos en la base del portal, haga clic en TEST para correr el script.
14.- Vamos a salvar el script ahora que ya lo probamos y corre adecuadamente. Para salvarlo, vamos a AUTHOR dentro de “Stop-AllAzureVM-Runbook” y del menú de la base, damos clic en SAVE.
15.- El Runbook que salvamos, aun está en “Draft”. Para correrlo en producción, debemos publicarlo. Cuando publicamos un Runbook, sobrescribimos la versión publicada con la de “Draft”. En este caso, no tenemos una versión publicada aún. Los Runbooks en modo “Draft” solo pueden correr en pruebas. Para publicar el script en “Draft”, vamos al menú de la base del portal y damos clic en “Publish”.
16.- Naveguemos de regreso al panel de RUNBOOKS en la cuenta de automatización “procesos-demo” para ver el Runbook publicado.
Paso 8: Asociar el Runbook con una agenda existente.
Ahora que ya hemos publicado el Runbook para detener las máquinas virtuales, necesitamos asociarlo a una agenda o calendarización, para que detenga las maquinas cuando lo necesitemos. Lo podemos asociar a una o más agendas o “Schedules”.
1.- En la cuenta de automatización, en nuestro caso “procesos-demo”, hacemos clic en el Runbook que queremos calendarizar, en este caso “Stop-AllAzureVM-Runbook”.
2.- En la página de “Stop-AllAzureVM-RunBook” damos clic en SCHEDULE
3.- Aun no tenemos un calendario Asociado a nuestro Runbook. Podemos crear un Nuevo calendario o agenda desde aquí y asociarlo al Runbook, o podemos asociarlo a una agenda ya existente. Hacemos clic en LINK TO AN EXISTING SCHEDULE.
4.- Obtenemos una nueva pantalla para seleccionar una agenda. En esta pantalla veremos una lista de todas las agendas (Schedules) existentes. Seleccionamos “Stop-VM-Schedule” que creamos anteriormente.
5.- Damos clic en la señal de terminado después de seleccionar la agenda.
6.- Ahora vemos que el Runbook “StopAllAzureVM-Runbook” está asociado a la agenda “Stop-VM-Schedule”. También vemos la próxima vez que va a ejecutarse y si está habilitada la agenda.
Lo Logramos.
Ahora que tenemos tantas maneras de crear y administrar máquinas virtuales en la nube de Microsoft Azure, tenemos el margen de que nuestras máquinas virtuales se queden prendidas. Con el servicio de Automatización podemos ahorrar tiempo y dinero eliminando tareas repetitivas y mejorando la eficiencia de nuestras suscripciones. Como vimos, podemos utilizar Scripts de PowerShell que ya están en la galería para obtener resultados más rápidos. Estas tareas también pueden ser útiles en ambientes de producción donde se requiera tener los equipos disponibles en horarios de oficina y agendemos apagarlos y prenderlos de acuerdo a ese horario y ahórrale dinero a nuestros clientes. Si tomamos el ejemplo de la máquina virtual al principio de este blog, nos costaría $208.32 al mes, sin embargo, si solo la prendiéramos en horas de oficina (8 horas diarias entre semana) el costo se reduciría a $47.04, lo que representa un ahorro del 80%!
Saludos.
Mariano Carro
Comments
- Anonymous
March 03, 2017
Muchas gracias Mariano por todo ese apoyo, pero comence a realizar el laboratorio y las cuentas de actualización se muestran en el portal ARM. Agradezco actualizar la guia para esta nueva plataforma- Anonymous
June 12, 2018
Buenas tardes Mauricio. Puedes encontrar la nueva guia en el enlace: https://blogs.technet.microsoft.com/latampts/2018/06/12/apagar-prender-maquinas-virtuales/
- Anonymous
- Anonymous
June 21, 2017
The comment has been removed