如何通过跨项目Pub/Sub Subscription触发Cloud Function消费消息
跨项目Pub/Sub订阅触发Cloud Function操作指南
前置检查
你已经确认当前项目可以正常查看跨项目订阅的消息,说明基础跨项目访问权限已经打通,只需完成以下配置即可:
步骤1:配置订阅侧访问权限
- 首先获取你当前项目中Cloud Function的运行服务账号:
- 一代云函数默认服务账号格式:
service-<当前项目ID>@gcf-admin-robot.iam.gserviceaccount.com - 二代云函数默认服务账号格式:
<当前项目ID>@appspot.gserviceaccount.com - 如果你用了自定义运行服务账号,直接使用自定义账号即可
- 一代云函数默认服务账号格式:
- 切换到Pub/Sub订阅所属的另一个项目,进入对应订阅的权限配置页,给上述服务账号授予两个角色:
roles/pubsub.subscriber、roles/pubsub.viewer,确保账号有权限拉取消息、提交消费确认。
步骤2:配置Cloud Function触发器
- 回到当前项目的Cloud Function控制台,新建或编辑你要用来消费消息的云函数
- 触发器类型选择「Pub/Sub」,订阅来源选择「手动输入订阅资源名称」
- 按格式填写跨项目订阅的完整资源名:
projects/<订阅所属项目ID>/subscriptions/<订阅名称>,注意替换为实际的项目ID和订阅名 - 按需配置函数的运行时、内存、超时等参数后,直接部署函数即可。
步骤3:功能验证与异常排查
- 给跨项目订阅关联的Pub/Sub主题发送测试消息,查看云函数的运行日志,确认函数是否被正常触发、消息内容是否正常获取
- 如果函数未触发,优先排查两个问题:
- 确认当前订阅为拉取模式,推送模式的订阅无法直接绑定Cloud Function触发器
- 如果你用的是二代云函数,需要额外在当前项目的云函数权限页,给订阅所属项目的Pub/Sub服务账号(格式为
service-<订阅所属项目ID>@gcp-sa-pubsub.iam.gserviceaccount.com)授予roles/cloudfunctions.invoker权限
提示:如果配置后仍有权限报错,可通过Cloud IAM的权限诊断工具,检查对应服务账号的权限授予是否生效。
内容的提问来源于stack exchange,提问作者Javier Muñoz
相关产品推荐
相关产品推荐

