Как создать пакетный пул Azure на основе пользовательского образа виртуальной машины с помощью Java SDK - PullRequest
0 голосов
/ 18 апреля 2019

Я хочу использовать пользовательский образ виртуальной машины Ubuntu, для которого я создал пакетное задание. Я могу создать новый пул, выбрав собственное изображение на самом портале Azure, но я хотел написать сценарий сборки, чтобы сделать то же самое, используя пакетную программу Azure Java Java SDK. Вот что мне удалось придумать:

List<NodeAgentSku> skus = client.accountOperations().listNodeAgentSkus().findAll({ it.osType() == OSType.LINUX })
String skuId = null
ImageReference imageRef = new ImageReference().withVirtualMachineImageId('/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP_NAME/providers/Microsoft.Compute/images/$CUSTOM_VM_IMAGE_NAME')

for (NodeAgentSku sku : skus) {
    for (ImageReference imgRef : sku.verifiedImageReferences()) {
        if (imgRef.publisher().equalsIgnoreCase(osPublisher) && imgRef.offer().equalsIgnoreCase(osOffer) && imgRef.sku() == '18.04-LTS') {
            skuId = sku.id()
            break
        }
    }
}

VirtualMachineConfiguration configuration = new VirtualMachineConfiguration()
configuration.withNodeAgentSKUId(skuId).withImageReference(imageRef)
client.poolOperations().createPool(poolId, poolVMSize, configuration, poolVMCount)

Но я получаю исключение:

Caused by: com.microsoft.azure.batch.protocol.models.BatchErrorException: Status code 403, {
  "odata.metadata":"https://analyticsbatch.eastus.batch.azure.com/$metadata#Microsoft.Azure.Batch.Protocol.Entities.Container.errors/@Element","code":"AuthenticationFailed","message":{
    "lang":"en-US","value":"Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature.\nRequestId:bf9bf7fd-2ef5-497b-867c-858d081137e6\nTime:2019-04-17T23:08:17.7144177Z"
  },"values":[
    {
      "key":"AuthenticationErrorDetail","value":"The specified type of authentication SharedKey is not allowed when external resources of type Compute are linked."
    }
  ]
}

Я определенно думаю, что способ получения skuId неправильный. Поскольку client.accountOperations (). ListNodeAgentSkus () не перечисляет пользовательское изображение, я просто подумал о предоставлении skuId на основе версии ubuntu, которую я использовал для создания пользовательского изображения.

Итак, как правильно создать пул с помощью настраиваемого образа виртуальной машины для пакетной учетной записи Azure с использованием Java SDK?

Ответы [ 2 ]

2 голосов
/ 18 апреля 2019

Необходимо использовать учетные данные Azure Active Directory для создания пула с настраиваемым образом. Он находится в разделе предварительных условий документа Пакетное пользовательское изображение .

Это часто задаваемый вопрос:

  1. Пользовательское изображение в классе AzureBatch ImageReference не работает
  2. Пакетный пул Azure: как использовать пользовательский образ виртуальной машины через Python?
1 голос
/ 18 апреля 2019

Просто показывает как ошибку, вам нужно сначала пройти аутентификацию в Azure, а затем вы можете создать пул с настраиваемым изображением по вашему желанию.

Во-первых, вам нужна пакетная учетная запись Azure, вы можете ее создать.на портале Azure или с помощью интерфейса командной строки Azure.Или вы также можете создать пакетную учетную запись через Java.См. Управление учетной записью пакетной службы Azure через Java .

Тогда, я думаю, вам также необходимо пройти проверку подлинности для своей учетной записи пакетной службы.Ниже приведены два способа:

  • Используйте имя учетной записи, ключ и URL-адрес для создания экземпляра BatchSharedKeyCredentials для проверки подлинности с помощью службы пакетной службы Azure.Класс BatchClient - это самая простая точка входа для создания и взаимодействия с пакетными объектами Azure.

    BatchSharedKeyCredentials cred = new BatchSharedKeyCredentials(batchUri, batchAccount, batchKey); BatchClient client = BatchClient.open(cred);

  • Другой способ заключается в использовании проверки подлинности AAD (Azure Active Directory).создать клиента.Подробности см. В этом документе .

    BatchApplicationTokenCredentials cred = new BatchApplicationTokenCredentials(batchEndpoint, clientId, applicationSecret, applicationDomain, null, null); BatchClient client = BatchClient.open(cred);

Затем вы можете создать пул с пользовательскими настройками по своему усмотрению.Вот так:

System.out.println("Created a pool using an Azure Marketplace image.");

VirtualMachineConfiguration configuration = new VirtualMachineConfiguration();
configuration.withNodeAgentSKUId(skuId).withImageReference(imageRef);
client.poolOperations().createPool(poolId, poolVMSize, configuration, poolVMCount);

System.out.println("Created a Pool: " + poolId);

Подробнее см. Пакетные библиотеки Azure для Java .

...