我有一个相当简单的需求,因为我需要在多个区域中使用Firebase函数、bucket和firestore数据库的相同副本,以满足数据不会在区域之间移动。一个适用于欧盟、英国、美国等。
因为每个firebase项目只能有一个firestore数据库,所以我按照建议为每个地区创建一个新项目。我可以使用firebase项目环境变量将桶的读/写重定向到正确的区域,以定义要向哪个桶写入。到目前为止一切顺利。
最后一个瓶颈是函数本身。
问题是默认情况下函数转到"us-central "而不是firebase项目区域,所以指定区域的唯一方法似乎是在代码库等中使用。region("eu-west3")指定符。但是因为我想在所有项目中使用一个统一的代码库,所以在每个项目的基础上更改它有点麻烦。
关于如何最好地管理这个有什么建议吗?
您可以使用firebase functions:config:set
:
firebase functions:config:set env.region="us-central1"
运行
functions:config:set
后,必须重新部署功能使新的配置可用。
然后使用以下代码获取函数中的环境变量:
exports.myFunction = functions
.region(functions.config.env.region)
.https.onRequest((req, res) => {
res.send("Hello");
});
有了这个,您不再需要更改代码中的区域。但是如果你想改变区域,你仍然需要在每个项目上改变配置和重新部署功能。
另一个解决方案是使用Cloud Build来自动化一切。我还没有完全测试过,但以下是我能想到的。
首先,按照如何使用Firebase构建器工具的说明进行操作。您需要这个社区提供的映像来在Cloud Build上运行Firebase CLI命令。完成后,请确保在项目上启用了以下API:
- 云资源管理器API
- Firebase Management API
在您的Cloud Build设置中,Firebase Admin
是启用的。
那么试试这个cloudbuild。yaml文件。Cloud Build将从您的项目和其他项目中使用该工具:
steps:
# Setup First Project
- name: gcr.io/project-id1/firebase
id: 'Use Project 1'
args: ['use', 'project-id1']
- name: gcr.io/project-id1/firebase
id: 'Set Firebase Environment Config'
args: ['functions:config:set', 'env.region=us-central1']
- name: gcr.io/project-id1/firebase
id: 'Deploy function1'
args: ['deploy', '--project=project-id1', '--only=functions']
# Setup Second Project
- name: gcr.io/project-id1/firebase
id: 'Use Project 2'
args: ['use', 'project-id2']
- name: gcr.io/project-id1/firebase
id: 'Set Firebase Environment Config'
args: ['functions:config:set', 'env.region=eu-west3']
- name: gcr.io/project-id1/firebase
id: 'Deploy function2'
args: ['deploy', '--project=project-id2', '--only=functions']
# And so on...
注意:将
project-id
更改为您实际的项目ID。
exports.myFunction = functions
.region(functions.config.env.region)
.https.onRequest((req, res) => {
res.send("Hello");
});
config是一个函数,所以这个调整是必要的:
exports.myFunction = functions
.region(functions.config().env.region)
.https.onRequest((req, res) => {
res.send("Hello");
});