アプリケーション パッケージを使用すると、Azure Batch ソリューションのコードを簡略化し、タスクを実行するアプリケーションを簡単に管理できます。 アプリケーション パッケージを使用すると、タスクが実行する複数のバージョンのアプリケーション (サポート ファイルを含む) をアップロードおよび管理できます。 その後、これらのアプリケーションの 1 つ以上をプール内のコンピューティング ノードに自動的にデプロイできます。
アプリケーション パッケージを作成および管理するための API は 、Batch Management .NET ライブラリの一部です。 コンピューティング ノードにアプリケーション パッケージをインストールするための API は 、Batch .NET ライブラリの一部です。 同等の機能は、他のプログラミング言語で使用できる Batch API にあります。
この記事では、Azure portal でアプリケーション パッケージをアップロードおよび管理する方法について説明します。 また、 Batch .NET ライブラリを使用してプールのコンピューティング ノードにインストールする方法についても説明します。
アプリケーション パッケージの要件
アプリケーション パッケージを使用するには、 Azure Storage アカウントを Batch アカウントにリンク する必要があります。
Batch アカウント内のアプリケーションとアプリケーション パッケージの数と、アプリケーション パッケージの最大サイズには制限があります。 詳しくは、「Batch サービスのクォータと制限」をご覧ください。
注
2017 年 7 月 5 日より前に作成されたバッチ プールは、アプリケーション パッケージをサポートしていません (Cloud Services 構成を使用して 2016 年 3 月 10 日以降に作成された場合を除く)。 ここで説明するアプリケーション パッケージ機能は、以前のバージョンのサービスで使用できる Batch Apps 機能よりも優先されます。
アプリケーションとアプリケーション パッケージについて
Azure Batch 内では、 アプリケーション は、プール内のコンピューティング ノードに自動的にダウンロードできる一連のバージョン管理されたバイナリを参照します。 アプリケーションには、アプリケーションの異なるバージョンを表す 1 つ以上のアプリケーション パッケージが含まれています。
各 アプリケーション パッケージ は、アプリケーション バイナリとサポート ファイルを含む .zip ファイルです。 .zip 形式のみがサポートされています。
アプリケーション パッケージはプールまたはタスク レベルで指定できます。
プール アプリケーション パッケージ は、プール内のすべてのノードにデプロイされます。 アプリケーションは、ノードがプールに参加し、再起動または再イメージ化されるときにデプロイされます。
プール アプリケーション パッケージは、プール内のすべてのノードがジョブのタスクを実行する場合に適しています。 プールの作成時にデプロイする 1 つ以上のアプリケーション パッケージを指定できます。 既存のプールのパッケージを追加または更新することもできます。 既存のプールに新しいパッケージをインストールするには、そのノードを再起動する必要があります。
タスク アプリケーション パッケージ は、タスクのコマンド ラインを実行する直前に、タスクを実行するようにスケジュールされたコンピューティング ノードにのみデプロイされます。 指定したアプリケーション パッケージとバージョンが既にノード上にある場合は、再デプロイされず、既存のパッケージが使用されます。
タスク アプリケーション パッケージは、1 つのプールで異なるジョブが実行され、ジョブの完了時にプールが削除されない共有プール環境で役立ちます。 ジョブのタスク数がプール内のノードよりも少ない場合、タスク アプリケーション パッケージは、タスクを実行するノードにのみアプリケーションがデプロイされるため、データ転送を最小限に抑えることができます。
タスク アプリケーション パッケージのメリットを得られるその他のシナリオは、大規模なアプリケーションを実行するジョブですが、タスクはごくわずかです。 たとえば、タスク アプリケーションは、重い前処理ステージやマージ タスクに役立つ場合があります。
アプリケーション パッケージでは、プールの開始タスクで、ノードにインストールする個々のリソース ファイルの長い一覧を指定する必要はありません。 Azure Storage またはノードで複数のバージョンのアプリケーション ファイルを手動で管理する必要はありません。 また、Azure Storage アカウント内のファイルへのアクセスを提供するために 、SAS URL の 生成について心配する必要はありません。 Batch は、Azure Storage を使用してバックグラウンドで動作し、アプリケーション パッケージを格納し、コンピューティング ノードにデプロイします。
注
開始タスクの合計サイズは、リソース ファイルや環境変数を含め、32,768 文字以下である必要があります。 開始タスクがこの制限を超える場合は、アプリケーション パッケージの使用も別のオプションです。 リソース ファイルを含む .zip ファイルを作成し、そのファイルを BLOB として Azure Storage にアップロードし、開始タスクのコマンド ラインから解凍することもできます。
アプリケーションのアップロードと管理
Azure portal または Batch 管理 API を使用して、Batch アカウント内のアプリケーション パッケージを管理できます。 次のセクションでは、ストレージ アカウントをリンクする方法、Azure portal でアプリケーションとアプリケーション パッケージを追加および管理する方法について説明します。
注
ARM テンプレートの Microsoft.Batch/batchAccounts リソースでアプリケーション値を定義することはできますが、現時点では、 ARM テンプレートを使用して Batch アカウントで使用するアプリケーション パッケージをアップロードすることはできません。 「 新しいアプリケーションの追加」の説明に従って、リンクされたストレージ アカウントにアップロードする必要があります。
ストレージ アカウントをリンクする
アプリケーション パッケージを使用するには、 Azure Storage アカウント を Batch アカウントにリンクする必要があります。 Batch サービスでは、関連付けられたストレージ アカウントを使って、アプリケーション パッケージが格納されます。 理想的には、Batch アカウントで特に使用するストレージ アカウントを作成する必要があります。
ストレージ アカウントをまだ構成していない場合、Batch アカウントの左側のナビゲーション メニューから [ アプリケーション ] を初めて選択すると、Azure portal に警告が表示されます。 ストレージ アカウントを Batch アカウントにリンクする必要がある場合:
- "このバッチ アカウント用に構成されたストレージ アカウントがありません" という 警告 ウィンドウを選択します。
- 次に、次のページで [ ストレージ アカウント セット... ] を選択します。
- [ ストレージ アカウント 情報] セクションの [ ストレージ アカウント の選択] リンクを選択します。
- [ストレージ アカウントの選択] ウィンドウの一覧で、このバッチ アカウントで使用する ストレージ アカウントを選択 します。
- 次に、ページの左上隅にある [保存] を選択します。
2 つのアカウントをリンクすると、Batch はリンクされたストレージ アカウントに格納されているパッケージをコンピューティング ノードに自動的にデプロイできます。
重要
ファイアウォール規則で構成された Azure Storage アカウント、または階層型名前空間が [有効] に設定されているアプリケーション パッケージは使用できません。
Batch サービスでは、Azure Storage を使用して、アプリケーション パッケージをブロック BLOB として格納します。 ブロック BLOB データには 通常どおり課金 され、各パッケージのサイズが最大ブロック BLOB サイズを超えることはできません。 詳細については、「BLOB ストレージのスケーラビリティとパフォーマンスのターゲット」を参照してください。 コストを最小限に抑えるには、アプリケーション パッケージのサイズと数を考慮し、非推奨のパッケージを定期的に削除してください。
新しいアプリケーションを追加する
新しいアプリケーションを作成するには、アプリケーション パッケージを追加し、一意のアプリケーション ID を指定します。
Batch アカウントで、左側のナビゲーション メニューから [アプリケーション ] を選択し、[ 追加] を選択します。
次の情報を入力してください。
- アプリケーション ID: 新しいアプリケーションの ID。
- バージョン": アップロードするアプリケーション パッケージのバージョン。
- アプリケーション パッケージ: アプリケーションの実行に必要なアプリケーション バイナリとサポート ファイルを含む .zip ファイル。
入力する アプリケーション ID と バージョン は、次の要件に従う必要があります。
- Windows ノードでは、ID には英数字、ハイフン、アンダースコアの任意の組み合わせを使用できる。 Linux ノードでは、英数字とアンダースコアのみ使用できる。
- 64 文字を超える文字を含めることはできません。
- Batch アカウント内で一意である必要があります。
- ID では大文字と小文字が維持され、区別はされない。
準備ができたら、 [送信] を選択します .zip ファイルが Azure Storage アカウントにアップロードされると、ポータルに通知が表示されます。 アップロードするファイルのサイズとネットワーク接続の速度によっては、このプロセスに時間がかかる場合があります。
現在のアプリケーションを表示する
Batch アカウントのアプリケーションを表示するには、左側のナビゲーション メニューで [ アプリケーション ] を選択します。
このメニュー オプションを選択すると、[ アプリケーション ] ウィンドウが開きます。 このウィンドウには、アカウント内の各アプリケーションの ID と次のプロパティが表示されます。
- パッケージ: このアプリケーションに関連付けられているバージョンの数。
- 既定のバージョン: 該当する場合は、アプリケーションのデプロイ時にバージョンが指定されていない場合にインストールされるアプリケーション のバージョン。
- 更新を許可する: パッケージの更新と削除を許可するかどうかを指定します。
コンピューティング ノード上のアプリケーション パッケージの ファイル構造 を確認するには、Azure portal で Batch アカウントに移動します。 [プール] を選択します。 次に、コンピューティング ノードを含むプールを選択します。 アプリケーション パッケージがインストールされているコンピューティング ノードを選択し、 アプリケーション フォルダーを開きます。
アプリケーションの詳細を表示する
アプリケーションの詳細を表示するには、[ アプリケーション] ウィンドウ で選択します。 左側のナビゲーション メニューの [設定] を選択して、アプリケーションを構成できます。
- 更新を許可する: アプリケーション パッケージを 更新または削除できるかどうかを示します。 既定値は [はい] です。 [いいえ] に設定すると、既存のアプリケーション パッケージを更新または削除することはできませんが、新しいアプリケーション パッケージのバージョンを追加することはできます。
- 既定のバージョン: バージョンが指定されていない場合にアプリケーションを展開するときに使用する既定のアプリケーション パッケージ。
- 表示名: Batch ソリューションがアプリケーションに関する情報を表示するときに使用できるフレンドリ名。 たとえば、この名前は、Batch を通じて顧客に提供するサービスの UI で使用できます。
新しいアプリケーション パッケージを追加する
既存のアプリケーションのアプリケーション パッケージ バージョンを追加するには、Batch アカウントの [アプリケーション] ページで アプリケーション を選択します。 その後、追加を選択します。
新しいアプリケーションの場合と同様に、新しいパッケージの バージョン を指定し、[ アプリケーション パッケージ] フィールドに .zip ファイルをアップロードして、[ 送信] を選択します。
アプリケーション パッケージを更新または削除する
既存のアプリケーション パッケージを更新または削除するには、Batch アカウントの [ アプリケーション ] ページでアプリケーションを選択します。 変更するアプリケーション パッケージの行の省略記号を選択します。 次に、実行するアクションを選択します。
[更新] を選択した場合は、新しい .zip ファイルをアップロードできます。 このファイルは、そのバージョン用にアップロードした以前の .zip ファイルを置き換えます。
[ 削除] を選択すると、そのバージョンの削除を確認するメッセージが表示されます。 [OK] を選択すると、Batch によって Azure Storage アカウントから .zip ファイルが削除されます。 アプリケーションの既定のバージョンを削除すると、そのアプリケーションの 既定のバージョン 設定が削除されます。
コンピューティング ノードにアプリケーションをインストールする
Azure portal でアプリケーション パッケージを管理する方法を学習しました。 これで、それらをコンピューティング ノードにデプロイし、Batch タスクで実行する方法を学習できます。
プール アプリケーション パッケージをインストールする
プール内のすべてのコンピューティング ノードにアプリケーション パッケージをインストールするには、プールの 1 つ以上のアプリケーション パッケージ参照を指定します。 プールに指定したアプリケーション パッケージは、プールに参加する各コンピューティング ノードと、再起動または再イメージ化された任意のノードにインストールされます。
Batch .NET では、新しいプールを作成するとき、または既存のプールを使用するときに、1 つ以上の CloudPool.ApplicationPackageReferences を指定します。 ApplicationPackageReference クラスは、プールのコンピューティング ノードにインストールするアプリケーション ID とバージョンを指定します。
// Create the unbound CloudPool
CloudPool myCloudPool =
batchClient.PoolOperations.CreatePool(
poolId: "myPool",
targetDedicatedComputeNodes: 1,
virtualMachineSize: "standard_d1_v2",
VirtualMachineConfiguration: new VirtualMachineConfiguration(
imageReference: new ImageReference(
publisher: "MicrosoftWindowsServer",
offer: "WindowsServer",
sku: "2019-datacenter-core",
version: "latest"),
nodeAgentSkuId: "batch.node.windows amd64");
// Specify the application and version to install on the compute nodes
myCloudPool.ApplicationPackageReferences = new List<ApplicationPackageReference>
{
new ApplicationPackageReference {
ApplicationId = "litware",
Version = "1.1001.2b" }
};
// Commit the pool so that it's created in the Batch service. As the nodes join
// the pool, the specified application package is installed on each.
await myCloudPool.CommitAsync();
重要
アプリケーション パッケージのデプロイが失敗した場合、Batch サービスはノードを 使用不可 としてマークし、そのノードで実行するタスクはスケジュールされません。 その場合は、ノードを再起動してパッケージのデプロイを再開します。 ノードを再起動すると、ノード上でタスクのスケジュールを再び設定することもできます。
タスク アプリケーション パッケージのインストール
プールと同様に、タスクのアプリケーション パッケージ参照を指定します。 タスクがノードで実行されるようにスケジュールされると、タスクのコマンド ラインが実行される直前にパッケージがダウンロードされ、抽出されます。 指定したパッケージとバージョンが既にノードにインストールされている場合、パッケージはダウンロードされず、既存のパッケージが使用されます。
タスク アプリケーション パッケージをインストールするには、タスクの CloudTask.ApplicationPackageReferences プロパティを 構成します。
CloudTask task =
new CloudTask(
"litwaretask001",
"cmd /c %AZ_BATCH_APP_PACKAGE_LITWARE%\\litware.exe -args -here");
task.ApplicationPackageReferences = new List<ApplicationPackageReference>
{
new ApplicationPackageReference
{
ApplicationId = "litware",
Version = "1.1001.2b"
}
};
インストールされているアプリケーションを実行する
プールまたはタスクに指定したパッケージがダウンロードされ、ノードの AZ_BATCH_ROOT_DIR
内の名前付きディレクトリに抽出されます。 Batch では、名前付きディレクトリへのパスを含む環境変数も作成されます。 タスク コマンド ラインでは、ノード上のアプリケーションを参照するときに、この環境変数を使用します。
Windows ノードでは、変数の形式は次のとおりです。
Windows:
AZ_BATCH_APP_PACKAGE_APPLICATIONID#version
Linux ノードでは、形式が若干異なります。 ピリオド (.)、ハイフン (-)、数字記号 (#) は、環境変数のアンダースコアにフラット化されます。 また、アプリケーション ID の大文字と小文字は保持されます。 例えば次が挙げられます。
Linux:
AZ_BATCH_APP_PACKAGE_applicationid_version
APPLICATIONID
version
は、デプロイ用に指定したアプリケーションとパッケージのバージョンに対応する値です。 たとえば、Windows ノードにアプリケーション ブレンダー のバージョン 2.7 をインストールするように指定した場合、タスク コマンド ラインはこの環境変数を使用してそのファイルにアクセスします。
Windows:
AZ_BATCH_APP_PACKAGE_BLENDER#2.7
Linux ノードでは、この形式で環境変数を指定します。 ピリオド (.)、ハイフン (-)、シャープ記号 (#) をアンダースコアにフラット化し、アプリケーション ID の大文字と小文字を維持します。
Linux:
AZ_BATCH_APP_PACKAGE_blender_2_7
アプリケーション パッケージをアップロードするときに、コンピューティング ノードにデプロイする既定のバージョンを指定できます。 アプリケーションの既定のバージョンを指定した場合は、アプリケーションを参照するときにバージョン サフィックスを省略できます。 アプリケーションのアップロードと管理に関するページに示すように、Azure portal の [アプリケーション] ウィンドウで既定のアプリケーション バージョンを指定できます。
たとえば、アプリケーション ブレンダーの既定のバージョンとして "2.7" を設定し、タスクが次の環境変数を参照している場合、Windows ノードではバージョン 2.7 が使用されます。
AZ_BATCH_APP_PACKAGE_BLENDER
次のコード スニペットは、 Blender アプリケーションの既定のバージョンを起動するタスク コマンド ラインの例を示しています。
string taskId = "blendertask01";
string commandLine =
@"cmd /c %AZ_BATCH_APP_PACKAGE_BLENDER%\blender.exe -args -here";
CloudTask blenderTask = new CloudTask(taskId, commandLine);
ヒント
コンピューティング ノードの環境設定の詳細については、「 タスクの環境設定」を参照してください。
プールのアプリケーション パッケージを更新する
既存のプールが既にアプリケーション パッケージで構成されている場合は、プールの新しいパッケージを指定できます。 これは、以下のようなことを意味します。
- Batch サービスは、プールに参加しているすべての新しいノードと、再起動または再イメージ化された既存のノードに、新しく指定されたパッケージをインストールします。
- パッケージ参照を更新するときにプールに既に存在するコンピューティング ノードは、新しいアプリケーション パッケージを自動的にインストールしません。 新しいパッケージを受信するには、これらのコンピューティング ノードを再起動するか、再イメージ化する必要があります。
- 新しいパッケージがデプロイされると、作成された環境変数に新しいアプリケーション パッケージ参照が反映されます。
この例では、既存のプールには、CloudPool.ApplicationPackageReferences の 1 つとして構成された Blender アプリケーションのバージョン 2.7 があります。 プールのノードをバージョン 2.76b で更新するには、新しいバージョンで新しい ApplicationPackageReference を指定し、変更をコミットします。
string newVersion = "2.76b";
CloudPool boundPool = await batchClient.PoolOperations.GetPoolAsync("myPool");
boundPool.ApplicationPackageReferences = new List<ApplicationPackageReference>
{
new ApplicationPackageReference {
ApplicationId = "blender",
Version = newVersion }
};
await boundPool.CommitAsync();
新しいバージョンが構成されたので、Batch サービスは、プールに参加している新しいノードにバージョン 2.76b をインストールします。 既にプール内にあるノードに 2.76b をインストールするには、再起動するか、再イメージ化します。 再起動されたノードは、以前のパッケージ展開のファイルを保持します。
Batch アカウント内のアプリケーションを一覧表示する
ApplicationOperations.ListApplicationSummaries メソッドを使用して、Batch アカウント内のアプリケーションとそのパッケージを一覧表示できます。
// List the applications and their application packages in the Batch account.
List<ApplicationSummary> applications = await batchClient.ApplicationOperations.ListApplicationSummaries().ToListAsync();
foreach (ApplicationSummary app in applications)
{
Console.WriteLine("ID: {0} | Display Name: {1}", app.Id, app.DisplayName);
foreach (string version in app.Versions)
{
Console.WriteLine(" {0}", version);
}
}
次のステップ
- Batch REST API は、アプリケーション パッケージを操作するためのサポートも提供します。 たとえば、インストールするパッケージを指定する方法については applicationPackageReferences 要素を参照し、アプリケーション情報を取得する方法については Applications を参照してください。
- Batch Management .NET を使用して Azure Batch アカウントとクォータをプログラムで管理する方法について説明します。 Batch 管理 .NET ライブラリでは、Batch アプリケーションまたはサービスのアカウント作成と削除機能を有効にすることができます。