Google Batch任务通知未送达Pub/Sub主题问题求助
Google Batch任务成功后未触发Pub/Sub通知排查
我正在测试Google Batch任务,目标是任务成功完成后自动向指定Pub/Sub主题发送通知,但配置完成后,任务成功却没有通知送达主题,且无任何错误提示。
预期结果
- Batch任务成功运行,状态变为
SUCCEEDED时,自动向指定Pub/Sub主题发送通知 - 通知能正常送达关联订阅,可通过控制台查看
执行的实验步骤
- 编写
config.json定义Batch任务,包含3个打印字符串的子任务,同时配置通知规则。使用的自定义服务账号已分配以下角色:Batch agent reporter、Batch job editor、Compute Storage Admin、Google Batch service agent、Logs Writer、Pub/Sub Publisher。config.json内容:
{"taskGroups": [{"taskSpec": {"runnables": [{"script": {"text": "echo Hello ${VARIABLE_NAME}! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks."},"environment": {"variables": {"VARIABLE_NAME": "WORLD"}}},"computeResource": {"cpuMilli": 2000,"memoryMib": 16},"maxRetryCount": 0,"maxRunDuration": "7200s"},"taskCount": 3,"parallelism": 1}],"allocationPolicy": {"serviceAccount": {"email": "my-custom-service-account@my-gcp-project.iam.gserviceaccount.com"},"instances": [{"policy": {"machineType": "e2-standard-4"}}]},"logsPolicy": {"destination": "CLOUD_LOGGING"},"notifications": [{"pubsubTopic": "projects/my-gcp-project/topics/my-topic","message": {"type": "JOB_STATE_CHANGED","newJobState": "SUCCEEDED","newTaskState": "STATE_UNSPECIFIED"}}]}
通知规则配置:任务状态变为SUCCEEDED时,向projects/my-gcp-project/topics/my-topic发送JOB_STATE_CHANGED类型通知。
- 在Cloud Pub/Sub控制台创建主题
my-topic,关联AVRO schemanoti-avro-schema,消息编码类型设为JSON。AVRO schema内容:
{"type": "record","name": "message","fields": [{"name": "type","type": {"type": "enum","name": "Type","symbols": ["TYPE_UNSPECIFIED","JOB_STATE_CHANGED","TASK_STATE_CHANGED"]}},{"name": "newJobState","type": {"type": "enum","name": "State","symbols": ["STATE_UNSPECIFIED","QUEUED","SCHEDULED","RUNNING","SUCCEEDED","FAILED","DELETION_IN_PROGRESS"]}},{"name": "newTaskState","type": "State"}]}
创建主题订阅
projects/my-gcp-project/subscriptions/my-topic-sub提交Batch任务:
gcloud batch jobs submit job-test --location us-central1 --config config.json
- 任务成功完成后,在Pub/Sub控制台拉取订阅消息检查通知是否送达
实际结果
订阅中未收到任何来自Batch任务的通知,且无错误提示
排查建议
- 验证服务账号主题级权限:确认自定义服务账号的
Pub/Sub Publisher角色是否绑定到目标主题(而非仅项目级绑定),可执行以下命令校验:gcloud pubsub topics get-iam-policy projects/my-gcp-project/topics/my-topic --filter="bindings.members:serviceAccount:my-custom-service-account@my-gcp-project.iam.gserviceaccount.com" - 检查通知配置合法性:确认
notifications字段结构正确,JOB级通知无需指定newTaskState,可尝试移除该字段后重新提交任务测试。 - 排查Schema兼容性问题:Batch发送的通知消息会包含
jobName、timestamp等额外字段,当前AVRO schema未定义这些字段,可能导致消息被主题静默拒收。建议先移除主题的Schema校验,测试通知是否能正常送达,再调整Schema匹配Batch的标准通知格式。 - 查看Batch任务日志:在Cloud Logging中过滤Batch任务的日志,搜索
notification或pubsub关键词,排查是否有隐藏的权限或格式错误信息。 - 确认任务状态触发条件:检查任务是否确实进入
SUCCEEDED状态,可执行以下命令查看:gcloud batch jobs describe job-test --location us-central1 --format="value(status.state)"
内容的提问来源于stack exchange,提问作者agus.dinamarca
相关产品推荐
相关产品推荐

