normalian blog

Let's talk about Microsoft Azure, ASP.NET and Java!

Azure Batch を試す際の TIPS を簡単にまとめてみた

ちょっと人に聞かれた際に久々に触ったので、振り返りを含めてちょっとまとめてみました。チュートリアル的な hello world は既存の公式ドキュメントを読めば良いと思うので、簡単な概要部分だけ紹介した後は簡単な TIPS 系を羅列していきたいと思っています。

まず、Azure Batch の概要となります。Azure Batch は task という形式で様々な粒度の処理を実行可能であり、スケジューリング機能等々を持っています。以下に Azure Batch のアーキテクチャ図を記載しています。

最初に Azure Batch アカウントを作成しますが、簡単な利用をする場合に重要となる用語は Pool, Job, Application となります。

  1. Pool :最初に作成する必要があり、様々な処理を実行するためのコンピュートリソースです。こちらは Azure になじみのある方なら VMSS の様なものと言えばわかりやすいかもしれません。図でも記載がある通り、既存の template image から OS を選択することもできますが、自身で作成した custom image の利用も可能です。
  2. Job :処理行うまとまりの単位になります。こちらには Job/Job Schedule という二種類があり、on-demand 実行をする job と定期実行をするための job の二種類が存在します。
  3. Application :自身が作成したカスタムアプリケーションを指します。zip 形式でアーカイブする必要があり、Azure Storage アカウント上に配置されることを想定しています。事前に Azure Batch アカウントに Azure Storage を紐づけるのを忘れないようにしましょう。

こちらのアーキテクチャについては以下の動画開始 100 秒位のところで図示されているので、そちらも参照すると良いと思います。

最初に Quotas タブを見よう

上記に記載した通り、最初に Pool を作成する必要がありますが、こちらは VM の SKU(Dv3 Series 等)を選択する必要があります。以下の画像でも表示されていますが、必要となる VM SKU の Quota が 0 の場合、Pool を作成してもリソースが割り当てられずに処理が実行されません。

Azure Batch アカウントの作成直後、こちらの Quota を確認し、必要な場合は Quota increase request をしてください。多少の時間がかかるので、これを最初にやるのがお勧めです。

Pool を作成する際の tips

様々な処理を実行するために必須な Pool を作成します。こちらも作成時に幾つかポイントがありますが、OS イメージの選択に幾つか方法があります。まずは以下の様に Marketplace から標準で提供されているものを選ぶパターン。

次に、以下の様に作成したカスタム VM イメージを利用することも可能です。今回は利用しませんでしたが、Docker イメージの利用も可能なようです。

次に、VM SKU の指定、ノード数等を指定するので、ここで指定する VM SKU は事前に Quota increase request を作成してください。

当然閉域網で処理を行いたいニーズも出てくると思いますが、コンピュートリソース単位(プール単位)で VNET 等の指定をすることが分かります。

Job を作成する際の TIPS

Job は実際にコマンドやプログラムを実行する単位である Task をグループ化したものになります。Job の作成時は以下の様に利用する Pool を指定することに加え、必要な場合は環境変数を指定することも可能です。

Job の配下に Task を作成する画面は以下の様になります。今回は以下の様に hello world と出力するだけの Task となります。管理者権限で実行可能なことに加え、冒頭で説明した Application Package も利用可能なことが分かります。

こちらを実際に実行すると以下の様にすぐ実行が完了し、特にエラー等が発生しなければ Completed になります。

実行が完了した task01 をクリックする詳細画面となり、標準出力・標準エラー出力がそれぞれファイルとして格納されていることが分かります。stdout.txt を開くと hello world が出力されていることが確認できます。

Application を利用する際の TIPS

せっかく Azure Batch を利用するので、OS 標準コマンドだけでなく作成したアプリケーションを利用したいこともあるでしょう。その場合、zip 形式にパッケージングしたファイルを Azure Storage にアップロードします。しかし、その前に zip ファイルを上げる先の Azure Storage を Azure Batch アカウントとリンクさせましょう。以下の画面の様になっていれば設定完了です。

今回の場合、Azure Storage にアップロードする zip ファイルは以下のようにパッケージしました。自作の python ファイルを含んでいます。

test01.zip
        readme.md
        test01.py

ポータルのウィザードに従って正常にアップロード出来れば以下の様になります。

Job のセクションで紹介した通り、Job 作成時にアップロードした Application を指定します。加えて以下の様にスクリプトを指定します。

bash -c 'python3 $AZ_BATCH_APP_PACKAGE_test01_1_0_0/test01.py'

指定した Application の zip ファイルは特定の作業ディレクトリに展開されています。ディレクトリ名を含む環境変数は以下の記事が参考になります。
learn.microsoft.com

Azure Monitor を利用した場合

Diagnostic Setting を有効化し、Log Analytics ワークスペースにすべての情報を転送する設定をしました。しばらく操作をした後、試しに実行すると以下の様に AzureDiagnostics, AzureMetrics, Usage の三つのテーブルが作成されていました。試しに AzureMetrics にクエリを発行したところ、ノード数がどの程度使われているかを見ている様です。

次に Usage にクエリを投げてみましょう。データは出ていますが、deprecated になっており、別のテーブルを利用することが推奨されています。

最後に AzureDiagnostics へのクエリを実行すると ServiceLog と AuditLog が出力されています。AuditLog については以下の様にポータル操作のログが出力されています。ServiceLog 側はノードの実行数等が出力されていました。