Azure Batch CLI テンプレートとファイル転送を使用する

警告

Batch Azure CLI 拡張機能は、2024 年 9 月 30 日に廃止されます。 この拡張機能は、コマンド az extension remove --name azure-batch-cli-extensions を使ってアンインストールしてください。

Azure CLI で Batch 拡張機能を使用することで、ユーザーはコードを書かずに Batch ジョブを実行できます。

Azure CLI で JSON テンプレート ファイルを作成および使用して、Batch のプール、ジョブ、タスクを作成します。 CLI 拡張機能コマンドを使用して、Batch アカウントに関連付けられたストレージ アカウントにジョブ入力ファイルを簡単にアップロードし、ジョブ出力ファイルを簡単にダウンロードします。

Note

JSON ファイルは、Azure Resource Manager テンプレートと同じ機能をサポートするわけではありません。 これらは、未加工の REST 要求本文のように書式設定されることを意図しています。 CLI 拡張機能では既存のコマンドが変更されることはありませんが、Azure Resource Manager テンプレートの一部の機能を追加する、同様のテンプレート オプションがあります。 Windows、Mac、Linux 向けの Azure Batch CLI 拡張機能に関するページを参照してください。

概要

Azure CLI の拡張機能を使用すると、開発者以外のユーザーが Batch をエンド ツー エンドで使用できます。 CLI コマンドのみで、プールの作成、入力データのアップロード、ジョブと関連するタスクの作成、結果の出力データのダウンロードを行うことができます。 コードを追加する必要はありません。 CLI コマンドを直接実行するか、スクリプトに統合します。

JSON ファイル用の Azure CLI での既存の Batch サポートに基づく Batch テンプレートで、プール、ジョブ、タスクなどのアイテムを作成するときのプロパティ値を指定します。 Batch テンプレートは、次の機能を追加します。

  • パラメーターを定義できます。 テンプレートを使用するときに、アイテムを作成するためのパラメーター値だけを指定します。アイテムの他のプロパティ値は、テンプレートの本文で指定されます。 Batch と Batch によって実行されるアプリケーションの知識があるユーザーは、プール、ジョブ、タスクのプロパティ値を指定してテンプレートを作成できます。 Batch やアプリケーションの知識が乏しいユーザーは、定義済みのパラメーターの値を指定するだけで済みます。

  • ジョブ タスク ファクトリは、ジョブに関連する 1 つまたは複数のタスクを作成し、多くのタスクの定義を作成する必要をなくし、ジョブの送 信を大幅に簡略化します。

通常、ジョブは入力データ ファイルを使用して出力データ ファイルを生成します。 既定では、ストレージ アカウントは各 Batch アカウントに関連付けられています。 コーディングやストレージの資格情報を使用せずに、Azure CLI を使用してこのストレージ アカウントとの間でファイルを転送できます。

たとえば、ffmpeg は、オーディオ/ビデオ ファイルを処理する一般的なアプリケーションです。 Azure Batch CLI 拡張機能を使用すると、ユーザーが ffmpeg を呼び出してソース ビデオ ファイルをさまざまな解像度にトランスコードしやすくなります。 このプロセスは次のようになります。

  • プール テンプレートを作成します。 テンプレートを作成するユーザーには、ffmpeg アプリケーションを呼び出す方法とその要件に関する知識があります。作成者は、適切な OS、VM サイズ、ffmpeg のインストール方法 (アプリケーション パッケージの使用、パッケージ マネージャーの使用など)、プールの他のプロパティ値を指定します。 テンプレートを使用するときにパラメーターが作成されます。指定する必要があるのは、プール ID と VM の数だけです。
  • ジョブ テンプレートを作成します。 テンプレートを作成するユーザーは、ffmpeg を呼び出してソース ビデオを別の解像度にトランスコードする必要があることをわかっており、タスク コマンド ラインを指定します。作成者は、ソース ビデオ ファイルを格納するフォルダーがあり、入力ファイルごとにタスクが必要であることもわかっています。
  • トランスコードする一連のビデオ ファイルを持つエンド ユーザーは、まずプール テンプレートを使用してプールを作成し、プール ID と必要な VM の数のみを指定します。 これで、トランスコードするソース ファイルをアップロードできるようになります。 次に、ジョブ テンプレートを使用し、プール ID とアップロードするソース ファイルの場所だけを指定してジョブを送信できます。 生成される入力ファイルごとに 1 つのタスクを含む Batch ジョブが作成されます。 最後に、トランスコードされた出力ファイルをダウンロードできます。

インストール

Azure Batch CLI 拡張機能をインストールするには、まず Azure CLI 2.0 をインストールするか、Azure CLI を Azure Cloud Shell で実行します。

次の Azure CLI コマンドを使って、最新バージョンの Batch 拡張機能をインストールします。

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

Batch CLI 拡張機能と追加のインストール オプションの詳細については、GitHub リポジトリを参照してください。

CLI 拡張機能を使用するには、Azure Batch アカウントが必要です。ストレージにファイルを転送するコマンドとストレージからファイルを転送するコマンドでは、リンクされたストレージ アカウントが必要です。

Azure CLI を使用して Batch アカウントにログインするには、Azure CLI を使用した Batch リソースの管理の関する記事を参照してください。

テンプレート

