Руководство. Создание runbook рабочего процесса PowerShell в службе автоматизации

В данном учебнике описана процедура создания Runbook рабочего процесса PowerShell в службе автоматизации Azure. Runbook рабочего процесса PowerShell представляют собой текстовые модули unbook, основанные на рабочем процессе Windows PowerShell. Код для таких модулей runbook можно создавать и редактировать в текстовом редакторе прямо на портале Azure.

Примечание.

Эта статья применима к PowerShell 5.1; PowerShell 7.1 (предварительная версия) и PowerShell 7.2 не поддерживают рабочие процессы.

В этом руководстве описано следующее:

  • Создание runbook рабочего процесса PowerShell
  • Тестирование и публикация runbook
  • Выполнение задания модуля runbook и отслеживание его состояния
  • Добавление аутентификации для управления ресурсами Azure
  • Обновление параметров runbook для запуска виртуальной машины Azure

Если у вас нет подписки Azure, создайте бесплатную учетную запись, прежде чем приступить к работе.

Необходимые компоненты

  • Учетная запись службы автоматизации Azure, которой назначено хотя бы одно управляемое удостоверение. Дополнительные сведения см. в статье Включение управляемых удостоверений.
  • Модули Az: Az.Accounts и Az.Compute, импортированные в учетную запись службы автоматизации. Дополнительные сведения см. в разделе Импорт модулей Az.
  • Две или более виртуальных машин Azure. Это не должны быть рабочие виртуальные машины, так как для работы с этим руководством их нужно остановить и запустить заново.
  • Модуль Azure Az PowerShell, установленный на компьютере. Сведения об установке или обновлении см. в разделе Установка модуля Azure Az PowerShell.

Назначение разрешений управляемым удостоверениям

Назначьте разрешения надлежащему управляемому удостоверению, чтобы оно могло останавливать виртуальную машину. Runbook может использовать управляемое удостоверение учетной записи службы автоматизации, назначаемое пользователем или системой. Здесь приведены инструкции по назначению разрешений обоим видам удостоверений. Для описанных ниже действий используется портал Azure. Если вы предпочитаете использовать PowerShell, см. статью Назначение ролей Azure с помощью Azure PowerShell.

  1. Войдите на портал Azure и перейдите к учетной записи службы автоматизации Azure.

  2. В разделе Параметры учетной записи выберите элемент Удостоверение (предварительная версия).

  3. На вкладке Назначено системой в разделе Разрешения выберите элемент Назначения ролей Azure, чтобы открыть страницу Назначения ролей Azure.

    Selecting Azure role assignments in portal.

  4. Выберите команду + Добавить назначение ролей (предварительная версия), чтобы открыть страницу Добавление назначения ролей (предварительная версия).

    Add role assignments in portal.

  5. Выберите соответствующие значения.

    Свойство Description
    Область действия Область — это набор ресурсов, к которому применяется назначение ролей. В раскрывающемся списке выберите элемент Группа ресурсов.
    Отток подписок Это поле должно быть автоматически заполнено на основе данных подписки.
    Группа ресурсов В раскрывающемся списке выберите группу ресурсов, для которой необходимо предоставить разрешения для удостоверения.
    Роль В раскрывающемся списке выберите элемент Пользователь DevTest Labs.
  6. Выберите команду Сохранить, а затем закройте страницу Назначения ролей Azure, чтобы вернуться на вкладку Назначено системой.

  7. Выберите вкладку Назначено пользователем.

  8. Выберите в списке управляемое удостоверение, назначаемое пользователем, чтобы открыть страницу Управляемое удостоверение.

    Selecting user-assigned managed identity in portal.

  9. Запишите идентификатор клиента для последующего использования.

    Showing Client ID for managed identity in portal

  10. В меню слева выберите элемент Назначения ролей Azure, а затем — команду + Добавить назначение ролей (предварительная версия), чтобы открыть страницу Добавление назначения ролей (предварительная версия).

    Add role assignments in portal for user-assigned identity.

  11. Выберите соответствующие значения.

    Свойство Description
    Область действия В раскрывающемся списке выберите элемент Группа ресурсов.
    Отток подписок Это поле должно быть автоматически заполнено на основе данных подписки.
    Группа ресурсов В раскрывающемся списке выберите группу ресурсов, для которой необходимо предоставить разрешения для удостоверения.
    Роль В раскрывающемся списке выберите элемент Пользователь DevTest Labs.
  12. Выберите команду Сохранить, а затем закройте страницу Назначения ролей Azure, чтобы вернуться на вкладку Назначено пользователем.

Создание модуля Runbook

Сначала создайте простой модуль runbook рабочего процесса PowerShell. Одним из преимуществ рабочих процессов Windows PowerShell является возможность выполнять набор команд параллельно, а не последовательно, как это делается в стандартном скрипте.

Примечание.

