Поделиться через


Руководство: Создание рабочей книги на Python 3.8

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

  • Создание простого Python-руководства
  • Тестирование и публикация модуля Runbook
  • Запуск и отслеживание состояния задания Runbook
  • Обновите модуль Runbook, чтобы запустить виртуальную машину Azure с параметрами Runbook

Предпосылки

Чтобы завершить работу с этим руководством, вам потребуется:

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

Сначала создайте простой модуль Runbook, который выводит текст Hello World.

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

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

    Кроме того, у вас должна быть управляемая идентификация, которая упоминается в предварительных требованиях. Вы можете проверить это, просмотрев ресурс идентификации в разделе «Параметры учетной записи».

  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, чтобы сделать его доступным в рабочей среде, необходимо проверить его, чтобы убедиться, что он работает правильно. При тестировании рабочей книги вы запускаете её черновую версию и просматриваете результаты в интерактивном режиме.

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

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

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

  4. После завершения задания Runbook отображаются его выходные данные. В этом случае вы увидите Hello World.

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

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

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

  1. Выберите «Опубликовать», чтобы опубликовать Runbook, а затем «Да», когда будет предложено.

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

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

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

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

  5. Откроется область заданий для созданного задания Runbook. Вы можете закрыть эту область, но давайте оставим ее открытой, чтобы вы могли наблюдать за выполнением задания.

  6. Состояние задания отображается в поле "Состояние " в разделе Essentials. Значения, приведенные здесь, соответствуют значениям состояния при тестировании модуля Runbook.

  7. После того как состояние runbook из "Completed", выберите вкладку Выходные данные. На вкладке Выходные данные можно увидеть .

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

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

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

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

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

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

Вы протестировали и опубликовали ваш «runbook», но пока это не выполняет никаких полезных функций. Вы хотите, чтобы это управляло ресурсами Azure. Для управления ресурсами скрипт должен пройти проверку подлинности.

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

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

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

Замечание

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

Манажируемая идентичность

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

  • Чтобы убедиться, что Управляемое удостоверение включено для учетной записи службы автоматизации, перейдите в учетную запись автоматизации>Параметры учетной записи>Удостоверение и установите Состояние на Включено.
  • Управляемое удостоверение имеет назначенную роль для управления ресурсом. В этом примере, чтобы управлять ресурсами виртуальной машины, добавьте роль "Virtual Machine Contributor" в группу ресурсов, которая содержит виртуальную машину. Дополнительные сведения см. в статье "Назначение ролей 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()

При начале работы с Python-руководством, либо в Панели Тестирования, либо как с опубликованным руководством, вы можете ввести значения для параметров на странице Запуск Руководства в разделе Параметры.

Как только вы начнёте ввод значения в первое поле, появится второе поле и так далее, чтобы при необходимости ввести столько значений параметров, сколько потребуется.

Значения доступны для скрипта в массиве sys.argv , как в только что добавленном коде.

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

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

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

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

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

Дальнейшие шаги