Использование шаблонов интерфейса командной строки для пакетной службы Azure и передачи файлов

Предупреждение

Расширение Azure CLI пакетной службы будет прекращено 30 сентября 2024 г. Удалите расширение с помощью команды az extension remove --name azure-batch-cli-extensions.

Используя расширение пакетной службы для Azure CLI, пользователи могут выполнять пакетные задания, не нуждаясь в написании кода.

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

Примечание

Файлы JSON не поддерживают те же функциональные возможности, что и шаблоны Azure Resource Manager. Они должны быть отформатированы как текст необработанного запроса REST. Расширение CLI не изменяет существующие команды, но имеет схожий параметр шаблона, частично добавляющий функции шаблона Azure Resource Manager. См. статью Расширения CLI пакетной службы Azure для Windows, Mac и Linux.

Обзор

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

Шаблоны пакетной службы создаются на основе существующей поддержки пакетной службы в Azure CLI, что позволяет JSON-файлам указывать значения свойств для создания пулов, заданий, задач и других элементов. Шаблоны пакетной службы добавляют следующие возможности.

  • Возможность определять параметры. При использовании шаблона указываются только значения параметров для создания элемента, а остальные значения свойств элемента содержатся в тексте шаблона. Пользователь, понимающий принцип работы пакетной службы и приложений, запускаемых пакетной службой, может создавать шаблоны, указывая значения свойств пулов, заданий и задач. Если пользователь мало знаком с пакетной службой и (или) приложениями, то ему необходимо указать только значения определенных параметров.

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

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

Например, ffmpeg — это популярное приложение, которое обрабатывает аудио- и видеофайлы. С помощью расширения CLI пакетной службы Azure можно упростить вызов ffmpeg для перекодировки исходных видеофайлов в различные разрешения. Этот процесс может выглядеть следующим образом:

  • Создайте шаблон пула. Пользователь, создающий шаблон, должен знать, как вызвать приложение ffmpeg и какие его требования. Необходимо указать соответствующую операционную систему, размер виртуальной машины, как было установлено приложение (например, из пакета приложения или с помощью диспетчера пакетов) и другие значения свойств пула. Создаются параметры, поэтому при использовании шаблона необходимо указать только идентификатор пула и число виртуальных машин.
  • Создайте шаблон задания. Пользователь, создающий шаблон, должен знать, как вызвать приложение ffmpeg для перекодирования исходного видео в файл с другим разрешением и указать командную строку задачи. Он также должен знать, что существует папка, в которой содержатся исходные видеофайлы, и что для каждого входного файла требуется одна задача.
  • Сначала пользователь создает пул для набора видеофайлов, которые необходимо перекодировать. Он использует шаблон пула, указывая только идентификатор пула и требуемое число виртуальных машин. После этого можно передать исходные файлы для перекодирования. Затем с помощью шаблона можно отправить задание, указав только идентификатор пула и расположение переданных исходных файлов. Создается пакетное задание. Для каждого входного файла создается одна задача. Наконец, можно загрузить перекодированные выходные файлы.

Установка

Чтобы установить расширение CLI для пакетной службы Azure, сначала установите Azure CLI 2.0 или запустите Azure CLI в Azure Cloud Shell.

Установите последнюю версию расширения пакетной службы с помощью следующей команды Azure CLI:

az extension add --name azure-batch-cli-extensions

Дополнительные сведения о расширении CLI для пакетной службы и дополнительные параметры установки см. в репозитории GitHub.

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

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

Шаблоны

