Ir a la consola

Configuración del entorno

A menudo, necesitarás una configuración adicional para tus funciones, como claves de API de terceros o una configuración ajustable. El SDK de Firebase para Cloud Functions ofrece una configuración de entorno integrada para facilitar el almacenamiento y la recuperación de este tipo de datos para tu proyecto.

Configura el entorno para tu proyecto

Para almacenar los datos del entorno, puedes usar el comando firebase functions:config:set en Firebase CLI. Es posible asignar espacios de nombres a cada clave con el uso de puntos a fin de agrupar los elementos de configuración relacionados. Recuerda que solo se aceptan caracteres en minúscula en las claves y que los caracteres en mayúscula no están permitidos.

Por ejemplo, para almacenar el ID de cliente y la clave de API de "Some Service", podrías ejecutar lo siguiente:

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

Recupera la configuración actual del entorno

Para inspeccionar lo que se almacena actualmente en la configuración de entorno de tu proyecto, puedes usar firebase functions:config:get. Como resultado, mostrará JSON similar al siguiente:

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

Esta función se basa en la API de configuración de Google Cloud Runtime.

Accede a la configuración de entorno en una función

Parte de la configuración se proporciona de forma automática bajo el espacio de nombres firebase reservado. La configuración del entorno está disponible dentro de la función en ejecución a través de functions.config(). Para usar la configuración anterior, el código debería ser similar al siguiente:

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}
  });
});

Utiliza la configuración del entorno para inicializar un módulo

Algunos módulos Node están listos y no necesitan configuración. Otros módulos necesitan una configuración adicional para inicializarse correctamente. Te recomendamos almacenar esta configuración en las variables de entorno en lugar de codificarla de forma fija (hard-coded). Esto ayuda a mantener el código mucho más portátil, lo que permite asignar un código abierto a la aplicación o alternar con facilidad las versiones de producción y prueba.

Por ejemplo, para utilizar el módulo del SDK de Slack para Node, puedes escribir esto:

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

Antes de la implementación, configura la variable de configuración del entorno slack.url:

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

Comandos de entorno adicionales

  • firebase functions:config:unset key1 key2 quita las claves específicas de la configuración.
  • firebase functions:config:clone --from <fromProject> clona el entorno de otro proyecto en el proyecto activo.

Variables de entorno propagadas automáticamente

Hay variables de entorno que se propagan automáticamente durante el tiempo de ejecución de las funciones y en funciones emuladas de manera local, incluidas las siguientes:

process.env.GCLOUD_PROJECT: proporciona un ID de proyecto de Firebase.

process.env.FIREBASE_CONFIG: proporciona la siguiente información de configuración del proyecto de Firebase:

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

Esta configuración se aplica automáticamente cuando inicializas el SDK de Firebase Admin sin argumentos. Si escribes funciones en JavaScript, inicializa de la siguiente manera:

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

Si escribes funciones en TypeScript, inicializa de la siguiente manera:

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

Si necesitas inicializar el SDK de Admin con la configuración predeterminada del proyecto mediante el uso de las credenciales de la cuenta de servicio, puedes cargar las credenciales desde un archivo y agregarlas a FIREBASE_CONFIG de la siguiente manera:

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

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