Pub/Sub ステータス通知を送信するジョブを作成して実行する

このドキュメントでは、Pub/Sub 通知を送信する Batch ジョブを作成する方法について説明します。Pub/Sub を使用すると、ジョブまたはタスクの状態が変化したとき、またはジョブまたはタスクが特定の状態になったときに通知を受け取ることができます。詳細については、 通知を使用してジョブをモニタリングするをご覧ください。

準備

  1. Batch を以前に使用したことがない場合は、Batch を使ってみるを確認し、プロジェクトとユーザーの前提条件を完了して Batch を有効にします。
  2. Batch 通知用の Pub/Sub トピックを作成または識別します
  3. 通知を受信して使用するためのサブスクリプションを構成する

必要なロール

通知を送信するジョブを作成して実行する

次の操作を行うと、Pub/Sub 通知を送信する Batch ジョブを作成できます。

gcloud

Google Cloud CLI を使用して ジョブを作成します。このジョブには、JSON ファイルの本文に notifications フィールドと 1 つ以上の jobNotification オブジェクト が含まれます。

{
...
  "notifications": [
    {
      "pubsubTopic": "projects/PROJECT_ID/topics/TOPIC_ID",
      "message": {
        ATTRIBUTES
      }
    }
  ]
...
}

以下を置き換えます。

  • PROJECT_ID: Pub/Sub トピックを含むプロジェクトのプロジェクト ID。
  • TOPIC_ID: Pub/Sub 通知を有効にしたときに作成したトピックの Pub/Sub トピック ID。
  • ATTRIBUTES: 次の属性を 1 つ以上指定します。この属性を使用すると、ジョブの状態やそのすべてのタスクの状態に関する通知を受け取ることができます。

    • すべてのジョブの状態の変更に関する通知を取得するには、以下を指定します。

      "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 を使用して ジョブを作成します。このジョブには、JSON ファイルの本文に notifications フィールドと 1 つ以上の jobNotification オブジェクト が含まれます。

{
...
  "notifications": [
    {
      "pubsubTopic": "projects/PROJECT_ID/topics/TOPIC_ID",
      "message": {
        ATTRIBUTES
      }
    }
  ]
...
}

以下を置き換えます。

  • PROJECT_ID: Pub/Sub トピックを含むプロジェクトのプロジェクト ID。
  • TOPIC_ID: Pub/Sub 通知を有効にしたときに作成したトピックの Pub/Sub トピック ID。
  • ATTRIBUTES: 次の属性を 1 つ以上指定します。この属性を使用すると、ジョブの状態やそのすべてのタスクの状態に関する通知を受け取ることができます。

    • すべてのジョブの状態の変更に関する通知を取得するには、以下を指定します。

      "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