クイックスタート: Azure CLI を使用して Batch アカウントを作成し、ジョブを実行する

このクイックスタートでは、Azure Batch の使用を開始する方法について説明します。そのために、Azure CLI コマンドとスクリプトを使用して Batch リソースを作成して管理します。 仮想マシンまたはコンピューティング ノードのプールを持つ Batch アカウントを作成します。 次に、プール ノードで実行されるタスクを含むジョブを作成して実行します。

このクイックスタートを完了すると、Batch サービスの主要な概念を理解し、より現実的でより大規模なワークロードで Batch を使用できるようになります。

前提条件

  • Azure サブスクリプションをお持ちでない場合は、開始する前に Azure 無料アカウントを作成してください。

  • Azure Cloud Shell または Azure CLI。

    このクイックスタートの Azure CLI コマンドは、Azure Cloud Shell で対話形式で実行できます。 Cloud Shell でコマンドを実行するには、コード ブロックの右上隅にある [Cloudshell を開く] を選択します。 [コピー] を選択してコードをコピーし、Cloud Shell に貼り付けて実行します。 Azure portal 内から Cloud Shell を実行することもできます。 Cloud Shell では、常に最新バージョンの Azure CLI が使用されます。

    また、Azure CLI をローカルにインストールしてコマンドを実行することもできます。 この記事の手順では、Azure CLI バージョン 2.0.20 以降が必要です。 az version を実行して、インストールされているバージョンと依存ライブラリを確認し、az upgrade を実行してアップグレードします。 ローカル インストールを使用する場合は、az login コマンドを使用して Azure にサインインします。

Note

一部のリージョンとサブスクリプションの種類では、クォータ制限によって Batch アカウントまたはノードの作成が失敗したり、完了しなかったりする場合があります。 そのような場合には、無料でクォータの引き上げをリクエストできます。 詳しくは、「Batch サービスのクォータと制限」をご覧ください。

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

次の az group create コマンドを実行して、eastus2 Azure リージョンに qsBatch という名前の Azure リソース グループを作成します。 リソース グループは、このクイックスタートの Azure リソースを保持する論理コンテナーです。

az group create \
    --name qsBatch \
    --location eastus2

ストレージ アカウントの作成

az storage account create コマンドを使用して、Batch アカウントにリンクする Azure ストレージ アカウントを作成します。 このクイックスタートではストレージ アカウントを使用しませんが、ほとんどの実際の Batch ワークロードでは、リンクされたストレージ アカウントを使用してアプリケーションをデプロイし、入力データと出力データを保存します。

次のコマンドを実行して、リソース グループに mybatchstorage という名前の Standard_LRS SKU ストレージ アカウントを作成します。

az storage account create \
    --resource-group qsBatch \
    --name mybatchstorage \
    --location eastus2 \
    --sku Standard_LRS

Batch アカウントを作成する

次の az batch account create コマンドを実行して、リソース グループに mybatchaccount という名前の Batch アカウントを作成し、それを mybatchstorage ストレージ アカウントにリンクします。

az batch account create \
    --name mybatchaccount \
    --storage-account mybatchstorage \
    --resource-group qsBatch \
    --location eastus2

az batch account login コマンドを実行して、新しい Batch アカウントにサインインします。 Batch でアカウントを認証すると、このセッションの以降の az batch コマンドでは、このアカウント コンテキストが使用されます。

az batch account login \
    --name mybatchaccount \
    --resource-group qsBatch \
    --shared-key-auth

コンピューティング ノードのプールの作成

az batch pool create コマンドを実行して、Batch アカウントに Linux コンピューティング ノードのプールを作成します。 次の例では、Ubuntu 20.04 LTS OS を実行する 2 つの Standard_A1_v2 サイズの VM で構成される myPool という名前のプールを作成します。 このノード サイズは、このクイックスタートの例において、パフォーマンスとコストのバランスが取れています。

az batch pool create \
    --id myPool \
    --image canonical:0001-com-ubuntu-server-focal:20_04-lts \
    --node-agent-sku-id "batch.node.ubuntu 20.04" \
    --target-dedicated-nodes 2 \
    --vm-size Standard_A1_v2

Batch によってすぐにプールが作成されますが、コンピューティング ノードを割り当てて開始するには数分かかります。 プールの状態を確認するには、az batch pool show コマンドを使用します。 このコマンドによってプールのすべてのプロパティが表示されるため、特定のプロパティを照会できます。 次のコマンドは、プールの割り当て状態を照会します。

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

Batch がノードを割り当てて起動している間、プールは resizing 状態です。 プールの状態が変わらずに resizing である間、ジョブとタスクを作成できます。 割り当ての状態が steady となり、すべてのノードが実行されていると、プールはタスクを実行できるようになります。

ジョブの作成

az batch job create コマンドを使用して、プールで実行する Batch ジョブを作成します。 Batch ジョブは、1 つ以上のタスクの論理グループです。 ジョブには、実行元のプールなど、タスクに共通する設定が含まれます。 次の例では、初期状態ではタスクがない myJob という名前のジョブを myPool で作成します。

az batch job create \
    --id myJob \
    --pool-id myPool

ジョブ タスクを作成する

Batch には、アプリやスクリプトを計算ノードにデプロイする複数の方法が用意されています。 az batch task create コマンドを使用して、ジョブで実行するタスクを作成します。 各タスクには、アプリまたはスクリプトを指定するコマンド ラインがあります。

