Azure Batch ワークロードを .NET アプリから管理する

完了

Azure Batch はリソースの集まりです。それを組み合わせることで、大規模かつ高性能な並列ソリューションを構築します。

ここでは .NET Core コンソール アプリケーションとして Azure Batch プロセス全体を管理するアプリを記述することにします。 最初に、このアプリにより、ペット動画がクラウドにアップロードされます。 次に、計算ノード (仮想マシン) で Azure Batch プールが作成されます。 次に、それらのノードで実行するジョブが作成されます。

各計算ノードで実行されるジョブには、入力ストレージ コンテナーにアップロードされているあらゆる動画のタスクが含まれています。 タスクにより、MP4 のペット動画が読み込まれ、それがアニメーション GIF に変換され、出力コンテナーにファイルが保存されます。 タスクでは、Azure Batch アカウントにアプリケーション パッケージとして保存されている ffmpeg ライブラリが参照されます。 そのプロセスを次の図に示します。

Diagram showing how an app can use Azure Storage and Azure Batch to run apps on compute nodes in pools.

Azure Batch は Azure Storage との組み合わせで使用されます。 Azure Storage からは、入力データのための場所、情報をログ記録し、監視するための場所、最終的な出力のストレージが提供されます。 Azure Batch で実行されるアプリケーションもそこに保管できますが、もっと柔軟な選択肢は Azure Batch のアプリケーション パッケージ機能を使うことです。

Azure Batch のコンポーネント:

  • Azure Batch アカウント:Azure Batch ソリューションに必要な次のリソースを保持するコンテナー:
    • アプリケーション パッケージ:アプリケーション パッケージを使って、バッチ内のタスクで使用できるアプリケーションを追加します。 Azure Batch アカウントには最大 20 個のアプリケーション パッケージを含めることができます。 会社のニーズに応じて、この上限を引き上げるように依頼することもできます。
    • プール:プールには、Batch ジョブを実行するエンジンであるコンピューティング ノードが含まれます。 作成時、ノードの数、サイズ、オペレーティング システムを指定します。 Azure Batch アカウントにはたくさんのプールを含めることができます。
    • Node: 各ノードには、実行するタスクを複数割り当てることができます。タスクは、Azure Batch で割り当てと管理を行います。 ノードは特定のプールに関連付けられています。
    • ジョブ:ジョブによりタスクの集まりが管理されます。 ジョブは特定のプールに関連付けられています。 Azure Batch アカウントではたくさんのジョブを持つことができます。
    • タスク:タスクによりアプリケーションが実行されます。 これらは、アプリケーション パッケージまたは Azure Storage コンテナーに格納することができます。 タスクにより入力ファイルが処理されます。完了時、出力コンテナーに書き込むことができます。

.NET アプリケーション内から Azure Batch コンポーネントの管理を始めるには、まず、Azure Batch アカウントと Azure Storage アカウントを作成する必要があります。 これらのアカウントは Azure portal、Azure PowerShell、または Azure CLI を使って作成できます。

アプリを使用して Batch ワークロードを管理する理由

アプリを使って Azure Batch 処理を制御すると、Azure Batch のタスクの実行と監視を自動化できます。 使用できるクライアント API が豊富にあるので、コードから Batch ワークフロー全体を制御できます。 バッチ処理が完了したら、アプリでは、作成されたリソースを自動削除できるため、Azure にかかるコストを低く抑えることができます。

Batch ワークロードによって数千単位のノードにスケーリングできるので、動画コード変換、天気予報、画像分析など、プロセッサ集中型のコンピューティング リソースを必要とするソリューションの実現性が高まります。 このようなユース ケースはすべて、プログラムで管理された場合、効率性が上がります。

バッチ クライアント サービス API

Microsoft はさまざまな言語の Batch API をリリースしています これらのクライアント ライブラリを使うと、認証、ファイルの処理、ノード プールの作成、タスクによるジョブの作成、実行中のタスクの状態の監視など、すべての Batch 処理コンポーネントをプログラムで制御できます。

.NET の場合、このような Batch API は NuGet パッケージとしてアプリに読み込まれます。 今回、ソリューションのファイルとアセットを管理するために Azure Storage クライアント ライブラリも使用します。

.NET アプリを使用して Azure Batch を制御する方法

このモジュールの残りの部分で実行する手順では、Azure portal を使って Azure Batch と Azure Storage のアカウントを作成します。 その後、タスクで使用できるように、ffmpeg アプリケーションをアプリケーション パッケージとしてアップロードします。 アプリでは、ffmepg を実行するタスクを使って動画を変換します。

Azure portal で Batch アカウントと Storage アカウントが作成されたら、Azure Batch と Azure Storage のクライアント ライブラリを使用する Cloud Shell で .NET Core コンソール アプリを作成する必要があります。

アプリでは、MP4 動画を Blob Storage にアップロードするために、Azure Storage クライアント ライブラリが使用されます。 次に、アプリで Batch クライアント ライブラリを使って 3 つのノード (Windows Server VM) を含むプールを作成し、ジョブを作成して、それらのノード上で実行するジョブに動画変換タスクを追加します。 タスクの実行中は、アプリでその状態を監視し、正常に完了したことを確認し、不要なリソースをクリアする必要があります。