Пакетный пул 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
устраняет проблему для меня.