次の Bash スクリプトでは、myTask1 から myTask4 という名前で、同一の並列タスクが 4 つ作成されます。 タスクのコマンド ラインによって、コンピューティング ノードの Batch 環境変数が表示され、90 秒待機します。

for i in {1..4}
do
   az batch task create \
    --task-id myTask$i \
    --job-id myJob \
    --command-line "/bin/bash -c 'printenv | grep AZ_BATCH; sleep 90s'"
done

コマンドの出力に、各タスクの設定が表示されます。 Batch は、これらのタスクをコンピューティング ノードに配布します。

タスクの状態の表示

タスクを作成すると、Batch はそのタスクをプールで実行するためにキューに入れます。 ノードが使用可能になると、ノードでタスクが実行されます。

az batch task show コマンドを使用して、Batch タスクの状態を表示します。 次の例では、myTask1 の状態に関する詳細が表示されます。

az batch task show \
    --job-id myJob \
    --task-id myTask1

このコマンドの出力には、多くの詳細が含まれます。 たとえば、exitCode0 の場合、タスクのコマンドが正常に完了したことを示します。 nodeId は、タスクを実行したプール ノードの名前を示します。

タスク出力の表示

az batch task file list コマンドを使用して、タスクによってノードに作成されたファイルを一覧表示します。 次のコマンドでは、myTask1 によって作成されたファイルが一覧表示されます。

az batch task file list \
    --job-id myJob \
    --task-id myTask1 \
    --output table

結果は次の出力のようになります。

Name        URL                                                                                       Is Directory    Content Length
----------  ----------------------------------------------------------------------------------------  --------------  ----------------
stdout.txt  https://mybatchaccount.eastus2.batch.azure.com/jobs/myJob/tasks/myTask1/files/stdout.txt  False                  695
certs       https://mybatchaccount.eastus2.batch.azure.com/jobs/myJob/tasks/myTask1/files/certs       True
wd          https://mybatchaccount.eastus2.batch.azure.com/jobs/myJob/tasks/myTask1/files/wd          True
stderr.txt  https://mybatchaccount.eastus2.batch.azure.com/jobs/myJob/tasks/myTask1/files/stderr.txt  False                    0

az batch task file download コマンドを使用すると、出力ファイルがローカル ディレクトリにダウンロードされます。 次の例を実行して stdout.txt ファイルをダウンロードします。

az batch task file download \
    --job-id myJob \
    --task-id myTask1 \
    --file-path stdout.txt \
    --destination ./stdout.txt

テキスト エディターで標準出力ファイルの内容を確認できます。 次の例は、通常の stdout.txt ファイルを示しています。 このタスクの標準出力では、ノードに設定されている Azure Batch の環境変数が示されます。 Batch ジョブ タスクのコマンド ラインで、およびコマンド ラインで実行されるアプリとスクリプトで、これらの環境変数を参照できます。

AZ_BATCH_TASK_DIR=/mnt/batch/tasks/workitems/myJob/job-1/myTask1
AZ_BATCH_NODE_STARTUP_DIR=/mnt/batch/tasks/startup
AZ_BATCH_CERTIFICATES_DIR=/mnt/batch/tasks/workitems/myJob/job-1/myTask1/certs
AZ_BATCH_ACCOUNT_URL=https://mybatchaccount.eastus2.batch.azure.com/
AZ_BATCH_TASK_WORKING_DIR=/mnt/batch/tasks/workitems/myJob/job-1/myTask1/wd
AZ_BATCH_NODE_SHARED_DIR=/mnt/batch/tasks/shared
AZ_BATCH_TASK_USER=_azbatch
AZ_BATCH_NODE_ROOT_DIR=/mnt/batch/tasks
AZ_BATCH_JOB_ID=myJobl
AZ_BATCH_NODE_IS_DEDICATED=true
AZ_BATCH_NODE_ID=tvm-257509324_2-20180703t215033z
AZ_BATCH_POOL_ID=myPool
AZ_BATCH_TASK_ID=myTask1
AZ_BATCH_ACCOUNT_NAME=mybatchaccount
AZ_BATCH_TASK_USER_IDENTITY=PoolNonAdmin

リソースをクリーンアップする

Batch のチュートリアルとサンプルを続ける場合は、このクイック スタートで作成した Batch アカウントとリンクされているストレージ アカウントを使用できます。 Batch アカウント自体に料金は発生しません。

プールとノードでは、ジョブが実行されていない場合でも、ノードの実行中は料金が発生します。 プールが不要になったら、az batch pool delete コマンドを使用して削除します。 プールを削除すると、ノード上のすべてのタスク出力とノード自体が削除されます。

az batch pool delete --pool-id myPool

このクイックスタートで作成したリソースが不要になったら、az group delete コマンドを使用して、リソース グループとそのすべてのリソースを削除できます。 リソース グループとストレージ アカウント、Batch アカウント、ノード プール、すべての関連リソースを削除するには、次のコマンドを実行します。

az group delete --name qsBatch

次のステップ

このクイックスタートでは、Batch アカウントとプールを作成し、Batch ジョブとタスクを作成して実行し、ノードからのタスク出力を確認しました。 Batch サービスの主要な概念を理解できたので、より現実的でより大規模なワークロードで Batch を使用する準備ができました。 Azure Batch の詳細については、Azure Batch のチュートリアルを続行してください。