В этом выпуске при создании модуля runbook используется новый интерфейс на портале Azure. При выборе колонки >Runbook Create a Runbook откроется новая страница Создания модуля Runbook с применимыми параметрами.

  1. На странице учетной записи службы автоматизации выберите элемент Модули Runbook в области Автоматизация процессов.

    Create PowerShell workflow runbook from portal

  2. Нажмите кнопку + Создать runbook.

    1. Присвойте новому модулю runbook имя. Например, test.
    2. В раскрывающемся меню Тип runbook выберите элемент Рабочий процесс PowerShell.
    3. В раскрывающемся списке Версия среды выполнения выберите 5.1.
    4. Введите соответствующее описание.
    5. Нажмите кнопку создания.

    PowerShell workflow runbook options from portal

Добавление кода в модуль Runbook

Можно либо напрямую ввести код в runbook, либо выбрать командлеты, runbook и ресурсы из элемента управления "Библиотека" и добавить их в runbook с любыми нужными параметрами. Для этого руководства код будет вводиться прямо в runbook.

Созданный модуль runbook пока пустой и содержит лишь обязательное ключевое слово Workflow, имя и фигурные скобки, в которые будет добавлен весь рабочий процесс.

Workflow MyFirstRunbook-Workflow
{
}
  1. Можно использовать ключевое слово Parallel для создания блока сценария с несколькими командами, которые будут запускаться одновременно. Введите следующий код между скобками:

    Parallel {
         Write-Output "Parallel"
         Get-Date
         Start-Sleep -s 3
         Get-Date
     }
    
    Write-Output " `r`n"
    Write-Output "Non-Parallel"
    Get-Date
    Start-Sleep -s 3
    Get-Date
    
  2. Сохраните модуль runbook, выбрав командуСохранить.

Тестирование модуля Runbook

Прежде чем опубликовать модуль runbook и сделать его доступным в рабочей среде, необходимо проверить, правильно ли он работает. Тестирование runbook выполняется по черновой версии и позволяет проверить выходные данные в интерактивном режиме.

  1. Выберите область тестирования, чтобы открыть страницу Тест.

  2. Щелкните Пуск, чтобы начать тестирование. Это действие создает объект задания runbook и отображает его состояние на панели.

    Сначала задание получает состояние "В очереди". Это означает, что задание ожидает доступности рабочей роли runbook в облаке. Как только рабочая роль затребует задание, оно получит состояние "Запуск". Когда модуль runbook начнет выполнение, состояние изменится на "Выполняется".

  3. Когда задание runbook будет выполнено, на странице Тест отобразится результат выполнения. Результат должен выглядеть примерно следующим образом:

    PowerShell workflow runbook parallel output

    Просмотрите выходные данные. Все объекты в блоке Parallel, включая команду Start-Sleep, выполняются одновременно. Те же команды за пределами блока Parallel выполнялись последовательно, как видно по разным меткам даты и времени.

  4. Закройте страницу Тест, чтобы вернуться на холст.

Публикация и запуск модуля Runbook

Модуль runbook, который вы только что создали, все еще находится в режиме черновика. Прежде чем запустить модуль в рабочей среде, его нужно опубликовать. При публикации модуля Runbook существующая опубликованная версия перезаписывается черновой версией. В нашем случае опубликованной версии не существует, поскольку модуль runbook создан только что.

  1. Выберите Опубликовать, чтобы опубликовать runbook, и нажмите кнопку Да в появившемся запросе.

  2. Теперь в поле Состояние отображается значение Опубликовано. Изучите параметры в верхней части экрана, которые позволяют немедленно запустить модуль runbook, запланировать его запуск на определенное время в будущем или создать веб-перехватчик для запуска runbook с помощью HTTP-вызова. Чтобы запустить runbook, выберите Запуск и нажмите кнопку Да в появившемся запросе.

    PowerShell workflow runbook overview page

  3. Откроется страница Задание с заданием runbook, которое вы только что создали. В нашем случае пока оставьте страницу открытой, чтобы следить за ходом выполнения задания. Значение поля Состояние соответствует состояниям при тестировании runbook.

    Screenshot of the runbook Job page.

  4. Как только состояние Runbook изменится на Выполнено, выберите Выходные данные. Результат должен выглядеть примерно так же, как и выходные данные теста.

  5. Закройте страницу Задание, чтобы вернуться на страницу Обзор модуля runbook.

  6. В разделе Ресурсы выберите элемент Задания. Откроется страница со списком всех заданий, созданных этим модулем runbook. Список должен содержать одно задание, так как вы запустили задание только один раз.

  7. Щелкните задание, чтобы открыть ту же страницу Задание, которую вы видели при запуске runbook. Используйте эту страницу для просмотра сведений о любом задании, созданном для runbook. Закройте страницу Задание, чтобы вернуться на страницу Обзор модуля runbook.

Добавление аутентификации для управления ресурсами Azure

