演習 - CLI で Azure Batch ジョブを監視する

完了

Azure Batch を使用して集中型タスクを実行している場合、タスクがどのように進行しているかを確認したいと思うことが頻繁にあるでしょう。

非営利組織のソリューション アーキテクトであるあなたは、Azure Batch で起きていることにアクセスする方法を必要としています。 ノードとタスクが動作しているのか、どの程度進行しているのか、ダウンロード可能な出力ファイルが生成されたのかについても、確認する必要があります。

このユニットでは、前のユニットのジョブと類似したジョブの作成、そのタスクの進行状況の確認、タスクにより出力として生成されたファイルのダウンロードを、すべて Azure CLI を使用して行います。

重要

このモジュール内の演習は任意です。 演習を完了するには、ご自分の Azure サブスクリプションが必要です。

CLI を使用してタスクを監視する

コンピューティング ノードの作成と管理、そしてこれらのノード上で実行されるジョブのスケジュール設定のすべての詳細が、Azure Batch により処理されます。

前のユニットでタスクを作成したときは、Azure Batch によりタスクがプールで実行されるようキューに入れられました。 ノードに使用可能な容量があると判断されると、Azure Batch によりタスクがそのノード上で実行されるようスケジュール設定されました。

前のユニットの最後ではそのジョブを削除し、結果としてそのジョブのタスクもすべて削除されました。 これから新しいジョブとタスクを作成します。 注目すべきは、タスクの削除と再作成の操作は非常に速く実行できるため、Azure Batch でのさまざまな実験とプロジェクトを簡単に分けることができる、ということです。 一方、上位レベルの Batch エンティティ (アカウントなど) を削除して作成し直すと、Batch プールを再作成して仮想マシンを割り当てる必要があるため、さらに時間がかかります。

  1. Azure Portal にサインインします。

  2. 上部のメニューの Cloud Shell アイコン (>_) を選んで Cloud Shell を開きます。

  3. 新しい Batch ジョブを作成するには、Cloud Shell で次のコマンドを実行します。

    az batch job create \
     --id myjob2 \
     --pool-id mypool
    

    前のユニットのジョブとの競合を避けるため、別の名前を付けました。削除のスケジュールが設定されていますが、必ずしもまだ削除されたわけではないためです。

  4. 次のコマンドを実行して、この新しいジョブ内に Batch タスクを作成します。

    for i in {1..10}
    do
       az batch task create \
        --task-id mytask$i \
        --job-id myjob2 \
        --command-line "/bin/bash -c 'echo \$(printenv | grep \AZ_BATCH_TASK_ID) processed by; echo \$(printenv | grep \AZ_BATCH_NODE_ID)'"
    done
    
  5. Cloud Shell で次のコマンドを実行して、作成したタスクのうちの 1 つの状態を表示します。

    az batch task show \
     --job-id myjob2 \
     --task-id mytask1
    

CLI を使用してタスクの出力をダウンロードする

バッチ ジョブが正しく実行されたことを確認するには、作成されたファイルをダウンロードして確認します。

  1. Cloud Shell で次のコマンドを実行して、作成したタスクのうちの 1 つにより生成された全ファイルの表を表示します。

    az batch task file list \
     --job-id myjob2 \
     --task-id mytask5 \
     --output table
    

    Note

    The files of the specified task cannot be accessed as the task state is still active というエラー メッセージが表示される場合は、数分待ってからコマンドをもう一度実行します。

  2. Cloud Shell で次のコマンドを実行して、タスクの出力の専用ディレクトリを作成してそこに移動します。

    mkdir taskoutputs && cd taskoutputs
    
  3. Cloud Shell で次のコマンドを実行して、作成したすべてのタスクにより生成されたファイルをダウンロードします。

    for i in {1..10}
    do
    az batch task file download \
        --job-id myjob2 \
        --task-id mytask$i \
        --file-path stdout.txt \
        --destination ./stdout$i.txt
    done
    

    タスクには既定の作業ディレクトリがあり、その作業内容は既定では stdout.txt に送られます。 ループすることで stdout.txtstdout.txt の番号付きバージョンにリダイレクトでき、それぞれで特定のタスクの作業と実行に使われたノードが表示されます。

  4. 次のコマンドを実行して、サンプルで生成されたいくつかのファイルのテキストの内容を表示します。

    cat stdout1.txt && cat stdout2.txt
    

    この出力では、Batch スケジューラーでの処理時にさまざまノードにスケジュール設定されているさまざまなタスクが表示されます。

    ここでも、Azure Batch アカウントとワーカー ノードのプールは次のユニットで使用するために残しておきますが、Batch ジョブは削除します。 Batch ジョブはその Batch タスクのコンテナーとして機能するため、これらのタスクも削除されます。

  5. 次のコマンドを使って、Batch ジョブを削除します。

    az batch job delete --job-id myjob2 -y