Шаблоны пакетной службы Azure по функциональности и синтаксису похожи на шаблоны Azure Resource Manager. Они являются JSON-файлами, содержащими имена и значения свойств элементов, но в них добавлены следующие основные понятия:

  • Параметры: позволяют указывать значения свойств в теле шаблона. При использовании шаблона необходимо предоставить только значения параметров. Например, полное определение пула можно поместить в текст и определить только один параметр для poolId. Таким образом, для создания пула необходимо указать только строку идентификатора. Тело шаблона может создать пользователь, который знаком с пакетной службой и приложениями, запускаемыми пакетной службой. При использовании шаблона необходимо указать только значения параметров, определенных создателем шаблона. Это позволяет использовать шаблоны пользователям без глубоких знаний о пакетах и (или) приложениях.
  • Переменные: позволяют указывать значения простых или сложных параметров в одном месте, а затем использовать их в одном или нескольких местах в теле шаблона. С помощью переменных можно упростить шаблон и уменьшить его размер, а также сделать его более удобным в использовании благодаря возможности изменять свойства в одном месте.
  • Конструкции более высокого уровня: в шаблоне доступны некоторые конструкции более высокого уровня, которые еще не доступны в интерфейсах API пакетной службы. Например, в шаблоне задания на основе стандартного определения задач можно определить фабрику задач, которая создаст несколько задач для одного задания. Благодаря этим конструкциям не требуется писать код, чтобы динамически создать несколько JSON-файлов, по одному файлу для каждой задачи, или создавать файлы сценариев для установки приложений через диспетчер пакетов.

Шаблоны пула

Шаблоны пулов поддерживают стандартные возможности шаблонов (параметры и переменные), Они также поддерживают ссылки на пакеты, которые при необходимости позволяют копировать программное обеспечение в узлы пула с помощью диспетчеров пакетов. Диспетчер пакетов и идентификатор пакета указываются в ссылке на пакет. Объявляя об одном или нескольких пакетах, вы избавляетесь от необходимости создания сценария, который получает пакеты, установки этого сценария и его запуска на каждом узле пула.

Ниже приведен пример шаблона, при помощи которого создается пул виртуальных машин Linux с установленным приложением ffmpeg. Чтобы его использовать, необходимо только указать строку идентификатора пула и число используемых виртуальных машин:

{
    "parameters": {
        "nodeCount": {
            "type": "int",
            "metadata": {
                "description": "The number of pool nodes"
            }
        },
        "poolId": {
            "type": "string",
            "metadata": {
                "description": "The pool ID "
            }
        }
    },
    "pool": {
        "type": "Microsoft.Batch/batchAccounts/pools",
        "apiVersion": "2016-12-01",
        "properties": {
            "id": "[parameters('poolId')]",
            "virtualMachineConfiguration": {
                "imageReference": {
                    "publisher": "Canonical",
                    "offer": "UbuntuServer",
                    "sku": "20.04-LTS",
                    "version": "latest"
                },
                "nodeAgentSKUId": "batch.node.ubuntu 20.04"
            },
            "vmSize": "STANDARD_D3_V2",
            "targetDedicatedNodes": "[parameters('nodeCount')]",
            "enableAutoScale": false,
            "taskSlotsPerNode": 1,
            "packageReferences": [
                {
                    "type": "aptPackage",
                    "id": "ffmpeg"
                }
            ]
        }
    }
}

Если имя файла шаблона — pool-ffmpeg.json, то вызовите шаблон следующим образом:

az batch pool create --template pool-ffmpeg.json

От CLI вы получите запрос ввести значения для параметров poolId и nodeCount. Можно также указать параметры в файле JSON. Пример:

{
  "poolId": {
    "value": "mypool"
  },
  "nodeCount": {
    "value": 2
  }
}

Если имя файла JSON параметров — pool-parameters.json, вызовите шаблон следующим образом:

az batch pool create --template pool-ffmpeg.json --parameters pool-parameters.json

Шаблоны задания

Шаблоны задания поддерживают стандартные возможности шаблонов (параметры и переменные), Они также поддерживают конструкцию фабрики задач, которая создает несколько заданий для задания из одного определения задания. Поддерживается три типа фабрики задач: параметрический анализ, "по одной задаче на файл" и коллекция задач.

Ниже приведен пример шаблона, который создает задание для перекодирования видеофайлов MP4 с помощью ffmpeg в один из двух форматов с более низким разрешением. Он создает одну задачу для каждого исходного видеофайла. Ознакомьтесь с разделом Группы файлов и передача файлов, чтобы узнать больше о группах файлов для входных и выходных данных задания.

