このクイックスタートでは、Azure Batch の使用を開始する方法について説明します。そのために、Azure CLI コマンドとスクリプトを使用して Batch リソースを作成して管理します。 仮想マシンまたはコンピューティング ノードのプールを持つ Batch アカウントを作成します。 次に、プール ノードで実行されるタスクを含むジョブを作成して実行します。
このクイックスタートを完了すると、Batch サービスの主要な概念を理解し、より現実的でより大規模なワークロードで Batch を使用できるようになります。
前提条件
-
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 を実行してアップグレードします。 ローカル インストールを使用する場合は、適切なコマンドを使用して Azure にサインインします。
注
一部のリージョンとサブスクリプションの種類では、クォータ制限によって Batch アカウントまたはノードの作成が失敗したり、完了しなかったりする場合があります。 そのような場合には、無料でクォータの引き上げをリクエストできます。 詳しくは、「Batch サービスのクォータと制限」をご覧ください。
リソース グループを作成する
次の az group create コマンドを実行して、Azure リソース グループを作成します。 リソース グループは、このクイックスタートの Azure リソースを保持する論理コンテナーです。
export RANDOM_SUFFIX=$(openssl rand -hex 3)
export REGION="canadacentral"
export RESOURCE_GROUP="qsBatch$RANDOM_SUFFIX"
az group create \
--name $RESOURCE_GROUP \
--___location $REGION
結果:
{
"id": "/subscriptions/xxxxx/resourceGroups/qsBatchxxx",
"___location": "eastus2",
"managedBy": null,
"name": "qsBatchxxx",
"properties": {
"provisioningState": "Succeeded"
},
"tags": null,
"type": "Microsoft.Resources/resourceGroups"
}
ストレージ アカウントの作成
az storage account create コマンドを使用して、Batch アカウントにリンクする Azure ストレージ アカウントを作成します。 このクイックスタートではストレージ アカウントを使用しませんが、ほとんどの実際の Batch ワークロードでは、リンクされたストレージ アカウントを使用してアプリケーションをデプロイし、入力データと出力データを保存します。
次のコマンドを実行して、リソース グループにStandard_LRS SKU ストレージ アカウントを作成します。
export STORAGE_ACCOUNT="mybatchstorage$RANDOM_SUFFIX"
az storage account create \
--resource-group $RESOURCE_GROUP \
--name $STORAGE_ACCOUNT \
--___location $REGION \
--sku Standard_LRS
Batch アカウントを作成する
次の az batch account create コマンドを実行して、リソース グループに Batch アカウントを作成し、ストレージ アカウントにリンクします。
export BATCH_ACCOUNT="mybatchaccount$RANDOM_SUFFIX"
az batch account create \
--name $BATCH_ACCOUNT \
--storage-account $STORAGE_ACCOUNT \
--resource-group $RESOURCE_GROUP \
--___location $REGION
az batch account login コマンドを実行して、新しい Batch アカウントにサインインします。 Batch でアカウントを認証すると、このセッションの以降の az batch
コマンドでは、このアカウント コンテキストが使用されます。
az batch account login \
--name $BATCH_ACCOUNT \
--resource-group $RESOURCE_GROUP \
--shared-key-auth
コンピューティング ノードのプールの作成
az batch pool create コマンドを実行して、Batch アカウントに Linux コンピューティング ノードのプールを作成します。 次の例では、Ubuntu 20.04 LTS OS を実行する 2 つのStandard_A1_v2 サイズの VM で構成されるプールを作成します。 このノード サイズは、このクイックスタートの例において、パフォーマンスとコストのバランスが取れています。
export POOL_ID="myPool$RANDOM_SUFFIX"
az batch pool create \
--id $POOL_ID \
--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 $POOL_ID \
--query "{allocationState: allocationState}"
結果:
{
"allocationState": "resizing"
}
Batch がノードを割り当てて起動している間、プールは resizing
状態です。 プールの状態が変わらずに resizing
である間、ジョブとタスクを作成できます。 割り当ての状態が steady
となり、すべてのノードが実行されていると、プールはタスクを実行できるようになります。
ジョブの作成
az batch job create コマンドを使用して、プールで実行する Batch ジョブを作成します。 Batch ジョブは、1 つ以上のタスクの論理グループです。 ジョブには、実行元のプールなど、タスクに共通する設定が含まれます。 次の例では、最初はタスクがないジョブを作成します。
export JOB_ID="myJob$RANDOM_SUFFIX"
az batch job create \
--id $JOB_ID \
--pool-id $POOL_ID
ジョブ タスクを作成する
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 $JOB_ID \
--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 $JOB_ID \
--task-id myTask1
このコマンドの出力には、多くの詳細が含まれます。 たとえば、exitCode
が 0
の場合、タスクのコマンドが正常に完了したことを示します。
nodeId
は、タスクを実行したプール ノードの名前を示します。
タスク出力の表示
az batch task file list コマンドを使用して、タスクによってノードに作成されたファイルを一覧表示します。 次のコマンドでは、myTask1
によって作成されたファイルが一覧表示されます。
# Wait for task to complete before downloading output
echo "Waiting for task to complete..."
while true; do
STATUS=$(az batch task show --job-id $JOB_ID --task-id myTask1 --query "state" -o tsv)
if [ "$STATUS" == "running" ]; then
break
fi
sleep 10
done
az batch task file list --job-id $JOB_ID --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 $JOB_ID \
--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=myJob
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 サービスの主要な概念を理解できたので、より現実的でより大規模なワークロードで Batch を使用する準備ができました。 Azure Batch の詳細については、Azure Batch のチュートリアルを続行してください。