Как переключиться на другой сервисAccountKey.json через .firebaserc в Firebase Cloud Functions?

В моем файле .firebaserc я предоставил две базы данных Firebase, одну для разработки и одну для производства:

{
  "projects": {
    "default": "db-dev",
    "production": "db-prod"
  }
}

Поэтому, когда я развертываю производство, я просто запускаю:

firebase use production
firebase deploy --only functions

Моя проблема в том, что я также использую облачное хранилище в одной из своих облачных функций, поэтому у меня есть два разных файла serviceAccountKey.json, которые я буду использовать здесь:

const gcs = require('@google-cloud/storage')({ keyFilename: 'serviceAccountKey.json' })

Мой вопрос: как мне автоматически переключаться на другую serviceAccountKey.json, когда я переключаюсь на другую базу данных через firebase use?


person Jaye Renzo Montejo    schedule 19.04.2018    source источник


Ответы (2)


Каждый проект Firebase будет иметь собственную конфигурацию среды. Решение состоит в том, чтобы хранить там ключи сервисной учетной записи.

Установите ключ сервисного аккаунта для каждого проекта Firebase:

firebase use default
firebase functions:config:set admin.key="serviceAccountKey-dev.json"

firebase use production
firebase functions:config:set admin.key="serviceAccountKey-prod.json" 

Конфигурация среды будет доступна через functions.config():

const functions = require('firebase-functions')
const gcs = require('@google-cloud/storage')({ 
  keyFilename: functions.config().admin.key 
})
person Jaye Renzo Montejo    schedule 22.05.2018
comment
ПРИМЕЧАНИЕ. После запуска functions:config:set необходимо повторно развернуть функции, чтобы новая конфигурация стала доступной в Firebase. - person Tony O'Hagan; 27.04.2019
comment
этот ответ также показывает, как использовать functions.confg() при локальном тестировании облачных функций. - person Tony O'Hagan; 27.04.2019

firebase use не может сделать ничего подобного автоматически. Он просто прикрепляет проект Firebase к вашей локальной папке проекта. Он просто управляет .firebaserc за вас.

Вам придется найти другой способ сделать это. Может быть, написать скрипт, который управляет как учетными данными, так и firebase use?

person Doug Stevenson    schedule 24.04.2018
comment
Понял. Я просто добавлю скрипт в свой package.json. - person Jaye Renzo Montejo; 26.04.2018