Управление ресурсами пакетной службы с помощью командлетов PowerShell

Командлеты PowerShell для пакетной службы Azure позволяют выполнять и создавать сценарии для многих распространенных задач пакетной службы. Эта статья содержит краткие сведения о командлетах, используемых для управления учетными записями пакетной службы и работы с ее ресурсами, включая пулы, задания и задачи.

Полный список командлетов пакетной службы Azure и их синтаксис см. в этой справке.

Рекомендуется регулярно обновлять модули Azure PowerShell, чтобы пользоваться всеми преимуществами службы.

Необходимые компоненты

  • Установите и настройте последнюю версию модуля Azure PowerShell. Установить определенный модуль пакетной службы Azure, например модуль предварительной версии, можно из коллекции PowerShell.

  • Выполните командлет Connect-AzAccount, чтобы подключиться к своей подписке (командлеты пакетной службы Azure входят в состав модуля Azure Resource Manager):

    Connect-AzAccount
    
  • Зарегистрируйте пространство имен поставщика пакетной службы. Эта операция выполняется один раз для каждой подписки.

    Register-AzResourceProvider -ProviderNamespace Microsoft.Batch
    

Управление учетными записями пакетной службы и ключами

Создание учетной записи пакетной службы

Командлет New-AzBatchAccount создает учетную запись пакетной службы в указанной группе ресурсов. Если у вас еще нет группы ресурсов, создайте ее, выполнив командлет New-AzResourceGroup. Укажите один из регионов Azure в параметре Location, например Central US. Например:

New-AzResourceGroup –Name MyBatchResourceGroup –Location "Central US"

Далее создайте учетную запись пакетной службы в новой группе ресурсов. Укажите имя учетной записи вместо <account_name>, а также расположение и имя группы ресурсов. Создание учетной записи пакетной службы может занять некоторое время. Например:

New-AzBatchAccount –AccountName <account_name> –Location "Central US" –ResourceGroupName <res_group_name>

Примечание.

Имя учетной записи пакетной службы должно быть уникальным для региона Azure группы ресурсов, содержать от 3 до 24 символов и состоять только из строчных букв и цифр.

Получение ключей доступа к учетной записи

Get-AzBatchAccountKeys выводит ключи доступа, связанные с учетной записью пакетной службы Azure. Например, выполните следующую команду, чтобы получить первичные и вторичные ключи созданной учетной записи.

$Account = Get-AzBatchAccountKeys –AccountName <account_name>

$Account.PrimaryAccountKey

$Account.SecondaryAccountKey

Создание нового ключа доступа

New-AzBatchAccountKey создает новый первичный или вторичный ключ учетной записи пакетной службы Azure. Например, чтобы создать новый первичный ключ для учетной записи Пакетной службы, введите:

New-AzBatchAccountKey -AccountName <account_name> -KeyType Primary

Примечание.

Чтобы создать новый вторичный ключ, введите "Вторичный" в параметре KeyType . Повторно создавать первичный и вторичный ключи нужно отдельно.

Удаление учетной записи Пакетной службы

Remove-AzBatchAccount удаляет учетную запись пакетной службы. Например:

Remove-AzBatchAccount -AccountName <account_name>

При появлении запроса на удаление учетной записи подтвердите удаление. Удаление учетной записи может занять некоторое время.

Создание объекта BatchAccountContext

Вы можете пройти проверку подлинности для управления ресурсами пакетной службы с помощью проверки подлинности общего ключа или проверки подлинности Microsoft Entra. Чтобы выполнить проверку подлинности с помощью командлетов PowerShell пакетной службы, необходимо сначала создать объект BatchAccountContext для хранения учетных данных учетной записи или удостоверения. Передайте объект BatchAccountContext в командлеты, которые используют параметр BatchContext .

Проверка подлинности на основе общего ключа

$context = Get-AzBatchAccountKeys -AccountName <account_name>

Примечание.

По умолчанию первичный ключ учетной записи используется для проверки подлинности, но вы можете явно выбрать ключ, который нужно использовать, изменив свойство KeyInUse объекта BatchAccountContext: $context.KeyInUse = "Secondary".

Проверка подлинности Microsoft Entra

$context = Get-AzBatchAccount -AccountName <account_name>

