Руководство. Создание модуля Runbook Python 3.8

В этом руководстве описано, как создать модуль Runbook Python 3.8 в служба автоматизации Azure. Модули Runbook Python компилируются в Python 2.7 и 3.8. Вы можете напрямую изменить код модуля Runbook с помощью текстового редактора в портал Azure.

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

Предварительные требования

Для работы с этим учебником необходимы указанные ниже компоненты.

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

Для начала создайте простой модуль runbook, выводящий на экран текст Hello World.

  1. На портале Azure выберите свою учетную запись службы автоматизации.

    Страница учетной записи в службе автоматизации позволяет быстро получить представление о ресурсах, доступных в этой учетной записи. Некоторые ресурсы уже должны быть доступны. Большинство из них — это модули, которые добавляются в каждую новую учетную запись службы автоматизации по умолчанию.

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

  2. Щелкните Модули Runbook в разделе Автоматизация процессов, чтобы открыть список модулей runbook.

  3. Выберите Создать runbook , чтобы создать новый модуль Runbook.

  4. Присвойте модулю Runbook имя MyFirstRunbook-Python.

  5. Выберите Python в поле Тип Runbook.

  6. Выберите Python 3.8 в поле Версия среды выполнения.

  7. Щелкните Создать, чтобы создать модуль Runbook и открыть текстовый редактор.

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

Теперь добавьте простую команду для вывода текста Hello World.

print("Hello World!")

Щелкните Сохранить, чтобы сохранить модуль Runbook.

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

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

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

  2. Щелкните Пуск, чтобы начать тестирование. Этот параметр должен быть единственным включенным параметром.

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

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

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

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

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

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

  2. Если закрыть панель MyFirstRunbook_python , вы вернелись на страницу Модулей Runbook, где должно отобразиться состояние разработкиОпубликовано.

  3. Выберите myFirstRunbook-Python name (Имя MyFirstRunbook-Python ) в списке, и вы вернетесь в область MyFirstRunbook-Python .

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

  4. Щелкните Запустить, а затем нажмите кнопку ОК, когда откроется область Запуск Runbook.

  5. Откроется область Задание с созданным заданием Runbook. Эту панель можно закрыть, но давайте оставим ее открытой, чтобы можно было watch ход выполнения задания.

  6. Состояние задания отображается в поле Состояние в разделе Основные компоненты. Эти значения соответствуют значениям состояния при тестировании модуля Runbook.

  7. Когда для runbook отобразится состояние Завершено, перейдите на вкладку Выходные данные. На вкладке Выходные данные отображается .Hello World

  8. Закройте вкладку Выходные данные .

  9. Перейдите на вкладку Все журналы , чтобы просмотреть потоки для задания runbook. В потоке выходных данных должно отобразиться только Hello World. Однако на этой вкладке могут отображаться другие потоки для задания runbook, такие как Подробно и Ошибка, если модуль Runbook записывает в них данные.

  10. Закройте панель Задания , чтобы вернуться на панель MyFirstRunbook-Python .

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

  12. Если выбрать это задание, откроется та же область Задание, что и при запуске модуля Runbook. С помощью этой области можно вернуться назад и просмотреть сведения о любом задании, созданном для конкретного модуля runbook.

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

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

Рекомендуемый способ проверки подлинности — с помощью управляемого удостоверения. При создании учетной записи служба автоматизации Azure управляемое удостоверение создается автоматически.

Чтобы использовать эти примеры, добавьте следующие пакеты в ресурс Пакетов Python учетной записи службы автоматизации. Вы можете добавить WHL-файлы для этих пакетов с помощью этих ссылок.

При добавлении этих пакетов выберите версию среды выполнения, соответствующую вашему модулю Runbook.

Примечание

Следующий код был протестирован в среде выполнения версии 3.8.

Управляемое удостоверение

Чтобы использовать управляемое удостоверение, убедитесь, что оно включено:

  • Чтобы проверить, включено ли управляемое удостоверение для учетной записи службы автоматизации, перейдите в разделПараметры>учетной записи> службы автоматизацииУдостоверение и установите для параметра Состояние значение Вкл.
  • Управляемому удостоверению назначена роль для управления ресурсом. В этом примере управления ресурсом виртуальной машины добавьте роль "Участник виртуальной машины" в группу ресурсов , содержащую виртуальную машину. Дополнительные сведения см. в статье Назначение ролей Azure с помощью портал Azure

После настройки роли управления удостоверениями можно приступить к добавлению кода.

  1. Откройте текстовый редактор, выбрав Изменить на панели MyFirstRunbook-Python .

  2. Добавьте следующий код для аутентификации в 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)

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

Для работы с виртуальными машинами Azure создайте экземпляр вычислительного клиента Azure для 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.')

В этом фрагменте MyResourceGroup — это имя группы ресурсов, в которую входит виртуальная машина, а TestVM — это имя виртуальной машины, которую требуется запустить.

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

Использование входных параметров

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

Используйте переменную sys.argv, чтобы получить значения параметров. Добавьте следующий код в модуль Runbook сразу после других инструкций import:

import sys

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

Этот код импортирует sys модуль и создает две переменные для хранения имен группы ресурсов и виртуальных машин. Обратите внимание, sys.argv[0]что элемент списка аргументов , является именем скрипта и не вводится пользователем.

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

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

При запуске модуля Runbook Python (со страницы Тест или как опубликованный модуль) можно ввести значения параметров на странице Запуск Runbook в разделе Параметры.

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

Эти значения доступны скрипту в виде массива sys.argv, как показано в ранее добавленном фрагменте кода.

В качестве значения первого параметра введите имя своей группы ресурсов, а в качестве значения второго параметра — имя виртуальной машины, которую необходимо запустить.

Введение значений параметров

Выберите ОК, чтобы запустить Runbook. Будет выполнен модуль Runbook, который запустит указанную виртуальную машину.

Обработка ошибок в Python

Вы также можете использовать указанные далее соглашения для получения разных потоков из runbook Python, например WARNING, ERROR и 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")

Приведенный ниже пример демонстрирует применение этой конвенции в блоке try...except.

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

Дальнейшие действия