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

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

準備

必要なロール

  • 通知を送信するジョブを作成して実行するために必要な権限を取得するには、管理者に次の IAM ロールを付与するよう依頼してください。

    ロールの付与の詳細については、アクセス権の管理をご覧ください。

    必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。

  • ジョブのサービス アカウントにデフォルト構成を使用している場合を除き、必要な権限があることを確認します。

    このジョブのサービス アカウントが Pub/Sub 通知を公開するために必要な権限を持っていることを確認するために、ジョブのサービス アカウントに Pub/Sub トピックに対する Pub/Sub パブリッシャーroles/pubsub.publisher)IAM ロールを付与するように管理者に依頼します。

  • ジョブがジョブとは異なるプロジェクトにある Pub/Sub トピックに通知を公開する場合は、ジョブのプロジェクトのBatch サービス エージェントに、そのトピックに公開する権限を付与する必要があります。

    ジョブのプロジェクトの Batch サービス エージェントに、別のプロジェクトの Pub/Sub トピックに Pub/Sub 通知を公開するために必要な権限を付与するには、ジョブのプロジェクトの Batch サービス エージェントに Pub/Sub トピックに対する Pub/Sub パブリッシャーroles/pubsub.publisher)IAM ロールを付与するよう管理者に依頼します。

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

Pub/Sub 通知を送信する Batch ジョブを作成するには、次の操作を行います。

Google Cloud CLI または 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"
      }
    }
  ]
}

ジョブの実行が開始されたら、その通知を使用できます。たとえば、ジョブの Pub/Sub トピックに、BigQuery に通知をストリーミングするサブスクリプションがある場合は、BigQuery で Pub/Sub 通知を分析できます。

次のステップ