Создание и изменение ресурсов пакетной службы

Чтобы создать ресурсы в учетной записи пакетной службы, используйте командлеты New-AzBatchPool, New-AzBatchJob и New-AzBatchTask. Чтобы обновить свойства ресурсов в учетной записи пакетной службы, используйте соответствующие командлеты Get- и Set-, а чтобы удалить ресурсы — командлет Remove-.

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

Создание пула пакетной службы

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

При выполнении командлета New-AzBatchPool передайте параметры операционной системы в объекте PSVirtualMachineConfiguration или PSCloudServiceConfiguration. Например, в следующем фрагменте кода создается пул пакетной службы с размером Standard_A1 вычислительных узлов в конфигурации виртуальной машины, на основе образа Ubuntu Server 20.04-LTS. Здесь параметр VirtualMachineConfiguration определяет переменную $configuration как объект PSCloudServiceConfiguration. Параметр BatchContext определяет ранее заданную переменную $context как объект BatchAccountContext.

$imageRef = New-Object -TypeName "Microsoft.Azure.Commands.Batch.Models.PSImageReference" -ArgumentList @("UbuntuServer","Canonical","20.04-LTS")

$configuration = New-Object -TypeName "Microsoft.Azure.Commands.Batch.Models.PSVirtualMachineConfiguration" -ArgumentList @($imageRef, "batch.node.ubuntu 20.04")

New-AzBatchPool -Id "mypspool" -VirtualMachineSize "Standard_a1" -VirtualMachineConfiguration $configuration -AutoScaleFormula '$TargetDedicated=4;' -BatchContext $context

Целевое число вычислительных узлов в новом пуле вычисляется по формуле автоматического масштабирования. В этом случае формула выглядит так: $TargetDedicated=4. Это значит, что в пуле будет не более 4 вычислительных узлов.

Запрос на получение сведений о пулах, заданиях, задачах и другой информации

Чтобы отправить запрос о сущностях, созданных в учетной записи пакетной службы, используйте командлеты Get-AzBatchPool, Get-AzBatchJob и Get-AzBatchTask.

Запрос данных

Например, для поиска пулов используйте Get-AzBatchPools. По умолчанию этот командлет опрашивает все пулы вашей учетной записи при условии, что вы уже сохранили объект BatchAccountContext в $context.

Get-AzBatchPool -BatchContext $context

Использование фильтра OData

Чтобы найти объекты, которые вас интересуют, установите фильтр OData в параметре Фильтр . Например, можно найти все пулы с идентификаторами, начинающимися с myPool:

$filter = "startswith(id,'myPool')"

Get-AzBatchPool -Filter $filter -BatchContext $context

Этот способ не такой гибкий, как использование "Where-Object" в локальном конвейере. Но запрос отправляется непосредственно Пакетной службе, чтобы вся фильтрация выполнялась на стороне сервера, сохраняя пропускную способность Интернета.

Используйте параметр Id

Альтернативой использования фильтра OData является использование параметра Id . Для запроса конкретного пула с идентификатором myPool сделайте следующее.

Get-AzBatchPool -Id "myPool" -BatchContext $context

Параметр Id поддерживает поиск только полного идентификатора без подстановочных знаков или фильтров в стиле OData.

Использование параметра MaxCount

По умолчанию каждый командлет возвращает максимум 1000 объектов. Если этот предел достигнут, уточните параметры фильтра, чтобы он возвращал меньшее количество объектов, или явно задайте максимальное значение с помощью параметра MaxCount . Например:

Get-AzBatchTask -MaxCount 2500 -BatchContext $context

Чтобы удалить верхнюю границу, задайте MaxCount значение "0" или меньше.

Использование конвейера PowerShell

Командлеты пакетной службы используют конвейер PowerShell для передачи данных между командлетами. Вы получаете тот же результат, что и при указании параметра, но работа с несколькими сущностями упрощается.

Например, поиск и вывод всех задач в учетной записи:

Get-AzBatchJob -BatchContext $context | Get-AzBatchTask -BatchContext $context

Перезапуск (перезагрузка) каждого вычислительного узла в пуле:

Get-AzBatchComputeNode -PoolId "myPool" -BatchContext $context | Restart-AzBatchComputeNode -BatchContext $context

