创建并运行用于发送 Pub/Sub 状态通知的作业

本文档介绍了如何创建可发送 Pub/Sub 通知。 您可以使用 Pub/Sub 在作业或任务状态发生变化或进入特定状态时接收通知。如需更多信息 请参阅使用通知监控作业

准备工作

  1. 如果您以前没有使用过 Batch,请参阅 Batch 使用入门 并通过填写 针对项目和用户的前提条件
  2. 为批处理通知创建或指定 Pub/Sub 主题
  3. 配置订阅以接收和使用通知

所需的角色

  • 为了获得创建和运行发送通知的作业所需的权限, 请让管理员授予您 以下 IAM 角色:

    如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

    您也可以通过自定义角色或其他预定义角色来获取所需的权限。

  • 除非您对 确保它具有必要的权限

    为了确保作业的服务账号具备 拥有发布 Pub/Sub 通知的权限, 请让管理员向该作业的服务账号授予 您的 Pub/Sub 主题的 Pub/Sub Publisher (roles/pubsub.publisher) IAM 角色。

  • 如果您希望作业向某个 Pub/Sub 主题发布通知, 位于与作业不同的项目中,则 批量服务代理 必须为作业项目授予发布到该主题的权限。

    为了确保作业所属项目的批处理服务代理具有向另一个项目中的 Pub/Sub 主题发布 Pub/Sub 通知的必要权限,请让您的管理员向作业所属项目的批处理服务代理授予 Pub/Sub 主题的 Pub/Sub Publisher (roles/pubsub.publisher) IAM 角色。

创建并运行可发送通知的作业

您可以创建用于发送 Pub/Sub 通知的批处理作业 执行以下操作:

使用 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 主题 ID 创建 Deployment 已启用 Pub/Sub 通知
  • 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"
      }
    }
  ]
}

作业开始运行后,您就可以使用其通知了。例如,如果作业的 Pub/Sub 主题已有订阅 将通知流式传输到 BigQuery 的功能, 分析 BigQuery 中的 Pub/Sub 通知

后续步骤