Configuração do ambiente

Muitas vezes, você precisará de configuração adicional para suas funções, como chaves de API de terceiros ou configurações ajustáveis. O SDK do Firebase para Cloud Functions oferece configuração de ambiente integrada para facilitar o armazenamento e a recuperação desses tipos de dados para seu projeto.

Definir a configuração do ambiente para o seu projeto

Para armazenar dados do ambiente, use o comando firebase functions:config:set na Firebase CLI. Cada chave pode receber um namespace com pontos para agrupar configurações relacionadas. Lembre-se de que somente caracteres minúsculos são aceitos nas chaves. Não são permitidos caracteres maiúsculos.

Por exemplo, para armazenar o ID do cliente e a chave de API para "Some Service", você pode executar:

firebase functions:config:set someservice.key="THE API KEY" someservice.id="THE CLIENT ID"

Recuperar a configuração atual do ambiente

Para inspecionar o que está armazenado atualmente na configuração do ambiente do seu projeto, use firebase functions:config:get. Isso enviará ao JSON linhas com a seguinte aparência:

{
  "someservice": {
    "key":"THE API KEY",
    "id":"THE CLIENT ID"
  }
}

Essa funcionalidade é baseada na Google Cloud Runtime Configuration API.

Acessar a configuração do ambiente em uma função

Algumas configurações são fornecidas automaticamente no namespace firebase reservado. A configuração do ambiente é disponibilizada dentro da função em execução por meio de functions.config(). Para usar a configuração acima, seu código deve ter a seguinte aparência:

const functions = require('firebase-functions');
const request = require('request-promise');

exports.userCreated = functions.database.ref('/users/{id}').onWrite(event => {
  let email = event.data.child('email').val();

  return request({
    url: 'https://someservice.com/api/some/call',
    headers: {
      'X-Client-ID': functions.config().someservice.id,
      'Authorization': `Bearer ${functions.config().someservice.key}`
    },
    body: {email: email}
  });
});

Usar configuração do ambiente para inicializar um módulo

Alguns módulos de node estão prontos sem qualquer configuração. Outros módulos precisam de configuração extra para serem inicializados corretamente. Recomendamos que você armazene essa configuração em variáveis de configuração do ambiente, em vez de codificá-la. Isso ajuda você a manter a disponibilidade do seu código, o que permite abrir o código-fonte do seu aplicativo ou alternar facilmente as versões de produção e teste.

Por exemplo, para usar o módulo Slack Node SDK, convém escrever:

const functions = require('firebase-functions');
const IncomingWebhook = require('@slack/client').IncomingWebhook;
const webhook = new IncomingWebhook(functions.config().slack.url);

Antes da implantação, defina a variável de configuração do ambiente slack.url:

firebase functions:config:set slack.url=https://hooks.slack.com/services/XXX

Comandos de ambiente adicionais

  • firebase functions:config:unset key1 key2 remove as chaves especificadas da configuração
  • firebase functions:config:clone --from <fromProject> clona o ambiente de outro projeto no projeto ativo no momento.

Variáveis ​​de ambiente preenchidas automaticamente

Existem variáveis ​​de ambiente que são automaticamente preenchidas no tempo de execução das funções e nas funções emuladas localmente, incluindo:

process.env.GCLOUD_PROJECT: fornece a ID do projeto do Firebase

process.env.FIREBASE_CONFIG: fornece as seguintes informações de configuração do projeto do Firebase:

{
  databaseURL: 'https://databaseName.firebaseio.com',
  storageBucket: 'projectId.appspot.com',
  projectId: 'projectId'
}

Essa configuração é aplicada automaticamente quando você inicializa o SDK Admin do Firebase sem argumentos. Se você estiver escrevendo funções em JavaScript, inicialize deste modo:

const admin = require('firebase-admin');
admin.initializeApp();

Se você estiver escrevendo funções no TypeScript, inicialize deste modo:

import * as functions from 'firebase-functions';
import * as admin from 'firebase-admin';
import 'firebase-functions';
admin.initializeApp();

Se você precisar inicializar o SDK Admin com a configuração do projeto padrão usando as credenciais da conta de serviço, poderá carregar as credenciais de um arquivo e adicioná-las ao FIREBASE_CONFIG da seguinte maneira:

serviceAccount = require('./serviceAccount.json');

const adminConfig = JSON.parse(process.env.FIREBASE_CONFIG);
adminConfig.credential = admin.credential.cert(serviceAccount);
admin.initializeApp(adminConfig);