您可以在工作流程中執行 Cloud Run 工作,以便進行更複雜的資料處理作業,或以系統化的方式自動調度管理現有工作。
本教學課程說明如何使用 Workflows 執行 Cloud Run 工作,以處理傳遞至工作的環境變數中的資料,並因應 Cloud Storage 中的事件。
請注意,您也可以將事件資料儲存在 Cloud Storage 值區中,並使用客戶管理的加密金鑰加密資料。詳情請參閱「執行 Cloud Run 工作,處理儲存在 Cloud Storage 中的事件資料」。
建立 Cloud Run 工作
本教學課程使用 GitHub 中的範例 Cloud Run 作業。這項作業會從 Cloud Storage 的輸入檔案讀取資料,並對檔案中的每一行執行任意處理作業。
將範例應用程式存放區複製到本機電腦,即可取得程式碼範例:
git clone https://github.com/GoogleCloudPlatform/jobs-demos.git
您也可以下載 ZIP 格式的範例,然後解壓縮該檔案。
變更為包含範例程式碼的目錄:
cd jobs-demos/parallel-processing
建立 Cloud Storage bucket,用於儲存可寫入的輸入檔案並觸發事件:
控制台
- 在 Google Cloud 控制台,前往「Cloud Storage bucket」頁面。
- 依序按一下「新增」「建立」。
- 在「Create a bucket」(建立 bucket) 頁面中,輸入 bucket 的名稱:
將input-PROJECT_ID
PROJECT_ID
替換為專案 ID。 Google Cloud - 保留其他預設值。
- 點選「建立」。
gcloud
執行
gcloud storage buckets create
指令:gcloud storage buckets create gs://input-PROJECT_ID
如果要求成功,指令會傳回下列訊息:
Creating gs://input-PROJECT_ID/...
Terraform
如要建立 Cloud Storage 值區,請使用
google_storage_bucket
資源,並按照下列範例修改main.tf
檔案。如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。
請注意,在典型的 Terraform 工作流程中,您會一次套用整個計畫。不過,在本教學課程中,您可以指定特定資源。例如:
terraform apply -target="random_id.bucket_name_suffix"
和
terraform apply -target="google_storage_bucket.default"
- 在 Google Cloud 控制台,前往「Cloud Storage bucket」頁面。
建立 Artifact Registry 標準存放區,用於儲存容器映像檔:
控制台
前往 Google Cloud 控制台的 Artifact Registry「Repositories」頁面:
按一下
「建立存放區」。輸入存放區名稱,例如
my-repo
。專案中每個存放區位置的存放區名稱不得重複。保留預設格式,應為「Docker」。
保留預設模式,應為「標準」。
選取「us-central1 (Iowa)」(us-central1 (愛荷華州)) 做為區域。
保留其他所有預設值。
點選「建立」。
gcloud
執行下列指令:
gcloud artifacts repositories create REPOSITORY \ --repository-format=docker \ --location=us-central1
將
REPOSITORY
替換為存放區的專屬名稱,例如my-repo
。專案中每個存放區位置的存放區名稱不得重複。Terraform
如要建立 Artifact Registry 存放區,請使用
google_artifact_registry_repository
資源,並按照下列範例修改main.tf
檔案。請注意,在一般 Terraform 工作流程中,您會一次套用整個計畫。不過,在本教學課程中,您可以指定特定資源。例如:
terraform apply -target="google_artifact_registry_repository.default"
使用預設 Google Cloud 建構套件建構容器映像檔:
export SERVICE_NAME=parallel-job gcloud builds submit \ --pack image=us-central1-docker.pkg.dev/PROJECT_ID/REPOSITORY/${SERVICE_NAME}
將
REPOSITORY
替換為 Artifact Registry 存放區名稱。建構作業會在幾分鐘內完成。
建立 Cloud Run 工作,部署容器映像檔:
控制台
前往 Google Cloud 控制台的「Cloud Run」頁面:
按一下「建立工作」,顯示「建立工作」表單。
- 在表單中,選取
us-central1-docker.pkg.dev/PROJECT_ID/REPOSITORY/parallel-job:latest
做為 Artifact Registry 容器映像檔網址。 - 選用:輸入工作名稱
parallel-job
。 - 選用:選取「us-central1 (Iowa)」(us-central1 (愛荷華州))。
- 如要指定工作執行的任務數量,請輸入
10
。所有工作都必須成功,工作才會視同成功。依預設,工作會平行執行。
- 在表單中,選取
展開「Container, Variables & Secrets, Connections, Security」(容器、變數和密鑰、連線、安全性) 部分,保留所有預設值,但下列設定除外:
按一下「一般」分頁標籤。
- 在容器指令中輸入
python
。 - 在容器引數中輸入
process.py
。
- 在容器指令中輸入
按一下「變數與密鑰」分頁標籤。
- 按一下「新增變數」,然後輸入
INPUT_BUCKET
做為名稱,並輸入input-PROJECT_ID
做為值。 - 按一下「新增變數」,然後在名稱中輸入
INPUT_FILE
,並在值中輸入input_file.txt
。
- 按一下「新增變數」,然後輸入
如要建立工作,請按一下「建立」。
gcloud
設定預設 Cloud Run 地區:
gcloud config set run/region us-central1
建立 Cloud Run 工作:
gcloud run jobs create parallel-job \ --image us-central1-docker.pkg.dev/PROJECT_ID/REPOSITORY/parallel-job:latest \ --command python \ --args process.py \ --tasks 10 \ --set-env-vars=INPUT_BUCKET=input-PROJECT_ID,INPUT_FILE=input_file.txt
請注意,如果您未指定映像檔標記,Artifact Registry 會尋找具有預設
latest
標記的映像檔。如需建立工作時可用的完整選項清單,請參閱 gcloud run jobs create 指令列說明文件。
工作建立完成後,畫面上應會顯示成功訊息。
Terraform
如要建立 Cloud Run 工作,請使用
google_cloud_run_v2_job
資源,並按照下列範例修改main.tf
檔案。請注意,在一般 Terraform 工作流程中,您會一次套用整個計畫。不過,在本教學課程中,您可以指定特定資源。例如:
terraform apply -target="google_cloud_run_v2_job.default"
部署執行 Cloud Run 工作的工作流程
定義及部署工作流程,執行您剛建立的 Cloud Run 工作。工作流程定義是由一系列步驟組成,這些步驟會使用 Workflows 語法描述。
控制台
前往 Google Cloud 控制台的「Workflows」頁面:
按一下「建立」。
輸入新工作流程的名稱,例如
cloud-run-job-workflow
。選取「us-central1 (Iowa)」(us-central1 (愛荷華州)) 做為區域。
在「Service account」(服務帳戶) 欄位中,選取您先前建立的服務帳戶。
服務帳戶是工作流程的身分。您應該已將 Cloud Run 管理員角色授予服務帳戶,工作流程才能執行 Cloud Run 工作。
點選「下一步」。
在工作流程編輯器中,輸入下列工作流程定義:
按一下 [Deploy] (部署)。
gcloud
為工作流程建立原始碼檔案:
touch cloud-run-job-workflow.yaml
將下列工作流程定義複製到原始碼檔案:
輸入下列指令來部署工作流程:
gcloud workflows deploy cloud-run-job-workflow \ --location=us-central1 \ --source=cloud-run-job-workflow.yaml \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
更改下列內容:
SERVICE_ACCOUNT_NAME
:您先前建立的服務帳戶名稱PROJECT_ID
:您的Google Cloud 專案 ID
服務帳戶是工作流程的身分。您應該已將
roles/run.admin
角色授予服務帳戶,工作流程才能執行 Cloud Run 工作。
Terraform
如要建立工作流程,請使用 google_workflows_workflow
資源,並按照下列範例修改 main.tf
檔案。
如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。
請注意,在典型的 Terraform 工作流程中,您會一次套用整個計畫。不過,在本教學課程中,您可以指定特定資源。例如:
terraform apply -target="google_workflows_workflow.default"
工作流程會執行下列作業:
init
步驟:接受 Cloud Storage 事件做為引數,然後設定必要變數。check_input_file
步驟:檢查事件中指定的 Cloud Storage bucket 是否為 Cloud Run 工作所用的 bucket。- 如果是,工作流程會繼續執行
run_job
步驟。 - 如果沒有,工作流程就會終止,停止任何後續處理作業。
- 如果是,工作流程會繼續執行
run_job
步驟:使用 Cloud Run Admin API 連接器的googleapis.run.v1.namespaces.jobs.run
方法執行工作。Cloud Storage 值區和資料檔案名稱會從工作流程以覆寫變數的形式傳遞至作業。finish
步驟:傳回工作執行資訊,做為工作流程的結果。
為工作流程建立 Eventarc 觸發條件
如要在輸入資料檔案更新時自動執行工作流程和 Cloud Run 工作,請建立 Eventarc 觸發程序,回應包含輸入資料檔案的值區中的 Cloud Storage 事件。
控制台
前往 Google Cloud 控制台的「Workflows」頁面:
按一下工作流程名稱,例如
cloud-run-job-workflow
。在「工作流程詳細資料」頁面中,按一下「編輯」。
在「Edit workflow」(編輯工作流程) 頁面的「Triggers」(觸發條件) 區段中,按一下「Add new trigger」(新增觸發條件) >「Eventarc」。
「Eventarc trigger」(Eventarc 觸發條件) 窗格隨即開啟。
在「觸發條件名稱」欄位中,輸入觸發條件的名稱,例如
cloud-run-job-workflow-trigger
。在「Event provider」(事件提供者) 清單中,選取「Cloud Storage」。
在「Event」(事件) 清單中,選取「google.cloud.storage.object.v1.finalized」。
在「Bucket」(值區) 欄位中,選取包含輸入資料檔案的值區。值區名稱的格式為
input-PROJECT_ID
。在「Service account」(服務帳戶) 欄位中,選取您先前建立的服務帳戶。
服務帳戶會做為觸發程序的 ID。您應該已將下列角色授予服務帳戶:
- Eventarc 事件接收者:接收事件
- 工作流程叫用者:執行工作流程
按一下「儲存觸發條件」。
現在「編輯工作流程」頁面的「觸發條件」部分會顯示 Eventarc 觸發條件。
點選「下一步」。
按一下 [Deploy] (部署)。
gcloud
執行下列指令,建立 Eventarc 觸發條件:
gcloud eventarc triggers create cloud-run-job-workflow-trigger \ --location=us \ --destination-workflow=cloud-run-job-workflow \ --destination-workflow-location=us-central1 \ --event-filters="type=google.cloud.storage.object.v1.finalized" \ --event-filters="bucket=input-PROJECT_ID" \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
更改下列內容:
PROJECT_ID
:您的 Google Cloud 專案 IDSERVICE_ACCOUNT_NAME
:先前建立的服務帳戶名稱。
服務帳戶會做為觸發程序的 ID。您應該已將下列角色授予服務帳戶:
roles/eventarc.eventReceiver
:接收事件roles/workflows.invoker
:執行工作流程
Terraform
如要建立觸發條件,請使用 google_eventarc_trigger
資源,並按照下列範例修改 main.tf
檔案。
如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。
請注意,在典型的 Terraform 工作流程中,您會一次套用整個計畫。不過,在本教學課程中,您可以指定特定資源。例如:
terraform apply -target="google_eventarc_trigger.default"
每當輸入資料檔案所在的 Cloud Storage 值區上傳或覆寫檔案時,系統都會以對應的 Cloud Storage 事件做為引數,執行工作流程。
觸發工作流程
更新 Cloud Storage 中的輸入資料檔案,測試端對端系統。
為輸入檔案產生新資料,並上傳至 Cloud Storage,位置應與 Cloud Run 工作預期的位置相同:
base64 /dev/urandom | head -c 100000 >input_file.txt gcloud storage cp input_file.txt gs://input-PROJECT_ID/input_file.txt
如果您使用 Terraform 建立 Cloud Storage bucket,可以執行下列指令來擷取 bucket 名稱:
gcloud storage buckets list gs://input*
Cloud Run 工作可能需要幾分鐘才能執行完畢。
查看工作執行作業,確認 Cloud Run 工作是否如預期執行:
gcloud config set run/region us-central1 gcloud run jobs executions list --job=parallel-job
輸出內容應該會顯示工作執行成功,表示
10/10
工作已完成。
進一步瞭解如何透過事件或 Pub/Sub 訊息觸發工作流程。