能否从Firebase Hosting调用Python编写的Google Cloud Function及Cloud Run API?
嗨,针对你的两个问题,我来给你详细解答下,都是实践中常用的配置方式~
从Firebase Hosting调用Cloud Run API(实现统一基础URL)
完全可以通过Firebase Hosting的重写规则来实现统一基础URL,具体步骤如下:
- 配置重写规则:修改你的
firebase.json文件,添加rewrites字段,把指定路径的请求转发到Cloud Run服务。比如你想把所有/api/开头的请求转发到Cloud Run服务,配置示例如下:
{ "hosting": { "public": "public", "rewrites": [ { "source": "/api/**", "run": { "serviceId": "你的Cloud Run服务ID", "region": "你的服务部署区域,比如us-central1" } } ] } }
这样客户端只需要访问https://你的Firebase Hosting域名/api/xxx,请求就会自动转发到对应的Cloud Run API,完美实现统一URL。
- 配置权限:别忘给Firebase Hosting的服务账号添加Cloud Run调用权限,不然会出现403错误。找到你的Firebase Hosting服务账号(一般格式是
你的项目ID@appspot.gserviceaccount.com),在Cloud Run服务的权限设置页面,给这个账号添加Cloud Run Invoker角色。
能否从Firebase Hosting调用Python编写的Google Cloud Function?
当然可以!Cloud Function的编程语言不影响Firebase Hosting的调用,不管你是Python、Node.js还是其他语言,都能通过重写规则实现转发,分两种情况:
- 第一代Cloud Function:直接在
firebase.json里指定函数名即可,配置示例:
{ "hosting": { "public": "public", "rewrites": [ { "source": "/functions/**", "function": "你的Python函数名称" } ] } }
- 第二代Cloud Function:因为第二代函数底层基于Cloud Run,所以需要用
run字段配置,和Cloud Run的配置方式一致。你需要找到第二代函数对应的Cloud Run服务ID(一般是函数名-随机后缀),然后配置:
{ "hosting": { "public": "public", "rewrites": [ { "source": "/functions/**", "run": { "serviceId": "你的Python第二代函数对应的Cloud Run服务ID", "region": "函数部署区域" } } ] } }
- 权限配置:和Cloud Run类似,第一代函数需要给Firebase Hosting服务账号添加
Cloud Functions Invoker角色;第二代函数则添加Cloud Run Invoker角色即可。
额外小提示
- 本地测试可以用
firebase serve命令,验证重写规则是否生效,避免部署后踩坑。 - 配置完成后,用
firebase deploy --only hosting部署更新的Hosting配置即可生效。 - 因为请求是通过Firebase Hosting转发的,客户端和Hosting同域,所以不会有跨域问题,这也是统一URL的额外好处哦~
内容的提问来源于stack exchange,提问作者jggomez
相关产品推荐
相关产品推荐