Управление пакетами приложений

Пакеты приложений упрощают развертывание приложений на вычислительных узлах пулов. С помощью командлетов PowerShell для пакетной службы можно передать пакеты приложений в учетной записи пакетной службы и управлять ими, а также развертывать версии пакетов в вычислительных узлах.

Важно!

Чтобы использовать пакеты приложений, вам сначала нужно связать учетную запись службы хранилища Azure со своей учетной записью пакетной службы.

Создайте приложение:

New-AzBatchApplication -AccountName <account_name> -ResourceGroupName <res_group_name> -ApplicationId "MyBatchApplication"

Добавьте пакет приложения:

New-AzBatchApplicationPackage -AccountName <account_name> -ResourceGroupName <res_group_name> -ApplicationId "MyBatchApplication" -ApplicationVersion "1.0" -Format zip -FilePath package001.zip

Задайте для приложения версию по умолчанию:

Set-AzBatchApplication -AccountName <account_name> -ResourceGroupName <res_group_name> -ApplicationId "MyBatchApplication" -DefaultVersion "1.0"

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

$application = Get-AzBatchApplication -AccountName <account_name> -ResourceGroupName <res_group_name> -ApplicationId "MyBatchApplication"

$application.ApplicationPackages

Удалите пакет приложения:

Remove-AzBatchApplicationPackage -AccountName <account_name> -ResourceGroupName <res_group_name> -ApplicationId "MyBatchApplication" -ApplicationVersion "1.0"

Удаление приложения

Remove-AzBatchApplication -AccountName <account_name> -ResourceGroupName <res_group_name> -ApplicationId "MyBatchApplication"

Примечание.

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

Развертывание пакета приложения

Вы можете указать один или несколько пакетов приложений для развертывания при создании пула. Когда вы указываете пакет во время создания пула, он развертывается на каждом из узлов, присоединяющихся к пулу. Кроме того, развертывание пакетов выполняется при перезагрузке узла или пересоздании образа узла.

При создании пула укажите параметр -ApplicationPackageReference, чтобы развернуть пакет приложения для узлов во время их присоединения к пулу. Сначала создайте объект PSApplicationPackageReference и настройте для него идентификатор и версию пакета приложения, которую нужно развернуть в вычислительных узлах пула:

$appPackageReference = New-Object Microsoft.Azure.Commands.Batch.Models.PSApplicationPackageReference

$appPackageReference.ApplicationId = "MyBatchApplication"

$appPackageReference.Version = "1.0"

Теперь создайте пул и укажите ссылочный объект пакета в качестве аргумента в параметре ApplicationPackageReferences:

New-AzBatchPool -Id "PoolWithAppPackage" -VirtualMachineSize "Small" -VirtualMachineConfiguration $configuration -BatchContext $context -ApplicationPackageReferences $appPackageReference

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

Обновление пакетов приложений пула

Чтобы обновить приложения, назначенные существующему пулу, сначала создайте объект PSApplicationPackageReference с нужными свойствами (идентификатор и версия пакета приложения):

$appPackageReference = New-Object Microsoft.Azure.Commands.Batch.Models.PSApplicationPackageReference

$appPackageReference.ApplicationId = "MyBatchApplication"

$appPackageReference.Version = "2.0"

Затем извлеките нужный пул из пакетной службы, очистите все существующие пакеты, добавьте ссылку на новый пакет и обновите пакетную службу с использованием новых параметров пула:

$pool = Get-AzBatchPool -BatchContext $context -Id "PoolWithAppPackage"

$pool.ApplicationPackageReferences.Clear()

$pool.ApplicationPackageReferences.Add($appPackageReference)

Set-AzBatchPool -BatchContext $context -Pool $pool

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

Get-AzBatchComputeNode -PoolId "PoolWithAppPackage" -BatchContext $context | Restart-AzBatchComputeNode -BatchContext $context

Совет

На вычислительных узлах в пуле можно развернуть несколько пакетов приложений. Если вы хотите добавить пакет приложения вместо замены развернутых в настоящее время пакетов, опустите $pool.ApplicationPackageReferences.Clear() указанную выше строку.

Следующие шаги