演習 - 並列タスクを実行するために Azure Batch ジョブを CLI で作成する

完了

Azure CLI を使用すると、Azure Batch リソースをコマンド ラインから作成してデプロイすることができます。

あなたは非営利組織のソリューション アーキテクトとして、Azure 上で OCR シナリオ向けの Batch ソリューションの作成を開始したいと考えています。 最初の手順として、Batch アカウント、ワーカー ノードのプール、ジョブ、タスクの作成を、すべて Azure CLI を使用してテストします。

Azure CLI は、Azure リソースの作成と管理を行うための、クロスプラットフォーム コマンド ラインです。 一貫した az noun verb --properties 構文が使用されます。 Azure Batch を管理する CLI コマンドはこの規則に従います。そのため、すべてのコマンドが az batch verb --properties の形式となります。

重要

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

Azure Batch リソースを作成する

最初に、テスト シナリオ用の Azure Batch アカウントとワーカー ノードのプールを作成します。 次に、プールで実行する Batch ジョブとタスクを作成します。

新しいリソース グループを作成する

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

  2. 左側のメニューの [リソース グループ] を選択します。

  3. [+ 作成] を選択します。

  4. フォームを完了して演習用の新しいリソース グループを作成し、名前をメモしておきます。

Azure Batch アカウントを作成する

  1. ポータルで、トップ メニューの Cloud Shell アイコン (>_) を選択して Cloud Shell を開きます。 ターミナル ウィンドウの上部のドロップダウン メニューを使用して、Bash にいることを確認します。

  2. リソース グループとバッチ リソース用の環境変数を作成します。

    RESOURCE_GROUP=<your resource group>
    BATCH_ACCOUNT=batchaccount$RANDOM
    
  3. Cloud Shell で次のコマンドを実行して、Azure Batch アカウントを作成します。 次のいずれかの場所を選択します。

    westeurope,eastus,eastus2,westus,northcentralus,brazilsouth,northeurope,centralus,eastasia,japaneast,australiasoutheast,japanwest,koreasouth,koreacentral,southeastasia,southcentralus,australiaeast,southindia,centralindia,westindia,canadacentral,canadaeast,uksouth,ukwest,westcentralus,westus2,francecentral,southafricanorth
    
    az batch account create \
     --name $BATCH_ACCOUNT \
     --resource-group $RESOURCE_GROUP \
     --location <choose a location from the preceding list>
    
  4. 次のコマンドを実行して、Azure Batch アカウントにサインインします。

    az batch account login \
     --name $BATCH_ACCOUNT \
     --resource-group $RESOURCE_GROUP \
     --shared-key-auth
    
  5. Ubuntu 18.04 を実行している 3 台の Standard A1 v2 仮想マシンのプールを作成します。

    az batch pool create \
     --id mypool --vm-size Standard_A1_v2 \
     --target-dedicated-nodes 3 \
     --image canonical:ubuntuserver:18.04-LTS \
     --node-agent-sku-id "batch.node.ubuntu 18.04"  
    
  6. 次のコマンドを実行して、ノードの準備が完了しているか定期的に確認します。

    az batch pool show --pool-id mypool \
     --query "allocationState"
    

    このクエリによりノードが "steady" であると表示されれば、ノードは動作準備が完了しています。 "resizing" と表示された場合は、実際にプロビジョニング中です。 ノードの状態を複数回照会したい場合は、上方向キーを使用して Cloud Shell での最新のコマンドを繰り返すことができます。

  7. 次のコマンドを実行して、ノード上で実行される全タスクの論理グループである "Batch ジョブ" を作成します。

    az batch job create \
     --id myjob \
     --pool-id mypool
    
  8. 次のコマンドを実行して、Batch タスクを作成します。

    for i in {1..10}
    do
       az batch task create \
        --task-id mytask$i \
        --job-id myjob \
        --command-line "/bin/bash -c 'echo \$(printenv | grep \AZ_BATCH_TASK_ID) processed by; echo \$(printenv | grep \AZ_BATCH_NODE_ID)'"
    done
    

    このループにより一連の番号付き Batch タスクが作成されます。各タスクは、関係のあるタスク ID とノード ID に関する情報を出力します。 ここで何が起きているのかを詳細に検査することで、Azure Batch の動作方法の多様な特性を確認することができます。 タスクは、使用可能な容量とともにノード上に自動的にスケジュール設定されます。 ただし、どのタスクがどのノードで実行されているかに関する情報を示すために使用している環境変数 (AZ_BATCH_TASK_IDAZ_BATCH_NODE_ID) は、タスクを実行するために各ノード上に作成された既定のアカウントである 'タスク ユーザー' のコンテキストでのみ使用することができます。 また、--command-line 引数は shell のもとでは直接実行されないため、printenvgrep などのコマンドを使用するために /bin/bash -c を使用して明示的に shell を呼び出す必要があります。

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

  9. Batch ジョブを削除するには、Cloud Shell で次のコマンドを実行します。

    az batch job delete --job-id myjob -y