Batch 是一項全代管服務,可讓您在 Compute Engine 虛擬機器 (VM) 執行個體中排定時間、排入佇列和執行批次處理工作負載。Batch 會代您佈建資源及管理容量,讓您大規模執行批次工作負載。
Workflows 可讓您按照使用 Workflows 語法定義的順序,執行所需服務。
在本教學課程中,您將使用 Batch 的 Workflows 連接器,排程及執行 Batch 工作,在兩部 Compute Engine VM 上平行執行六項工作。同時使用 Batch 和 Workflows,可結合兩者的優點,有效佈建及調度整個程序。
建立 Artifact Registry 存放區
建立存放區來儲存 Docker 容器映像檔。
主控台
前往 Google Cloud 控制台的「Repositories」頁面。
按一下
「Create Repository」(建立存放區)。輸入「containers」做為存放區名稱。
在「格式」部分選擇「Docker」。
在「位置類型」中選擇「區域」。
在「Region」(區域) 清單中選取「us-central1」。
點選「建立」。
gcloud
執行下列指令:
gcloud artifacts repositories create containers \
--repository-format=docker \
--location=us-central1
您已在 us-central1
區域建立名為 containers
的 Artifact Registry 存放區。如要進一步瞭解支援的地區,請參閱「Artifact Registry 地區」一文。
取得程式碼範例
Google Cloud 將本教學課程的應用程式原始碼儲存在 GitHub 中。您可以複製該存放區或下載範例。
將應用程式存放區範例複製到本機電腦中:
git clone https://github.com/GoogleCloudPlatform/batch-samples.git
或者,您也可以下載
main.zip
檔案中的範例,然後解壓縮該檔案。變更為包含範例程式碼的目錄:
cd batch-samples/primegen
您現在已在開發環境中取得應用程式的原始碼。
使用 Cloud Build 建構 Docker 映像檔
Dockerfile
包含使用 Cloud Build 建構 Docker 映像檔所需的資訊。執行下列指令來建構:
gcloud builds submit \
-t us-central1-docker.pkg.dev/PROJECT_ID/containers/primegen-service:v1 PrimeGenService/
將 PROJECT_ID
替換為專案 ID。 Google Cloud
建構完成時,畫面會顯示類似以下的輸出:
DONE
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
ID: a54818cc-5d14-467b-bfda-5fc9590af68c
CREATE_TIME: 2022-07-29T01:48:50+00:00
DURATION: 48S
SOURCE: gs://project-name_cloudbuild/source/1659059329.705219-17aee3a424a94679937a7200fab15bcf.tgz
IMAGES: us-central1-docker.pkg.dev/project-name/containers/primegen-service:v1
STATUS: SUCCESS
您已使用 Dockerfile 建構名為 primegen-service
的 Docker 映像檔,並將該映像檔推送至名為 containers
的 Artifact Registry 存放區。
部署工作流程,排定及執行 Batch 工作
下列工作流程會排定及執行 Batch 工作,在兩個 Compute Engine VM 上以六項工作並行執行 Docker 容器。結果是產生六批質數,並儲存在 Cloud Storage bucket 中。
控制台
前往 Google Cloud 控制台的「Workflows」頁面。
按一下
「建立」。輸入新工作流程的名稱,例如
batch-workflow
。在「Region」(區域) 清單中選取「us-central1」。
選取先前建立的「服務帳戶」。
點選「下一步」。
在工作流程編輯器中,輸入下列工作流程定義:
YAML
JSON
按一下 [Deploy] (部署)。
gcloud
為工作流程建立原始碼檔案:
touch batch-workflow.JSON_OR_YAML
視工作流程的格式而定,以
yaml
或json
取代JSON_OR_YAML
。在文字編輯器中,將下列工作流程複製到原始碼檔案:
YAML
JSON
輸入下列指令來部署工作流程:
gcloud workflows deploy batch-workflow \ --source=batch-workflow.yaml \ --location=us-central1 \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
將
SERVICE_ACCOUNT_NAME
改成您先前建立的服務帳戶名稱。
執行工作流程
執行工作流程時,系統會執行與該工作流程相關聯的目前工作流程定義。
控制台
前往 Google Cloud 控制台的「Workflows」頁面。
在「Workflows」頁面中,按一下「batch-workflow」工作流程,前往詳細資料頁面。
在「工作流程詳細資料」頁面中,按一下 play_arrow「執行」。
再次按一下「執行」。
工作流程執行作業應會在幾分鐘內完成。
在「輸出」窗格中查看工作流程結果。
結果應如下所示:
{ "bucket": "project-name-job-primegen-TIMESTAMP", "jobId": "job-primegen-TIMESTAMP" }
gcloud
執行工作流程:
gcloud workflows run batch-workflow \ --location=us-central1
工作流程執行作業應會在幾分鐘內完成。
您可以檢查長時間執行的作業狀態。
如要取得上次完成執行的狀態,請執行下列指令:
gcloud workflows executions describe-last
結果應類似於以下內容:
name: projects/PROJECT_NUMBER/locations/us-central1/workflows/batch-workflow/executions/EXECUTION_ID result: '{"bucket":"project-name-job-primegen-TIMESTAMP","jobId":"job-primegen-TIMESTAMP"}' startTime: '2022-07-29T16:08:39.725306421Z' state: SUCCEEDED status: currentSteps: - routine: main step: returnResult workflowRevisionId: 000001-9ba
列出輸出值區中的物件
您可以列出 Cloud Storage 輸出值區中的物件,確認結果是否符合預期。
控制台
- 在 Google Cloud 控制台,前往「Cloud Storage bucket」頁面。
在值區清單中,點選要查看內容的值區名稱。
結果應類似於以下內容,總共有六個檔案,每個檔案列出 10,000 個質數:
primes-1-10000.txt primes-10001-20000.txt primes-20001-30000.txt primes-30001-40000.txt primes-40001-50000.txt primes-50001-60000.txt
gcloud
擷取輸出 bucket 名稱:
gcloud storage ls
輸出結果會與下列內容相似:
gs://PROJECT_ID-job-primegen-TIMESTAMP/
列出輸出值區中的物件:
gcloud storage ls gs://PROJECT_ID-job-primegen-TIMESTAMP/** --recursive
將
TIMESTAMP
替換為上一個指令傳回的時間戳記。輸出內容應與下列內容類似,總共有六個檔案,每個檔案列出一批 10,000 個質數:
gs://project-name-job-primegen-TIMESTAMP/primes-1-10000.txt gs://project-name-job-primegen-TIMESTAMP/primes-10001-20000.txt gs://project-name-job-primegen-TIMESTAMP/primes-20001-30000.txt gs://project-name-job-primegen-TIMESTAMP/primes-30001-40000.txt gs://project-name-job-primegen-TIMESTAMP/primes-40001-50000.txt gs://project-name-job-primegen-TIMESTAMP/primes-50001-60000.txt