{
    "parameters": {
        "poolId": {
            "type": "string",
            "metadata": {
                "description": "The name of Azure Batch pool which runs the job"
            }
        },
        "jobId": {
            "type": "string",
            "metadata": {
                "description": "The name of Azure Batch job"
            }
        },
        "resolution": {
            "type": "string",
            "defaultValue": "428x240",
            "allowedValues": [
                "428x240",
                "854x480"
            ],
            "metadata": {
                "description": "Target video resolution"
            }
        }
    },
    "job": {
        "type": "Microsoft.Batch/batchAccounts/jobs",
        "apiVersion": "2016-12-01",
        "properties": {
            "id": "[parameters('jobId')]",
            "constraints": {
                "maxWallClockTime": "PT5H",
                "maxTaskRetryCount": 1
            },
            "poolInfo": {
                "poolId": "[parameters('poolId')]"
            },
            "taskFactory": {
                "type": "taskPerFile",
                "source": {
                    "fileGroup": "ffmpeg-input"
                },
                "repeatTask": {
                    "commandLine": "ffmpeg -i {fileName} -y -s [parameters('resolution')] -strict -2 {fileNameWithoutExtension}_[parameters('resolution')].mp4",
                    "resourceFiles": [
                        {
                            "blobSource": "{url}",
                            "filePath": "{fileName}"
                        }
                    ],
                    "outputFiles": [
                        {
                            "filePattern": "{fileNameWithoutExtension}_[parameters('resolution')].mp4",
                            "destination": {
                                "autoStorage": {
                                    "path": "{fileNameWithoutExtension}_[parameters('resolution')].mp4",
                                    "fileGroup": "ffmpeg-output"
                                }
                            },
                            "uploadOptions": {
                                "uploadCondition": "TaskSuccess"
                            }
                        }
                    ]
                }
            },
            "onAllTasksComplete": "terminatejob"
        }
    }
}

Если имя файла шаблона — job-ffmpeg.json, то вызовите шаблон следующим образом:

az batch job create --template job-ffmpeg.json

Как и прежде, от CLI вы получите запрос ввести значения для параметров. Можно также указать параметры в файле JSON.

Использование шаблонов в Batch Explorer

Вы можете передать шаблон CLI пакетной службы в классическое приложение Batch Explorer для создания пула или задания пакетной службы. В коллекции Batch Explorer вы также можете выбрать из предопределенных шаблонов пулов и заданий.

Чтобы отправить шаблон, сделайте следующее:

  1. В Batch Explorer выберите Коллекция>Локальные шаблоны.
  2. Выберите или перетащите шаблон задания или локального пула.
  3. Выберите Использовать этот шаблон и следуйте инструкциям на экране.

Группы файлов и передача файлов

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

Группа файлов соответствует контейнеру, создаваемому в учетной записи хранения Azure. Группа файлов может иметь вложенные папки.

Расширение CLI для пакетной службы предоставляет команды, чтобы передать файлы от клиента в указанную группу файлов или скачать в клиент файлы из указанной группы файлов.

az batch file upload --local-path c:\source_videos\*.mp4
    --file-group ffmpeg-input

az batch file download --file-group ffmpeg-output --local-path
    c:\output_lowres_videos

Шаблоны пула и задания позволяют указать файлы, хранящиеся в группах файлов, для копирования на узлы пула или с узлов пула обратно в группу файлов. Например, в ранее указанном шаблоне задания группа файлов ffmpeg-input указана для фабрики задач как расположение исходных видеофайлов, скопированных на узел для перекодирования. Группа файлов ffmpeg-output — это расположение, где перекодированные выходные файлы копируются с узла, выполняющего каждую задачу.

Сводка

Сейчас поддержка шаблонов и передачи файлов реализована только в Azure CLI. В будущем планируется расширить аудиторию пакетной службы до пользователей, которым не нужно разрабатывать код, используя интерфейсы API пакетной службы, например исследователей и ИТ-пользователей. Пользователи, знакомые с Azure, пакетной службой и приложениями, которые запускает пакетная служба, могут создавать шаблоны для создания пулов и заданий, не прибегая к написанию кода. Параметры шаблона позволяют использовать шаблоны даже пользователям с небольшим опытом работы с пакетной службой и приложениями.

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

Дальнейшие действия

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