.NET クライアント ライブラリを使用し、Batch アカウントにアクセスする

完了

前のユニットでは、Azure Batch アカウントと Azure Storage アカウントを作成しました。 次に、ffmpeg をアプリケーションとしてアップロードし、Batch ジョブでそれをタスクに使用できるようにしました。 今回のシナリオをもう一度確認しましょう。

MP4 動画ファイルをアニメーション GIF に変換するプロセスを自動化します。 これを行うには、変換する動画ファイルをアップロードし、アップロードされたすべてのファイルに対して並列で変換を開始し、進行状況を監視し、最後に結果をダウンロードできるアプリを作成します。

このユニットでは、前の演習で作成した Batch アカウントと Storage アカウントにアクセスするために利用できる Azure Batch クライアント ライブラリについて確認します。

Azure のクライアント ライブラリ

2 つの NuGet パッケージをアプリにインポートする必要があります。 1 つ目は、Azure Batch クライアント ライブラリ Microsoft.Azure.Batch です。 このライブラリを使用し、Azure Batch プールを作成し、削除し、ワークロード ジョブを作成し、削除し、タスクを作成し、削除し、実行中のタスクを監視します。

このソリューションで使う次のライブラリは、Azure Storage クライアント ライブラリ Microsoft.Azure.Storage.Blob です。これにより、Azure Storage アカウントに接続してファイルを管理できるようになります。 このライブラリを使用し、Blob Storage コンテナーのファイルを管理します。 アプリはアップロードされたすべての動画のフォルダーをスキャンし、タスクの変換された動画を書き込むためのアクセス権をジョブに与えます。

Azure Batch Management ライブラリ Microsoft.Azure.Management.Batch は 3 番目のライブラリですが、Batch アカウントと Storage アカウントを手動で作成したため、アプリには必要ありません。

次のユニットで、dotnet add package コマンドを使って必要な NuGet パッケージを追加します。

一般的な使用パターン

上記のライブラリを使ってバッチ プロセスを設定する一般的な方法は次のとおりです。

  1. Batch Service のアカウントを作成する (Batch Management API)。
  2. Storage アカウントを作成する (Storage API)。
  3. BLOB クライアントを作成し、ファイル処理を管理する (Storage API)。
  4. 処理するファイルをアップロードする (Storage API)。
  5. コンピューティング ノードのプールを作成する (Batch API)。
  6. それらのノードで実行するジョブを作成する (Batch API)。
  7. 実行するジョブにタスクを追加する (Batch API)。
  8. タスクの進捗状況を監視する (Batch API)。
  9. 完了後、処理済みのファイルをダウンロードする (Storage API)。
  10. 入力ストレージ コンテナーを削除し、プールを削除し、ジョブを削除する (Batch API および Storage API)。

Azure Batch プール

Azure Batch の強力な機能は、リソースのコンピューティングを管理するしくみにあります。 リソースのプールを定義することで、特定の数のノードに設定できるという柔軟性が Azure Batch に与えられます。 これは、処理サイズが明確に定義されており、既知の固定コストを持つという要件がある場合に適したオプションです。 もう 1 つの選択肢は、定義した計算式に基づいて自動的にスケーリングすることをプールに許可することです。 この方法は需要の変動を考慮に入れることができ、その需要に合わせてアプリケーションをスケーリングできます。 この方法には、コストを可能な限り低く抑えることができるという追加的な利点もあります。

Azure Batch プールを作成するときは、次の属性を指定します。

  • ターゲット ノード数 (既定の上限 100)
  • ノードのオペレーティング システムとバージョン (さまざまな Windows イメージと Linux イメージを利用可能)
  • ノードの種類: 専用または低優先度 (専用ノードは高価ですが、割り込まれることはありません。低優先度ノードは、リージョン内の余剰容量を利用するため安価ですが、他の場所でリソースが必要な場合はタスクが一時停止される可能性があります)
  • CPU、メモリ、ストレージ サイズなどのノードのパフォーマンス
  • 自動スケーリング ポリシー (スケーリングは、使用中の CPU の割合を基準にするなど、指定した数式によって制御されます)
  • タスクのスケジューリング ポリシー (ノードが並列で実行できるタスクの最大数を制御し、ノード間でタスクを配分する方法を選択します)
  • ノードの起動時に実行するタスクを開始します (必須アプリケーションのインストールなど、タスクを実行できるようにノードを設定する目的で使用されます)
  • ネットワークの構成 (サブネットと VNet のオプション)
  • アプリケーション パッケージ (プール内のすべてのノードにアプリケーションを簡単にデプロイできます)