本文說明如何建立 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) IAM 角色。
建立及執行傳送通知的工作
您可以建立 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 監控工作狀態。
- 如果無法建立或執行工作,請參閱「疑難排解」。
- 查看工作和工作。
- 進一步瞭解工作建立選項。