为何GCP Cloud Run调用Python Pub/Sub库时不使用Compute Engine SA认证?
解决Cloud Run中Python Pub/Sub库报错“找不到service-account-key.json”的问题
问题分析
你遇到的报错核心原因是Cloud Run环境下无需依赖本地服务账号密钥文件,报错大概率来自两个点:
- 服务环境变量中错误配置了
GOOGLE_APPLICATION_CREDENTIALS,指向了不存在的本地密钥文件路径 - 手动处理凭据时的自定义受众(audience)操作,干扰了Cloud Run默认的身份认证流程
解决方案
1. 清理错误的环境变量
登录Cloud Console,找到你的Cloud Run服务,进入编辑与部署新版本 -> 容器、变量、秘密和连接 -> 环境变量,检查是否存在GOOGLE_APPLICATION_CREDENTIALS变量,若有直接删除,保存后重新部署服务。
2. 简化Pub/Sub客户端代码
Cloud Run会通过工作负载身份自动提供合法凭据,无需手动处理凭据或自定义受众。简化后的代码如下:
import os from google.cloud import pubsub_v1 # 保留你的gcloud测试命令 os.system('gcloud pubsub topics publish pubsub-test1 --message="test" --project=project1') # 直接初始化Pub/Sub发布客户端 publisher = pubsub_v1.PublisherClient() # 构建目标主题的路径 topic_path = publisher.topic_path("project1", "pubsub-test1") # 发布消息示例(等待发布完成并处理结果) future = publisher.publish(topic_path, b"test") future.result()
3. 确认服务账号权限匹配
虽然你已为Compute Engine服务账号授予Pub/Sub Admin角色,仍需验证Cloud Run服务使用的是该账号:
- 在Cloud Run服务的详情页面,查看服务账号字段,确认与你授权的账号一致
- 若不一致,部署服务时通过
--service-account参数指定正确的服务账号
内容的提问来源于stack exchange,提问作者gbvikas
相关产品推荐
相关产品推荐

