本文說明如何建立 Batch 工作,傳送 Pub/Sub 通知。您可以使用 Pub/Sub 在工作或工作狀態變更時,或工作或工作進入特定狀態時接收通知。詳情請參閱「使用通知監控工作」。
事前準備
- 如果您從未使用過 Batch,請參閱「開始使用 Batch」,並完成專案和使用者的必要條件,啟用 Batch。
- 建立或找出 Batch 通知的 Pub/Sub 主題。
- 設定訂閱項目,接收及使用通知。
必要的角色
-
如要取得建立及執行傳送通知工作所需的權限,請要求管理員授予下列 IAM 角色:
-
批次工作編輯者 (
roles/batch.jobsEditor
) 專案。 -
服務帳戶使用者 (
roles/iam.serviceAccountUser
) 在作業的服務帳戶上,預設為預設 Compute Engine 服務帳戶。 -
Pub/Sub 編輯者 (
roles/pubsub.editor
) Pub/Sub 主題或專案。
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。
-
批次工作編輯者 (
-
除非您使用作業服務帳戶的預設設定,否則請確保該帳戶具備必要權限。
為確保作業的服務帳戶具備發布 Pub/Sub 通知的必要權限,請管理員在 Pub/Sub 主題上,將 Pub/Sub 發布者 (
roles/pubsub.publisher
) 身分與存取權管理角色授予作業的服務帳戶。 - 如要讓作業將通知發布至與作業不同專案中的 Pub/Sub 主題,必須授予作業專案的 Batch 服務代理程式發布至該主題的權限。
為確保作業專案的 Batch 服務代理具備必要權限,可將 Pub/Sub 通知發布至其他專案的 Pub/Sub 主題,請管理員授予作業專案的 Batch 服務代理 Pub/Sub 主題的 Pub/Sub 發布者 (
roles/pubsub.publisher
) 身分與存取權管理角色。
建立及執行傳送通知的工作
您可以建立 Batch 工作,傳送 Pub/Sub 通知,方法如下:
gcloud
使用 Google Cloud CLI 建立工作,其中包含 notifications
欄位和一或多個 jobNotification
物件,位於 JSON 檔案的主要主體中:
{
...
"notifications": [
{
"pubsubTopic": "projects/PROJECT_ID/topics/TOPIC_ID",
"message": {
ATTRIBUTES
}
}
]
...
}
更改下列內容:
PROJECT_ID
:包含 Pub/Sub 主題的專案 ID。TOPIC_ID
:您啟用 Pub/Sub 通知時建立的主題的 Pub/Sub 主題 ID。ATTRIBUTES
:指定一或多個下列屬性,以便接收工作或所有工作狀態的通知。如要接收所有工作狀態變更的通知,請指定下列項目:
"type": "JOB_STATE_CHANGED"
如要接收特定工作狀態變更的通知,請指定下列項目:
"type": "JOB_STATE_CHANGED", "newJobState": "JOB_STATE"
將
JOB_STATE
替換為下列其中一個工作狀態:QUEUED
SCHEDULED
RUNNING
SUCCEEDED
FAILED
如要進一步瞭解工作狀態,請參閱工作生命週期。
如要接收所有工作狀態變更的通知,請指定下列項目:
"type": "TASK_STATE_CHANGED"
如要接收特定工作狀態變更的通知,請指定下列項目:
"type": "TASK_STATE_CHANGED", "newTaskState": "TASK_STATE"
將
TASK_STATE
替換為下列其中一個工作狀態:PENDING
ASSIGNED
RUNNING
SUCCEEDED
FAILED
如要進一步瞭解工作狀態,請參閱「工作生命週期」。
舉例來說,假設您想在所有工作狀態變更時收到通知,以及在工作失敗時收到通知。如要這麼做,您可以建立類似下方的 JSON 設定檔:
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "echo Hello World! This is task $BATCH_TASK_INDEX."
}
}
]
},
"taskCount": 3,
}
],
"logsPolicy": {
"destination": "CLOUD_LOGGING"
},
"notifications": [
{
"pubsubTopic": "projects/PROJECT_ID/topics/TOPIC_ID",
"message": {
"type": "JOB_STATE_CHANGED"
}
},
{
"pubsubTopic": "projects/PROJECT_ID/topics/TOPIC_ID",
"message": {
"type": "TASK_STATE_CHANGED",
"newTaskState": "FAILED"
}
}
]
}
API
使用 REST API 建立工作,其中包含 notifications
欄位和一或多個 jobNotification
物件,位於 JSON 檔案的主體中:
{
...
"notifications": [
{
"pubsubTopic": "projects/PROJECT_ID/topics/TOPIC_ID",
"message": {
ATTRIBUTES
}
}
]
...
}
更改下列內容:
PROJECT_ID
:包含 Pub/Sub 主題的專案 ID。TOPIC_ID
:您啟用 Pub/Sub 通知時建立的主題的 Pub/Sub 主題 ID。ATTRIBUTES
:指定一或多個下列屬性,以便接收工作或所有工作狀態的通知。如要接收所有工作狀態變更的通知,請指定下列項目:
"type": "JOB_STATE_CHANGED"
如要接收特定工作狀態變更的通知,請指定下列項目:
"type": "JOB_STATE_CHANGED", "newJobState": "JOB_STATE"
將
JOB_STATE
替換為下列其中一個工作狀態:QUEUED
SCHEDULED
RUNNING
SUCCEEDED
FAILED
如要進一步瞭解工作狀態,請參閱工作生命週期。
如要接收所有工作狀態變更的通知,請指定下列項目:
"type": "TASK_STATE_CHANGED"
如要接收特定工作狀態變更的通知,請指定下列項目:
"type": "TASK_STATE_CHANGED", "newTaskState": "TASK_STATE"
將
TASK_STATE
替換為下列其中一個工作狀態:PENDING
ASSIGNED
RUNNING
SUCCEEDED
FAILED
如要進一步瞭解工作狀態,請參閱「工作生命週期」。
舉例來說,假設您想在所有工作狀態變更時收到通知,以及在工作失敗時收到通知。如要這麼做,您可以建立類似下方的 JSON 設定檔:
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "echo Hello World! This is task $BATCH_TASK_INDEX."
}
}
]
},
"taskCount": 3,
}
],
"logsPolicy": {
"destination": "CLOUD_LOGGING"
},
"notifications": [
{
"pubsubTopic": "projects/PROJECT_ID/topics/TOPIC_ID",
"message": {
"type": "JOB_STATE_CHANGED"
}
},
{
"pubsubTopic": "projects/PROJECT_ID/topics/TOPIC_ID",
"message": {
"type": "TASK_STATE_CHANGED",
"newTaskState": "FAILED"
}
}
]
}
Go
Java
Node.js
Python
作業開始執行後,您可以使用通知。 舉例來說,如果作業的 Pub/Sub 主題有訂閱項目,可將通知串流至 BigQuery,您就可以在 BigQuery 中分析 Pub/Sub 通知。
後續步驟
- 進一步瞭解如何使用 Pub/Sub 通知和 BigQuery 監控工作狀態。
- 如果無法建立或執行工作,請參閱「疑難排解」。
- 查看工作和工作。
- 進一步瞭解工作建立選項。