Tutorial: Creación de un runbook de Python 3.8

Este tutorial le guiará en la creación de un runbook de Python 3.8 en Azure Automation. Los runbooks de Python se compilan en Python 2.7 y 3.8 Puede editar directamente el código del runbook mediante el editor de texto de Azure Portal.

  • Creación de un runbook de Python sencillo
  • Prueba y publicación del runbook
  • Ejecución y seguimiento del estado del trabajo de runbook
  • Actualización del runbook para iniciar una máquina virtual de Azure con parámetros de runbook

Prerrequisitos

Para completar este tutorial, necesita:

  • Suscripción a Azure. Si aún no tiene ninguna, puede activar las ventajas de la suscripción a MSDN o suscribirse para obtener una cuenta gratuita.

  • Cuenta de Automation para contener el runbook y autenticarse en recursos de Azure. Una identidad administrada se crea automáticamente para usted cuando crea la cuenta de Automation.

  • Una máquina virtual de Azure. Durante este tutorial iniciará y detendrá esta máquina, por lo que no debe ser una máquina virtual de producción.

Crear un runbook

Empieza creando un runbook simple cuya salida sea el texto Hola mundo.

  1. En Azure Portal, abra su cuenta de Automation.

    La página de la cuenta de Automation proporciona una vista rápida de los recursos que hay en esa cuenta. Ya debería tener algunos recursos. Muchas de esos recursos son los módulos que se incluyen automáticamente en una cuenta nueva de Automation.

    También debe tener una identidad administrada habilitada que se mencione en los requisitos previos. Para comprobarlo, vea el recurso Identidad en Configuración de la cuenta.

  2. En Automatización de procesos, haga clic en Runbooks para abrir la lista de runbooks.

  3. Seleccione Crear un Runbook para crear un nuevo runbook.

  4. Asigne al runbook el nombre MyFirstRunbook-Python.

  5. Seleccione Python para Tipo de runbook.

  6. Seleccione Python 3.8 para la versión Runtime.

  7. Seleccione Crear para crear el runbook y abra el editor de texto.

Agregar código al runbook

Ahora, agregue un comando simple para imprimir el texto Hello World.

print("Hello World!")

Seleccione Guardar para guardar el runbook.

Probar el runbook

Antes de publicar el runbook para que esté disponible en producción, puede que quiera probarlo para asegurarse de que funciona correctamente. Al probar un runbook, se ejecuta el borrador y se visualiza la salida de forma interactiva.

  1. Seleccione Panel de prueba para abrir el panel Prueba.

  2. Seleccione Iniciar para iniciar la prueba. Esta debe ser la única opción habilitada.

  3. Se crea un trabajo de runbook y se muestra su estado. El estado del trabajo se inicia como En cola, lo que indica que está esperando a que esté disponible un trabajo de runbook en la nube. Su estado cambia a Iniciando cuando un trabajo de runbook solicita el trabajo. Cuando el runbook comienza a ejecutarse realmente, el estado es En ejecución.

  4. Cuando se complete el trabajo del runbook, se mostrará su resultado. En este caso, debería ver Hello World.

  5. Cierre el panel Prueba para volver al lienzo.

Publicar e iniciar el runbook

El runbook que acaba de crear aún está en modo de borrador. Tiene que publicarlo antes de que pueda ejecutarlo en producción. Al publicar un runbook, se sobrescribe la versión publicada existente con la versión de borrador. En este caso, no tiene una versión publicada aún porque acaba de crear el runbook.

  1. Seleccione Publicar para publicar el runbook y cuando se le solicite.

  2. Si cierra el panel de MyFirstRunbook_python, volverá a la página Runbooks, donde debería ver el Estado de creación en Publicado.

  3. Seleccione el nombre MyFirstRunbook-Python en la lista y volverá al panel MyFirstRunbook-Python.

    Las opciones de la parte superior permiten iniciar el libro de ejecución, visualizarlo, editarlo, programarlo para que se inicie en el futuro, etc.

  4. Seleccione Iniciar y Aceptar cuando se abra el panel Iniciar Runbook.

  5. Se abre un panel Trabajo para el trabajo de runbook que acaba de crear. Puede cerrar este panel, pero déjelo abierto por ahora para que pueda ver el progreso del trabajo.

  6. El estado del trabajo se muestra en el campo Estado en Essentials. Los valores aquí coinciden con los valores de estado al probar el runbook.

  7. Una vez que el estado del runbook se muestre Completado, seleccione la pestaña Salida. En la pestaña Salida, puede ver Hello World.

  8. Cierre la pestaña Salida.

  9. Seleccione la pestaña Todos los registros para ver los flujos del trabajo del runbook. Solo debería ver Hello World en el flujo de salida. No obstante, en esta pestaña se pueden mostrar otros flujos de un trabajo de runbook, como Error y Modo detallado, si el runbook escribe en ellas.

  10. Cierre el panel Trabajos para volver al panel de MyFirstRunbook-Python.

  11. Seleccione el recurso Trabajos para abrir la página de recursos Trabajos para este runbook. Esta página enumera todos los trabajos creados por este runbook. Solo debería ver un trabajo en la lista ya que solo ejecutó el trabajo una vez.

  12. Puede seleccionar este trabajo para abrir el mismo panel Trabajo que vio al iniciar el runbook. Esta panel permite volver atrás en el tiempo y ver los detalles de cualquier trabajo que se creó para un runbook determinado.

