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

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

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

Это перечисляет параметры как:

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

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

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

ОБНОВИТЬ

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

Я тогда пошел сюда скачал почтовый индекс. Открыл его, проверил ImageReference класс и низменность virtual_machine_image_id был доступен в __init__ функция ImageReference учебный класс. Затем я скачал колесо питона и использовал 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\n Время: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

ХОРОШО. пользователь 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 для типа приложения, которое вы хотите создать. После настройки значений выберите "Создать".

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

1 ответ

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

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

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

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

Другие вопросы по тегам