如何配置Firebase Functions使用服务账号执行firebase deploy部署?
问题
查看Cloud Functions文档可知,部署函数时可选择使用指定服务账号而非默认服务账号,对应的gcloud命令为:
gcloud functions deploy <function> --service-account <service_account_email>
请问是否可以配置Firebase,使得执行firebase deploy时使用指定服务账号部署函数?
我曾尝试直接在.firebaserc文件中添加相关配置,但不确定该方式是否受支持,也不清楚正确语法:
{ "projects": { "default": "<project>" }, "targets": { "<project>": { "functions": { "service-account": "<...>@<project>.iam.gserviceaccount.com" } } } }
回答
首先,你尝试的.firebaserc配置方式不被支持,这个文件主要用于管理项目别名和函数目标映射,并不包含服务账号的配置项。
要实现firebase deploy时指定服务账号,有几种可行方案:
- 临时单次部署指定
执行部署命令时直接追加--service-account参数,用法和gcloud类似:
firebase deploy --only functions --service-account <service_account_email>
- 全局配置所有函数使用同一服务账号
在项目根目录的firebase.json文件中,给functions节点添加serviceAccount字段,所有函数部署时都会使用这个服务账号:
{ "functions": { "serviceAccount": "<...>@<project>.iam.gserviceaccount.com" } }
- 为不同函数配置不同服务账号
如果需要给特定函数单独指定服务账号,需要结合.firebaserc的目标配置和firebase.json:
- 先在
.firebaserc中定义函数目标,将函数分组:
{ "projects": { "default": "<project>" }, "targets": { "<project>": { "functions": { "user-functions": ["createUser", "deleteUser"], "order-functions": ["createOrder", "updateOrder"] } } } }
- 然后在
firebase.json中为每个目标配置对应的服务账号:
{ "functions": [ { "target": "user-functions", "serviceAccount": "<user-sa>@<project>.iam.gserviceaccount.com" }, { "target": "order-functions", "serviceAccount": "<order-sa>@<project>.iam.gserviceaccount.com" } ] }
之后部署时,既可以部署所有函数,也可以指定目标部署(比如firebase deploy --only functions:user-functions),对应组的函数会使用配置好的服务账号。
内容的提问来源于stack exchange,提问作者Randy Merrill
相关产品推荐
相关产品推荐

