Tutorial: Creación de un runbook de flujo de trabajo de PowerShell en Automation
Este tutorial le guiará para crear un runbook de flujo de trabajo de PowerShell en Azure Automation. Los runbooks de flujo de trabajo de PowerShell son runbooks de texto basados en el flujo de trabajo de Windows PowerShell. Puede crear y modificar directamente el código del runbook con el editor de texto en Azure Portal.
Nota:
Este artículo solo es aplicable a PowerShell 5.1. Las versiones posteriores de PowerShell 7+ no admiten flujos de trabajo y no se pueden actualizar los runbooks obsoletos. Se recomienda usar runbooks de texto de PowerShell 7.2 para características avanzadas, como la ejecución de trabajos paralelos. Obtenga más información acerca de las limitaciones de los runbooks de flujo de trabajo de PowerShell.
En este tutorial, aprenderá a:
- Creación de un runbook de flujo de trabajo de PowerShell
- Prueba y publicación del runbook
- Ejecución y seguimiento del estado del trabajo de runbook
- Agregar autenticación para administrar recursos de Azure
- Actualización de los parámetros de runbook para iniciar una máquina virtual de Azure
Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.
Prerrequisitos
- Una cuenta de Azure Automation con al menos una identidad administrada asignada por el usuario. Para obtener más información, consulte Habilitación de identidades administradas.
- Módulos de az:
Az.Accounts
yAz.Compute
se han importado en la cuenta de Automation. Para más información, consulte Importación de módulos Az. - Dos o más máquinas virtuales de Azure. Puesto que detiene e inicia estas máquinas, no deben ser máquinas virtuales de producción.
- El módulo Azure Az de PowerShell instalado en la máquina. Para instalar o actualizar, vea Instalación del módulo Azure Az de PowerShell.
Asignación de permisos a las identidades administradas
Asigne permisos a la identidad administrada apropiada para permitirle detener una máquina virtual. El runbook puede usar la identidad administrada asignada por el sistema de la cuenta de Automation o una identidad administrada asignada por el usuario. Se proporcionan los pasos necesarios para asignar permisos a cada identidad. En los pasos siguientes se usa Azure Portal. Si prefiere usar PowerShell, consulte Asignación de roles de Azure mediante Azure PowerShell.
Inicie sesión en Azure Portal y vaya a su cuenta de Automation.
En Configuración de la cuenta, seleccione Identidad (versión preliminar) .
En la pestaña Asignado por el sistema, en Permisos, seleccione Asignaciones de roles de Azure para abrir la página Asignaciones de roles de Azure.
Seleccione + Agregar asignación de roles (versión preliminar) , para abrir la página Agregar asignación de roles (versión preliminar) .
Seleccione los valores apropiados.
Propiedad Description Ámbito Ámbito es el conjunto de recursos al que se aplica la asignación de roles. En la lista desplegable, seleccione Grupo de recursos. Subscription Este campo se debe rellenar automáticamente con la suscripción. Grupo de recursos En la lista desplegable, seleccione el grupo de recursos sobre el que conceder permisos de identidad. Rol En la lista desplegable, seleccione Usuario de DevTest Labs. Seleccione Guardar y cierre la página Asignaciones de roles de Azure para volver a la pestaña Asignado por el sistema.
Seleccione la pestaña Usuario asignado.
Seleccione la identidad administrada asignada por el usuario en la lista para abrir la página Identidad administrada.
Anote el valor de Id. de cliente para usarlo posteriormente.
En el menú de la izquierda, seleccione Asignaciones de roles de Azure y, después, + Agregar asignación de roles (versión preliminar) para abrir la página Agregar asignación de roles (versión preliminar) .
Seleccione los valores apropiados.
Propiedad Description Ámbito En la lista desplegable, seleccione Grupo de recursos. Subscription Este campo se debe rellenar automáticamente con la suscripción. Grupo de recursos En la lista desplegable, seleccione el grupo de recursos sobre el que conceder permisos de identidad. Rol En la lista desplegable, seleccione Usuario de DevTest Labs. Seleccione Guardar y cierre la página Asignaciones de roles de Azure para volver a la pestaña Asignado por el usuario.
Creación de un runbook
Empiece por crear un runbook de flujo de trabajo de PowerShell sencillo. Una ventaja de los flujos de trabajo de Windows PowerShell es la capacidad para realizar un conjunto de comandos en paralelo en lugar de hacerlo secuencialmente como con un script típico.
Nota
Con la creación de runbooks de la versión, tiene una nueva experiencia en Azure Portal. Al seleccionar la hoja Runbooks>Crear un runbook, se abre la nueva página Creación de un runbook con las opciones aplicables.
En la página de la cuenta de Automation abierta, en Automatización de procesos, seleccione Runbooks.
Seleccione + Crear un runbook.
- Asigne un nombre al runbook. Por ejemplo, prueba.
- En el menú desplegable Tipo de Runbook, seleccione Flujo de trabajo de PowerShell.
- En la lista desplegable Versión del entorno de ejecución, seleccione 5.1.
- Escriba la descripción correspondiente.
- Seleccione Crear.
Agregar código al runbook
Puede escribir el código directamente en el runbook o seleccionar los cmdlets, runbooks y recursos desde el control Biblioteca y agregarlos al runbook con los parámetros relacionados. En este tutorial, escribirá el código directamente en el runbook.
El runbook está vacío actualmente, solo con la palabra clave workflow
necesaria, el nombre del runbook y las llaves que encierran el flujo de trabajo completo.
workflow MyFirstRunbook-Workflow
{
}
Puede usar la palabra clave
Parallel
para crear un bloque de script con varios comandos que se ejecutarán simultáneamente. Escriba el código siguiente entre corchetes:parallel { Write-Output "Parallel" Get-Date Start-Sleep -Seconds 3 Get-Date } Write-Output " `r`n" Write-Output "Non-Parallel" Get-Date Start-Sleep -Seconds 3 Get-Date
Guarde el Runbook, para lo que debe seleccionar Guardar.
Probar el runbook
Antes de publicar el runbook para que esté disponible en producción, debe probarlo para asegurarse de que funciona correctamente. La prueba de un runbook ejecuta su versión de borrador y permite ver la salida de forma interactiva.
Seleccione Panel de prueba para abrir la página Probar.
Seleccione Iniciar para iniciar la prueba. Se crea un trabajo de runbook y su estado se muestra en el panel.
El estado del trabajo se inicia como En cola, que indica que está esperando a que haya disponible un trabajo de runbook en la nube. El estado cambia a Iniciando cuando un trabajo lo solicita. Por último, el estado pasa a En ejecución cuando el runbook comienza a ejecutarse.
Cuando se completa el trabajo del runbook, la página Prueba muestra su salida. La salida debe ser similar a la siguiente:
Revise el resultado. Todo el contenido del bloque
Parallel
, incluido el comandoStart-Sleep
, se ejecuta al mismo tiempo. Los mismos comandos fuera del bloqueParallel
se ejecutaron secuencialmente, como muestran las diferentes marcas de fecha y hora.Cierre la página Probar para volver al lienzo.
Publicar e iniciar el runbook
El runbook que ha creado aún está en modo Borrador. Tiene que publicarlo para poder 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.
Seleccione Publicar para publicar el runbook y Sí cuando se le solicite.
El campo Estado ahora muestra Publicado. Examine las opciones que se encuentran en la parte superior permiten iniciar el runbook ahora, programar una hora de inicio futura o crear un webhook para que el runbook pueda iniciarse mediante una llamada HTTP. Para iniciar el runbook, seleccione Iniciar y Sí cuando se le solicite.
Se abre una página Trabajo para el trabajo de runbook que se ha creado. En este caso, deje abierto el panel para poder ver el progreso del trabajo. El campo Estado coincide con los estados que vio al probar el runbook.
Cuando el estado del runbook aparezca como Completado, seleccione Salida. La salida debería ser similar a la de la prueba.
Cierre la página Trabajo para volver a la página Información general del runbook.
Seleccione Trabajos en Recursos. Esta página enumera todos los trabajos creados por el runbook. Solo debería ver un trabajo en la lista ya que solo ejecutó el trabajo una vez.
Seleccione el trabajo para abrir la misma página Trabajo que vio cuando se inició el runbook. Use esta página para ver los detalles de cualquier trabajo creado para el runbook. Cierre la página Trabajo para volver a la página Información general del runbook.
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. Sin embargo, no puede hacerlo a menos que se autentique con las credenciales de la suscripción. El runbook usa la identidad administrada asignada por el sistema de la cuenta de Automation para autenticarse en Azure, con el fin de realizar la acción de administración en la máquina virtual. El runbook se puede modificar fácilmente para que use una identidad administrada asignada por el usuario.
Seleccione Información general y, después, en Editar para abrir el editor de texto.
Reemplace el código existente por el siguiente:
workflow MyFirstRunbook-Workflow { $resourceGroup = "resourceGroupName" # Ensures you do not inherit an AzContext in your runbook Disable-AzContextAutosave -Scope Process # Connect to Azure with system-assigned managed identity Connect-AzAccount -Identity # set and store context $AzureContext = Set-AzContext -SubscriptionId "<SubscriptionID>" }
Edite la variable
$resourceGroup
con un valor válido que represente el grupo de recursos.Si desea que el runbook se ejecute con la identidad administrada asignada por el sistema, deje el código tal y como está. Si prefiere usar una identidad administrada asignada por el usuario, haga lo siguiente:
- En la línea 9, quite
Connect-AzAccount -Identity
, - Reemplace el valor por
Connect-AzAccount -Identity -AccountId <ClientId>
. - Escriba el identificador de cliente que obtuvo anteriormente.
- En la línea 9, quite
Seleccione Guardar y, luego, Panel de prueba.
Seleccione Iniciar para iniciar la prueba. Cuando termine, verá una salida similar a la siguiente, que muestra información básica de su cuenta. Esta acción confirma que la credencial es válida.
Cierre la página Probar para volver al lienzo.
Incorporación de código para iniciar una máquina virtual
Ahora que el runbook está autenticado en la suscripción a Azure, puede administrar los recursos. Agregue un comando para iniciar una máquina virtual. Puede seleccionar cualquier máquina virtual de su suscripción de Azure. Por ahora, codificará ese nombre en el runbook.
Agregue el código siguiente como última línea inmediatamente antes de la llave de cierre. Reemplace
VMName
por el nombre real de la máquina virtual.Start-AzVM -Name "VMName" -ResourceGroupName $resourceGroup -DefaultProfile $AzureContext
Pruebe el runbook y confirme que la máquina virtual se ha iniciado. Luego, vuelva al lienzo.
Adición de parámetros de entrada al runbook
Actualmente, el runbook inicia la máquina virtual que ha codificado de forma rígida en el runbook. Será más útil si puede especificar la máquina virtual cuando se inicia el runbook. Agregue parámetros de entrada al runbook para proporcionar esa funcionalidad.
Reemplace la línea 3,
$resourceGroup = "resourceGroupName"
, por la siguiente:Param( [string]$resourceGroup, [string]$VMName )
Reemplace el comando
Start-AzVM
anterior por el siguiente:Start-AzVM -Name $VMName -ResourceGroupName $resourceGroup -DefaultProfile $AzureContext
Pruebe el runbook y confirme que la máquina virtual se ha iniciado. Luego, vuelva al lienzo.
Administración simultanea de varias máquinas virtuales
Puede utilizar la construcción ForEach -Parallel
para procesar comandos para cada elemento de una colección simultáneamente. Revise el código para que el runbook ahora:
- Acepte una colección de nombres de máquina virtual.
- Acepte un parámetro para detener o iniciar las máquinas virtuales.
- Realice las acciones en paralelo en todas las máquinas virtuales.
Reemplace el código existente por el siguiente:
workflow MyFirstRunbook-Workflow { param ( [string]$resourceGroup, [string[]]$VMs, [string]$action ) # Ensures you do not inherit an AzContext in your runbook Disable-AzContextAutosave -Scope Process # Connect to Azure with system-assigned managed identity Connect-AzAccount -Identity # set and store context $AzureContext = Set-AzContext -SubscriptionId "<SubscriptionID>" # Start or stop VMs in parallel if ($action -eq "Start") { ForEach -Parallel ($vm in $VMs) { Start-AzVM -Name $vm -ResourceGroupName $resourceGroup -DefaultProfile $AzureContext } } elseif ($action -eq "Stop") { ForEach -Parallel ($vm in $VMs) { Stop-AzVM -Name $vm -ResourceGroupName $resourceGroup -DefaultProfile $AzureContext -Force } } else { Write-Output "`r`n Action not allowed. Please enter 'stop' or 'start'." } }
Si desea que el runbook se ejecute con la identidad administrada asignada por el sistema, deje el código tal y como está. Si prefiere usar una identidad administrada asignada por el usuario, haga lo siguiente:
- En la línea 9, quite
Connect-AzAccount -Identity
, - Reemplace el valor por
Connect-AzAccount -Identity -AccountId <ClientId>
. - Escriba el identificador de cliente que obtuvo anteriormente.
- En la línea 9, quite
Seleccione Guardar, luego Publicar y, finalmente, Sí cuando se le pida confirmación.
En la página Información general, seleccione Iniciar.
Rellene los parámetros y seleccione Aceptar.
Parámetro Descripción RESOURCEGROUP Escriba el nombre del grupo de recursos de las máquinas virtuales. Máquinas virtuales Escriba los nombres de las máquinas virtuales, para lo que debe usar la sintaxis siguiente: ["VM1","VM2","VM3"]
Acción Escriba stop
ostart
.Vaya a la lista de máquinas virtuales y actualice la página cada pocos segundos. Observe que la acción de cada máquina virtual se produce en paralelo. Sin la palabra clave
-Parallel
, las acciones se habrían realizado secuencialmente. Aunque las máquinas virtuales se iniciarán en paralelo, cada una de ellas puede alcanzar la fase de ejecución en momentos ligeramente diferentes en función de sus características.
Limpieza de recursos
Si no va a seguir usando este runbook, elimínelo mediante los siguientes pasos:
- Vaya a su cuenta de Automation.
- En Automatización de procesos, seleccione Runbooks.
- Seleccione el Runbook.
- En la página Información general, seleccione Eliminar.
Pasos siguientes
En este tutorial, ha creado un runbook de flujo de trabajo de PowerShell. Para examinar los runbooks de Python 3, consulte: