快速入門:使用 Azure CLI 建立 Batch 帳戶並執行作業

本快速入門說明如何使用 Azure CLI 命令和指令碼來開始使用 Azure Batch 建立和管理 Batch 資源。 您可以建立具有虛擬機器集區或計算節點的 Batch 帳戶。 接著,您可以建立並執行可在集區節點上執行工作的作業。

完成本快速入門之後,您將了解 Batch 服務的重要概念,並準備好搭配更實際、更大規模的工作負載使用 Batch。

必要條件

  • 如果您沒有 Azure 訂用帳戶,請在開始之前先建立 Azure 免費帳戶

  • Azure Cloud Shell 或 Azure CLI。

    您可在 Azure Cloud Shell 中以互動方式執行此快速入門中的 Azure CLI 命令。 若要在 Cloud Shell 中執行命令,請選取程式碼區塊右上角的 [開啟 Cloudshell]。 選取 [複製] 以複製程式碼,並將其貼至 Cloud Shell 以加以執行。 您也可從 Azure 入口網站內執行 Cloud Shell。 Cloud Shell 一律使用最新版本的 Azure CLI。

    此外,您也可在本機安裝 Azure CLI 以執行命令。 本文中的步驟需要 Azure CLI 2.0.20 或更新版本。 執行 az version 以查看您安裝的版本和相依程式庫,然後執行 az upgrade 以升級。 如果您使用的是本機安裝,請使用 az login 命令登入 Azure。

注意

對於某些區域和訂用帳戶類型,配額限制可能會導致 Batch 帳戶或節點建立失敗或未完成。 在此情況下,您可以免費要求增加配額。 如需詳細資訊,請參閱 Batch 服務配額和限制

建立資源群組

執行下列 az group create 命令,以在 eastus2 Azure 區域中建立名為 qsBatch 的 Azure 資源群組。 資源群組是一個邏輯容器,可保存本快速入門的 Azure 資源。

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

建立儲存體帳戶

使用 az storage account create 命令來建立 Azure 儲存體帳戶,以連結至 Batch 帳戶。 雖然本快速入門並未使用儲存體帳戶,但大部分的實際 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 計算節點的集區。 下列範例會建立名為 myPool 的集區,其中包含執行 Ubuntu 20.04 LTS 作業系統的兩個 Standard_A1_v2 大小 VM。 此節點大小可為此快速範例提供良好的效能與成本平衡。

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 作業是一或多項工作的邏輯群組。 作業包含工作的常見設定,例如要執行的集區。 下列範例會在 myPool 上建立名為 myJob 的作業,而該作業一開始沒有任何工作。

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

建立作業的工作

Batch 提供幾種方法將應用程式和指令碼部署至計算節點。 使用 az batch task create 命令來建立要在作業中執行的工作。 每個工作都有一個命令列,用來指定應用程式或指令碼。

下列 Bash 指令碼會建立四個相同的平行工作,名稱為 myTask1myTask4。 工作命令列會顯示計算節點上的 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 教學課程。