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