Azure Batch で Application Packages と Task Dependencies が利用可能に

執筆者: Karan Batta (Program Manager, Azure)

このポストは、3 月 22 日に投稿された Application Packages and Task Dependencies now available on Azure Batch の翻訳です。

 

昨年、Azure Batch というクラウド ベースのジョブ スケジューリング サービスがリリースされました。そしてこの拡張性の高いサービスと共に、高度な機能を含む Batch Apps のプレビュー版も公開されました。以前お伝えしていたとおり、私たちは Batch Apps のプレビュー機能を、一般公開されている Batch サービスに移植するために全力で取り組んでまいりました。そしてこのたび中でも人気の高かった Application Packages と Task Dependencies の 2 つの機能を移植しました。

Application Packages

各ワークロードには、実行可能ファイル、ライブラリ、追加のメタデータといったファイルのセットが必要になります。こうしたファイルのセットは、場合によってはワークロード固有であり、ジョブやタスクの実行前に Virtual Machines にダウンロードする必要があります。Application Packages 機能では、このようなファイル パッケージの管理やプール内のコンピューティング ノードへのデプロイを簡単に行うことができます。複数のバージョンをアップロードして管理したり、1 つまたは複数のアプリケーション パッケージをプール内のノードに自動的にデプロイしたりできるため、アプリケーションを構成するさまざまなファイルの管理が大幅に簡素化されます。さらに、Batch ではお客様のストレージ アカウントと連携してすべての細かい処理をバックグラウンドで行い、こうしたパッケージを安全に保存、デプロイするので、こうしたファイルを移動するために Azure Storage を管理する必要もなくなります。

アプリケーション パッケージは ZIP ファイルで、コンピューティング ノードで必要な任意の数のファイルを含めることができます。また、ストレージ アカウントのリンク、複数のバージョンのアップロード、既存のアプリケーションの削除、各アプリケーションの既定のバージョンの構成など、アプリケーションを管理することができます。これらの操作は Azure ポータルの [Batch Account] から簡単に実行できます。

f1fa73d9-9b48-41d1-9d70-2c5984024b9f

コンピューティング ノードへのアプリケーション パッケージのインストールは非常に簡単で、プールに対して 1 つ以上のアプリケーション パッケージの参照を指定します。これはプールの作成時に行うことが可能です。

 // バインドされていない CloudPool を作成する
CloudPool myCloudPool =
    batchClient.PoolOperations.CreatePool(poolId: "myPool",
                                          osFamily: "4",
                                          virtualMachineSize: "small",
                                          targetDedicated: "1");

// コンピューティング ノードにインストールするアプリケーションとバージョンを指定する
myCloudPool.ApplicationPackageReferences = new List<ApplicationPackageReference>
{
    new ApplicationPackageReference {
        ApplicationId = "litware",
        Version = "1.1001.2b" }
};

// プールをコミットして Batch サービスでプールを作成する。ノードがプールに追加されると、
// 指定されたアプリケーション パッケージが各ノードにインストールされる。
await myCloudPool.CommitAsync();

アプリケーション パッケージがプール内のコンピューティング ノードにインストールされたら、自動的に作成されるタスクの環境変数をコマンド ラインで使用することで、パッケージ内のファイルを実行できます。この変数の命名規則は、AZ_BATCH_APP_PACKAGE_appid#version です。ここで、appid はアプリケーション名を、version は実行するバージョンをそれぞれ表します。また、Azure ポータルで既定のバージョンを選択している場合は、AZ_BATCH_APP_PACKAGE_appid のように appid のみを参照することも可能です。

Task Dependencies

多くのジョブやワークロードでは、タスク間の依存関係が必要になります。Batch Apps ではこれを Stages によってサポートしていました。今回 Batch に追加された Task Dependencies 機能は、Batch Apps の Stages を複製したり、タスク間の任意の依存関係を表すために使用します。この機能では、タスク間の関係を設定し、アクティビティや作業の実行順序を指定することが可能です。タスクの前後には複数のタスクを指定できます。

この機能を活用すると、ポイント クラウドを生成する前処理やレンダリング タスクを含めたり、事前にレンダリングされたタスクに依存するタスクのフレームを指定したりできるほか、個々のフレームやタスクをマージ タスクに統合して最終的な出力を得ることもできます。依存関係を呼び出すには、前処理タスクの ID を使用します。

 frameTask.DependsOn = TaskDependencies.OnId("prerender"); 

また、タスクをさまざまなタスクに依存させることも可能です。たとえば、あるマージ タスクを先に完了する他のすべてのタスクに依存させることができます。そのためには、次のように「OnIdRange」という別のヘルパー メソッドを呼び出します。

 makeMovieTask.DependsOn = TaskDependencies.OnIdRange(startFrame, endFrame); 

これらの機能は、Batch サービスをさらに強化する優れた機能で、開発者の皆様による定型コードの記述やプラミングの負担を減らし、市場投入までの時間を短縮するうえで役立ちます。新機能は新しい Azure.Batch 3.1 NuGet パッケージに追加されており、対応する機能を Azure ポータルでご利用いただけます。また、こちらのページ (英語) からサンプル コードもダウンロードできます。

Application Packages および Task Dependencies の機能をぜひお試しいただき、ご意見、ご感想を wabatch@microsoft.com または公式フォーラム (英語) までお寄せください。

最後までお読みいただきありがとうございました!

Azure Batch チーム