このドキュメントでは、Pub/Sub 通知を送信する Batch ジョブを作成する方法について説明します。Pub/Sub を使用すると、ジョブまたはタスクの状態が変更されたとき、またはジョブまたはタスクが特定の状態になったときに通知を受け取ることができます。詳細については、通知を使用してジョブをモニタリングするをご覧ください。
準備
- Batch を以前に使用したことがない場合は、Batch を使ってみるを確認し、プロジェクトとユーザーの前提条件を完了して Batch を有効にします。
- Batch 通知用の Pub/Sub トピックを作成または識別します。
- 通知を受信して使用するためのサブスクリプションを構成する。
必要なロール
-
通知を送信するジョブを作成して実行するために必要な権限を取得するには、管理者に次の IAM ロールを付与するよう依頼してください。
-
プロジェクトの Batch ジョブ編集者(
roles/batch.jobsEditor
) -
ジョブのサービス アカウントのサービス アカウント ユーザー(
roles/iam.serviceAccountUser
)。デフォルトでは Compute Engine のデフォルトのサービス アカウントです。 -
Pub/Sub トピックまたはプロジェクトに対する Pub/Sub 編集者 (
roles/pubsub.editor
)。
ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。
-
プロジェクトの Batch ジョブ編集者(
-
ジョブのサービス アカウントのデフォルト構成を使用している場合を除き、必要な権限があることを確認します。
このジョブのサービス アカウントが 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 ジョブを作成するには、次の操作を行います。
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
Java
Node.js
Python
ジョブの実行が開始されたら、通知を使用できます。たとえば、ジョブの Pub/Sub トピックに、BigQuery に通知をストリーミングするサブスクリプションがある場合は、BigQuery で Pub/Sub 通知を分析できます。
次のステップ
- Pub/Sub 通知と BigQuery を使用してジョブのステータスをモニタリングする方法の詳細を確認する。
- ジョブの作成または実行に問題がある場合は、トラブルシューティングをご覧ください。
- ジョブとタスクを表示する。
- 別のジョブ作成オプションを学習する。