Azure Batch テンプレートは、機能と構文が Azure Resource Manager テンプレートと似ています。 これらのテンプレートは、アイテムのプロパティの名前と値が含まれた JSON ファイルですが、次の主要概念が追加されます。

  • パラメーター: 本文セクションでプロパティ値を指定し、テンプレートを使用するときに指定する必要があるパラメーター値だけを含めることができます。 たとえば、プールの完全な定義を本文に配置し、poolId の 1 つのパラメーターだけを定義します。これにより、プールを作成するために指定する必要があるのはプール ID 文字列だけになります。 テンプレートの本文は、Batch と Batch によって実行されるアプリケーションの知識があるユーザーが作成できます。テンプレートを使用するときは、作成者が定義したパラメーターの値だけを指定する必要があります。 これにより、Batch やアプリケーションに関する深い知識を持たないユーザーでも、テンプレートを使用することができます。
  • 変数: 単純または複雑なパラメーター値を 1 つの場所で指定し、テンプレートの本文内の 1 つ以上の場所で使用できます。 変数により、テンプレートを簡素化し、サイズを小さくすることができるだけでなく、プロパティを 1 か所で変更できるので、テンプレートの保守が容易になります。
  • 高度なコンストラクト: Batch API ではまだ使用できない一部の高度なコンストラクトをテンプレートで使用できます。 たとえば、タスク ファクトリは、共通のタスク定義を使って、ジョブの複数のタスクを作成するジョブ テンプレート内に定義できます。 これらのコンストラクトにより、複数の JSON ファイル (タスクごとに 1 ファイルなど) を動的に作成するコードを記述したり、パッケージ マネージャーを使用してアプリケーションをインストールするためのスクリプト ファイルを作成したりする必要がなくなります。

プール テンプレート

プール テンプレートは、パラメーターと変数の標準的なテンプレートの機能をサポートします。 また、パッケージ参照もサポートしており、オプションとして、パッケージ マネージャーを使用してソフトウェアをプール ノードにコピーすることができます。 パッケージ マネージャーとパッケージ ID は、パッケージ参照で指定します。 1 つ以上のパッケージを宣言することで、必要なパッケージを取得するスクリプトを作成し、そのスクリプトをインストールして、各プール ノードで実行する必要がなくなります。

ffmpeg がインストールされた Linux VM のプールを作成するテンプレートの例を次に示します。 これを使用するには、プールの ID 文字列と、プール内の VM の数のみを指定します。

{
    "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

ジョブ テンプレート

ジョブ テンプレートは、パラメーターと変数の標準的なテンプレートの機能をサポートします。 また、1 つのタスク定義から 1 つのジョブに対して複数のタスクを作成するタスク ファクトリ コンストラクトもサポートしています。 パラメーター スイープ、ファイルごとのタスク、タスク コレクションの 3 種類のタスク ファクトリがサポートされています。

ffmpeg を使用して MP4 ビデオ ファイルを 2 つの低解像度のいずれかにトランスコードするジョブを作成するテンプレートの例を次に示します。 ソース ビデオ ファイルごとに 1 つのタスクを作成します。 ジョブの入力と出力用のファイル グループの詳細については、「ファイル グループと ファイル転送」を参照してください。

{
    "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 でテンプレートを使用する

Batch CLI テンプレートを Batch Explorer デスクトップ アプリケーションにアップロードして、Batch プールまたはジョブを作成できます。 Batch Explorer ギャラリーに定義済みのプールとジョブ テンプレートから選択することもできます。

テンプレートをアップロードするには:

  1. Batch Explorer で、 [ギャラリー]>[ローカル テンプレート] を選択します。
  2. ローカル プールまたはジョブ テンプレートを選択するか、ドラッグ アンド ドロップします。
  3. [このテンプレートを使用する] を選択し、画面のプロンプトに従います。

ファイル グループとファイル転送

ほとんどのジョブとタスクは、入力ファイルを必要し、出力ファイルを生成します。 通常、入力ファイルと出力ファイルは、クライアントからノードまたはノードからクライアントに転送します。 Azure Batch CLI 拡張機能では、ファイル転送を排除し、各 Batch アカウントに関連付けることができるストレージ アカウントを利用します。

ファイル グループは Azure ストレージ アカウントに作成されるコンテナーに相当します。 ファイル グループにはサブフォルダーを含めることができます。

Batch 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 にのみ追加されています。 目標は、Batch を使用できる対象ユーザーを、Batch API を使用してコードを開発する必要のないユーザー (研究者、IT ユーザーなど) に拡大することです。 Azure、Batch、Batch によって実行されるアプリケーションの知識があるユーザーは、コードを記述せずにプールやジョブを作成するためのテンプレートを作成できます。 テンプレートのパラメーターにより、Batch やアプリケーションの詳細な知識のないユーザーがテンプレートを使用できるようになります。

Azure CLI の Batch 拡張機能を試し、フィードバックまたは提案をお寄せください。その際には、この記事に対するコメントまたは Batch コミュニティ リポジトリをご利用ください。

次のステップ

  • インストールと使用方法に関する詳細なドキュメント、サンプル、ソース コードについては、Azure GitHub リポジトリを参照してください。
  • Batch Explorer を使用した Batch リソースの作成と管理方法を確認します。