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

Warning

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

Batch 拡張機能を使用してAzure CLIすると、ユーザーはコードを記述せずに 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 コマンドを直接実行するか、スクリプトに統合します。

Batch テンプレートは、プール、ジョブ、タスク、およびその他の項目を作成するときにプロパティ値を指定するために、JSON ファイルのAzure CLIの既存の Batch サポートに基づいて構築されます。 Batch テンプレートでは、次の機能が追加されます。

  • パラメーターを定義できます。 テンプレートを使用する場合、項目を作成するためにパラメーター値のみが指定され、他の項目プロパティ値はテンプレート本体で指定されます。 Batch と Batch によって実行されるアプリケーションを理解しているユーザーは、テンプレートを作成し、プール、ジョブ、タスクのプロパティ値を指定できます。 Batch やアプリケーションにあまり慣れていないユーザーは、定義されたパラメーターの値のみを指定する必要があります。

  • ジョブ タスク ファクトリは、ジョブに関連付けられた 1 つ以上のタスクを作成するため、多くのタスク定義を作成する必要がないようにし、ジョブの送信を大幅に簡略化します。

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

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

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

Installation

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

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

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

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

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

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

Templates

Azure Batch テンプレートは、機能と構文のAzure Resource Manager テンプレートに似ています。 項目プロパティの名前と値を含む JSON ファイルですが、次の主な概念を追加します。

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

プール テンプレート

プール テンプレートでは、パラメーターと変数の標準テンプレート機能がサポートされています。 また、 パッケージ参照もサポートされています。必要に応じて、パッケージ マネージャーを使用してソフトウェアをプール ノードにコピーできます。 パッケージ マネージャーとパッケージ 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 つの タスク 定義からジョブに対して複数のタスクを作成するタスク ファクトリコンストラクトもサポートしています。 パラメーター スイープ、ファイルごとのタスク、タスク コレクションの 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 エクスプローラーで、[ギャラリー] >[ローカル テンプレート] を選択します。
  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 ユーザーなど) に拡大することです。 コーディングを行わないと、Batch によって実行されるAzure、Batch、アプリケーションに関する知識を持つユーザーは、プールとジョブの作成用のテンプレートを作成できます。 テンプレート パラメーターを使用すると、Batch とアプリケーションに関する詳細な知識がないユーザーはテンプレートを使用できます。

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

次のステップ

  • Azure GitHub リポジトリで、インストールと使用に関する詳細なドキュメント、サンプル、ソース コードを表示します。
  • Batch エクスプローラーを使用して Batch リソースを作成および管理する方法について説明します。