本文档介绍如何创建发送 Pub/Sub 通知的批处理作业。您可以使用 Pub/Sub 在作业或任务状态发生变化或作业或任务进入特定状态时收到通知。如需了解详情,请参阅使用通知监控作业。
准备工作
- 如果您之前未使用过 Batch,请查看 Batch 使用入门,并完成项目和用户前提条件以启用 Batch。
-
如需获取创建和运行发送通知的作业所需的权限,请让管理员向您授予以下 IAM 角色:
-
项目的 Batch Job Editor (
roles/batch.jobsEditor
)。 -
作业的服务帐号的 Service Account User (
roles/iam.serviceAccountUser
),默认为默认 Compute Engine 服务帐号。 -
针对 Pub/Sub 主题或项目的 Pub/Sub Editor (
roles/pubsub.editor
)。
如需详细了解如何授予角色,请参阅管理访问权限。
-
项目的 Batch Job Editor (
-
为了确保作业的服务帐号具有发布 Pub/Sub 通知所需的权限,请让管理员向作业的服务帐号授予 Pub/Sub 主题的 Pub/Sub Publisher (
roles/pubsub.publisher
) IAM 角色。默认情况下,该作业的服务帐号是默认 Compute Engine 服务帐号。
- 为您的作业启用 Pub/Sub 状态通知。
- (可选)配置 Pub/Sub 以将通知流式传输到 BigQuery。
创建并运行可发送通知的作业
您可以通过执行以下操作来创建发送 Pub/Sub 通知的 Batch 作业:
使用 Google Cloud CLI 或 REST API 创建一个作业,其中 JSON 文件正文中包含 notifications
字段以及一个或多个 jobNotification
对象:
"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 文件中:
"notifications": [
{
"pubsubTopic": "projects/example-projecet/topics/example-topic",
"message": {
"type": "JOB_STATE_CHANGED"
}
},
{
"pubsubTopic": "projects/example-project/topics/example-topic",
"message": {
"type": "TASK_STATE_CHANGED",
"newTaskState": "FAILED"
}
}
]