Agregar autenticación para administrar recursos de Azure

Ha probado y publicado su runbook, pero hasta ahora no hace nada útil. Quiere que administre recursos de Azure. Para administrar recursos, el script tiene que autenticarse.

La manera recomendada de autenticarse es con identidad administrada. Al crear una cuenta de Azure Automation, se crea automáticamente una identidad administrada para usted.

Para usar estos ejemplos, agregue los siguientes paquetes en el recurso Paquetes de Python de la cuenta de Automation. Puede agregar los archivos WHL para estos paquetes con estos vínculos.

Cuando agregue estos paquetes, seleccione una versión de runtime que coincida con su runbook.

Nota

El siguiente código se probó con la versión 3.8 del runtime.

Identidad administrada

Para usar la identidad administrada, asegúrese de que está habilitada:

  • Para comprobar si la identidad administrada está activada para la cuenta de Automation, vaya a su cuenta de Automation>Configuración de la cuenta>Identidad y establezca el Estado en Activado.
  • La identidad administrada tiene un rol asignado para administrar el recurso. En este ejemplo de administración de un recurso de máquina virtual, agregue el rol "Colaborador de máquina virtual" en el grupo de recursos de que contiene la Máquina Virtual. Para obtener más información, consulte Asignación de roles de Azure mediante Azure Portal.

Con el rol de administración de identidad configurado, puede empezar a agregar código.

  1. Abre el editor de texto seleccionando Editar en el panel MyFirstRunbook-Python3.

  2. Agregue el siguiente código para autenticarse en Azure:

#!/usr/bin/env python3
from azure.identity import DefaultAzureCredential
from azure.mgmt.compute import ComputeManagementClient

SUBSCRIPTION_ID="YOUR_SUBSCRIPTION_ID"

azure_credential = DefaultAzureCredential()

import os
import requests
# printing environment variables
endpoint = os.getenv('IDENTITY_ENDPOINT')+"?resource=https://management.azure.com/"
identityHeader = os.getenv('IDENTITY_HEADER')
payload={}
headers = {
'X-IDENTITY-HEADER' : identityHeader,
'Metadata' : True
}
response = requests.get(endpoint, headers)
print(response.text)

Agregar código para crear un cliente de Compute de Python e iniciar la máquina virtual

Para trabajar con máquinas virtuales de Azure, cree una instancia del cliente de Azure Compute para Python.

# Initialize client with the credential and subscription.
compute_client = ComputeManagementClient(
    azure_credential,
    SUBSCRIPTION_ID
)

print('\nStart VM')
async_vm_start = compute_client.virtual_machines.begin_start(
    "MyResourceGroup", "TestVM")
async_vm_start.wait()
print('\nFinished start.')

Donde MyResourceGroup es el nombre del grupo de recursos que contiene la máquina virtual y TestVM es el nombre de la máquina virtual que quiere iniciar.

Pruebe y ejecute el runbook de nuevo para constatar que inicia la máquina virtual.

Usar parámetros de entrada

Actualmente, el runbook usa valores codificados de forma rígida en los nombres del grupo de recursos y de la máquina virtual. Ahora vamos a agregar código para obtener estos valores de parámetros de entrada.

Use la variable sys.argv para obtener los valores de parámetro. Agregue el siguiente código al runbook, inmediatamente después de las demás instrucciones import:

import sys

resource_group_name = str(sys.argv[1])
vm_name = str(sys.argv[2])

Este código importa el módulo sys y se crean dos variables para contener los nombres del grupo de recursos y de la máquina virtual. Observe que el elemento de la lista de argumentos, sys.argv[0], es el nombre del script y no lo especifica el usuario.

Ahora, puede modificar las dos últimas líneas del runbook para usar los valores de parámetro de entrada en lugar de los valores codificados de forma rígida:

async_vm_start = compute_client.virtual_machines.begin_start(
    resource_group_name, vm_name)
async_vm_start.wait()

Al iniciar un runbook de Python (ya sea en el panel Prueba o como runbook publicado), se pueden especificar los valores de los parámetros en la página Iniciar Runbook, en Parámetros.

Cuando empiece a escribir un valor en el primer cuadro, aparecerá un segundo cuadro (y así sucesivamente) para que pueda especificar varios valores de parámetro si es necesario.

Los valores estarán disponibles para el script en la matriz sys.argv como en el código que se acaba de agregar.

Escriba el nombre del grupo de recursos como valor del primer parámetro y el nombre de la máquina virtual que se va a iniciar como valor del segundo parámetro.

Enter parameter values

Seleccione Aceptar para iniciar el runbook. El runbook se ejecuta e inicia la máquina virtual que se ha especificado.

Control de errores en Python

También puede usar las siguientes convenciones para recuperar varios flujos de los runbooks de Python, como los flujos WARNING, ERROR y DEBUG.

print("Hello World output")
print("ERROR: - Hello world error")
print("WARNING: - Hello world warning")
print("DEBUG: - Hello world debug")
print("VERBOSE: - Hello world verbose")

En el ejemplo siguiente se muestra esta convención utilizada en un bloque try...except.

try:
    raise Exception('one', 'two')
except Exception as detail:
    print ('ERROR: Handling run-time error:', detail)

Pasos siguientes