Пакетный пул Azure: как использовать пользовательский образ виртуальной машины через Python?

Я хочу создать свой пул с помощью Python. Я могу сделать это при использовании образа (Ubuntu Server 16.04) из магазина, но я хочу использовать собственный образ (но также и Ubuntu Server 16.04) - тот, который я подготовил с желаемыми библиотеками и настройками.

Вот как я создаю свой пул:

new_pool = batch.models.PoolAddParameter(
      id=pool_id,
      virtual_machine_configuration=batchmodels.VirtualMachineConfiguration(
          image_reference=image_ref_to_use, # ??
          node_agent_sku_id=sku_to_use),
      vm_size=_POOL_VM_SIZE,
      target_dedicated_nodes=_POOL_NODE_COUNT,
      start_task=start_task,
      max_tasks_per_node=_CORES_PER_NODE
)

Я представляю, что мне нужно использовать batch.models.ImageReference() для создания ссылки на изображение ... но я не знаю, как это использовать.

Да, я проверил документацию, в котором говорится следующее:

Ссылка на образ из Marketplace виртуальных машин Azure или настраиваемый образ виртуальной машины Azure.

В нем перечислены параметры как:

  • издатель (ул.)
  • предложение (ул.)
  • sku (str)
  • версия (str)
  • virtual_machine_image_id (str)

Однако параметр virtual_machine_image_id не существует ... Другими словами, batch.models.ImageReference(virtual_machine_image_id) недопустим.

Как я могу использовать собственное изображение для моего пула?

ОБНОВЛЕНИЕ

Итак, я понял, как использовать собственный образ ... оказывается, что независимо от того, сколько раз я удаляю библиотеки azure python и переустанавливаю их, virtual_machine_image_id никогда не будет доступен.

Затем я пошел сюда и загрузил zip-архив. Открыл, проверил класс ImageReference и, черт возьми, virtual_machine_image_id был доступен в функции __init__ класса ImageReference. Затем я загрузил колесо Python и использовал pip для его установки. Бум, это сработало.

По крайней мере, я так думал.

Затем мне пришлось бороться, пытаясь выяснить, что такое node_agent_sku_id ... только вручную создав пул и увидев поле Batch Node Agent SKU ID, мне удалось его найти.

Теперь борюсь с аутентификацией ...

Я получаю следующую ошибку:

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

AuthenticationErrorDetail: указанный тип аутентификации SharedKey не разрешен, если внешние ресурсы типа Compute связаны.

azure.batch.models.batch_error.BatchErrorException: {'lang': 'en-US', 'value': 'Серверу не удалось аутентифицировать запрос. Убедитесь, что значение заголовка авторизации сформировано правильно, включая подпись. \ NRequestId: f8c1a3b3-65c4-4efd-9c4f-75c5c253f992 \ nTime: 2017-10-15T20: 36: 06.7898187Z '}

Из ошибки я понимаю, что мне нельзя использовать SharedKeyCredentials:

credentials = batchauth.SharedKeyCredentials(_BATCH_ACCOUNT_NAME,
                                             _BATCH_ACCOUNT_KEY)

batch_client = batch.BatchServiceClient(
    credentials,
    base_url=_BATCH_ACCOUNT_URL)

Что я должен сделать?

ОБНОВЛЕНИЕ 2

OK. Пользователь fpark сообщил мне, что мне нужно использовать:

from azure.batch import BatchServiceClient
from azure.common.credentials import ServicePrincipalCredentials

credentials = ServicePrincipalCredentials(
    client_id=CLIENT_ID,
    secret=SECRET,
    tenant=TENANT_ID,
    resource="https://batch.core.windows.net/"
)
    batch_client = BatchServiceClient(
    credentials,
    base_url=BATCH_ACCOUNT_URL
)

для аутентификации. К сожалению, приведенный выше код описан здесь и не ссылается на то, что CLIENT_ID эт. все.

Затем мне удалось найти еще одну часть документации, которая выглядит примерно так же: https://azure-sdk-for-python.readthedocs.io/en/v2.0.0rc3/resourcemanagementauthentication.html

Эта страница указала мне на другую веб-страницу: https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-create-service-principal-portal

Я последовал этому руководству и наконец смог аутентифицировать свое приложение ...

ПРИМЕЧАНИЕ

При создании приложения в руководстве вы узнаете:

Укажите имя и URL-адрес приложения. Выберите веб-приложение / API или собственное в зависимости от типа создаваемого приложения. После установки значений выберите «Создать».

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


person pookie    schedule 15.10.2017    source источник
comment
Можете ли вы опубликовать версию вашего завершенного рабочего кода?   -  person RedPanda    schedule 01.11.2017
comment
Это очень полезно - как вы выяснили, что вам нужно добавить / subscriptions / перед именем изображения?   -  person RedPanda    schedule 02.11.2017
comment
Я наконец нашел подробный текст ошибки, который Azure возвращает в регистраторе HTTP в odata.metadata, в котором указывается правильный формат virtual_machine_image_id. Это заставило меня понять, что вам нужно скопировать поле идентификатора ресурса для изображения на портале Azure, которое можно увидеть при просмотре деталей образа виртуальной машины.   -  person RedPanda    schedule 02.11.2017


Ответы (2)


Требуемый минимальный пакет SDK для Azure

Требуется azure-batch Python SDK v4.0.0 или более поздней версии. Обычно с pip install --upgrade azure-batch вы должны просто получить самую новую версию. Если это не сработает, вы можете добавить параметр --force-reinstall в pip, чтобы заставить его (с --upgrade).

Идентификатор номера агента узла

Что касается правильного значения для node_agent_sku_id, вам необходимо использовать list_node_agent_skus, чтобы увидеть соответствие между операционными системами и поддерживаемым скусом агента узла.

Требуется аутентификация Azure Active Directory

Что касается проблемы с аутентификацией, вы должны использовать аутентификацию Azure Active Directory, чтобы использовать эта особенность. Это не будет работать с авторизацией с общим ключом.

Документация

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

person fpark    schedule 15.10.2017
comment
Спасибо, у вас есть пример использования Azure Active Directory authentication? Как я могу это сделать? Что мне передать в batch.BatchServiceClient( credentials, base_url=_BATCH_ACCOUNT_URL)? - person pookie; 16.10.2017

Я использую azure-batch == 9.0.0, и получается документы не обновляются в соответствии с самим пакетом. Использование id вместо virtual_machine_image_id решает проблему для меня.

person Anshuman Goel    schedule 04.05.2020