Вы протестировали и опубликовали свой модуль runbook, но пока он не выполняет никаких полезных действий. Нужно, чтобы он управлял ресурсами Azure. Модуль не сможет выполнять эту задачу, пока не проведена проверка подлинности с использованием учетных данных для подписки. Runbook будет использовать назначаемое системой управляемое удостоверение учетной записи службы автоматизации для проверки подлинности в Azure, чтобы выполнить действие управления с виртуальной машиной. Runbook можно легко изменить для использования управляемого удостоверения, назначаемого пользователем.

  1. Выберите элемент Обзор, а затем — элемент Правка, чтобы открыть текстовый редактор.

  2. Замените существующий код следующим кодом:

    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>"
    }
    

    Измените переменную $resourceGroup, указав допустимое значение, представляющее вашу группу ресурсов.

  3. Если вы хотите, чтобы модуль runbook выполнялся с управляемым удостоверением, назначаемым системой, оставьте код как есть. Если вы предпочитаете использовать управляемое удостоверение, назначаемое пользователем, сделайте следующее:

    1. Из строки 9 удалите Connect-AzAccount -Identity.
    2. Замените его Connect-AzAccount -Identity -AccountId <ClientId>.
    3. Введите идентификатор клиента, полученный ранее.
  4. Щелкните Сохранить и Тестовая область.

  5. Щелкните Пуск, чтобы начать тестирование. После его завершения вы увидите примерно такие основные сведения из вашей учетной записи. Это действие подтверждает допустимость учетных данных.

    Basic information that confirms credentials.

  6. Закройте страницу Тест, чтобы вернуться на холст.

Добавление кода запуска виртуальной машины

Теперь, когда модуль runbook прошел аутентификацию в подписке Azure, вы можете управлять ресурсами. Добавьте команду для запуска виртуальной машины. Вы можете выбрать любую виртуальную машину в своей подписке Azure. Имя этой машины вы жестко пропишете в runbook.

  1. Добавьте приведенный ниже код в качестве последней строки непосредственно перед закрывающей фигурной скобкой. Замените VMName фактическим именем виртуальной машины.

    Start-AzVM -Name "VMName" -ResourceGroupName $resourceGroup -DefaultProfile $AzureContext
    
  2. Проверьте runbook и убедитесь, что виртуальная машина запущена. Затем вернитесь на холст.

Добавление входных параметров в runbook

Сейчас runbook запускает виртуальную машину, которая жестко прописана в его коде. Он принесет больше пользы, если вы сможете указывать виртуальную машину при запуске runbook. Для поддержки такой возможности добавьте в runbook соответствующие входные параметры.

  1. Замените строку 3, $resourceGroup = "resourceGroupName", следующим кодом:

    Param(
        [string]$resourceGroup,
        [string]$VMName
    )
    
  2. Замените предыдущую команду Start-AzVM следующим кодом:

    Start-AzVM -Name $VMName -ResourceGroupName $resourceGroup -DefaultProfile $AzureContext
    
  3. Проверьте runbook и убедитесь, что виртуальная машина запущена. Затем вернитесь на холст.

Управление несколькими виртуальными машинами одновременно

Можно использовать конструкцию ForEach -Parallel для обработки команд для каждого элемента в коллекции одновременно. Измените код, чтобы модуль runbook стал следующим:

  • Примите коллекцию имен виртуальных машин.
  • Примите параметр для остановки и запуска виртуальных машин.
  • Выполните действия параллельно для всех виртуальных машин.
  1. Замените весь существующий код следующим:

    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'."
       }
       }
    
  2. Если вы хотите, чтобы модуль runbook выполнялся с управляемым удостоверением, назначаемым системой, оставьте код как есть. Если вы предпочитаете использовать управляемое удостоверение, назначаемое пользователем, сделайте следующее:

    1. Из строки 9 удалите Connect-AzAccount -Identity.
    2. Замените его Connect-AzAccount -Identity -AccountId <ClientId>.
    3. Введите идентификатор клиента, полученный ранее.
  3. Выберите команду Сохранить, затем — команду Опубликовать, а затем при появлении запроса выберите ответ Да.

  4. На странице Обзор выберите команду Начать.

  5. Задайте параметры и нажмите кнопку ОК.

    Параметр Описание
    RESOURCEGROUP Введите имя группы ресурсов виртуальных машин.
    Виртуальные машины Введите имена виртуальных машин, используя следующий синтаксис: ["VM1","VM2","VM3"]
    Действие Введите stop или start.
  6. Перейдите к списку виртуальных машин и обновляйте страницу каждые несколько секунд. Обратите внимание, что действие для каждой виртуальной машины выполняется параллельно. Без ключевого слова -Parallel действия будут выполняться последовательно. Хотя виртуальные машины будут запускаться последовательно, каждая виртуальная машина может перейти на этап Работает в немного разные моменты времени в зависимости от ее характеристик.

Очистка ресурсов

Если вы не планируете в дальнейшем использовать runbook, удалите его, выполнив следующие действия:

  1. Перейдите к учетной записи службы автоматизации.
  2. В разделе Автоматизация процессов щелкните Модули Runbook.
  3. Выберите Runbook.
  4. На странице Обзор модуля runbook выберите команду Удалить.

Следующие шаги

С помощью этого учебника вы создали runbook рабочего процесса PowerShell. Дополнительные сведения о runbook в Python 3 см. в следующих статьях: