콘솔로 이동

환경 구성

경우에 따라 함수에 타사 API 키 또는 조정 가능한 설정과 같은 추가적인 구성이 필요할 수 있습니다. Cloud 함수용 Firebase SDK는 이러한 프로젝트 관련 데이터 유형을 손쉽게 저장하고 검색할 수 있는 환경 구성을 기본적으로 제공합니다.

프로젝트의 환경 구성 설정

환경 데이터를 저장하려면 Firebase CLI에서 firebase functions:config:set 명령어를 사용합니다. 각 키를 마침표로 네임스페이스화하여 서로 관련된 구성을 그룹화할 수 있습니다. 키에는 소문자만 사용할 수 있습니다. 대문자는 허용되지 않습니다.

예를 들어 다음을 실행하여 특정 서비스의 클라이언트 ID와 API 키를 저장할 수 있습니다.

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

현재 환경 구성 검색

프로젝트의 환경 구성에 현재 저장된 내용을 검사하려면 firebase functions:config:get을 사용합니다. 그러면 다음 형식의 JSON이 출력됩니다.

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

이 기능은 Google Cloud Runtime Configuration API를 기반으로 합니다.

함수에서 환경 구성 액세스

일부 구성은 예약된 firebase 네임스페이스에 속하여 자동으로 제공됩니다. 실행 중인 함수에서는 functions.config()를 통해 환경 구성을 사용할 수 있습니다. 위 구성을 사용하려면 다음과 같은 코드를 사용할 수 있습니다.

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

환경 구성을 사용하여 모듈 초기화

일부 Node 모듈은 구성 없이 바로 사용할 수 있습니다. 다른 모듈은 제대로 작동하려면 추가적인 구성이 필요합니다. 하드코딩하는 것보다는 이 구성을 환경 구성 변수에 저장하는 것이 좋습니다. 이렇게 하면 코드의 이식성이 강화되어 애플리케이션을 오픈소스로 만들거나 프로덕션 버전과 스테이징 버전 간에 손쉽게 전환할 수 있습니다.

예를 들어 Slack Node SDK 모듈을 사용하기 위해 다음과 같이 작성할 수 있습니다.

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

배포하기 전에 slack.url 환경 구성 변수를 설정합니다.

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

추가 환경 명령

  • firebase functions:config:unset key1 key2는 지정한 키를 구성에서 삭제합니다.
  • firebase functions:config:clone --from <fromProject>는 다른 프로젝트의 환경을 현재 활성 프로젝트로 복제합니다.

자동으로 채워지는 환경 변수

함수 런타임 및 로컬로 에뮬레이션되는 함수에는 다음과 같이 자동으로 채워지는 환경 변수가 있습니다.

process.env.GCLOUD_PROJECT: Firebase 프로젝트 ID를 제공합니다.

process.env.FIREBASE_CONFIG: 다음 Firebase 프로젝트 구성 정보를 제공합니다.

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

이 구성은 인수 없이 Firebase Admin SDK를 초기화할 때 자동으로 적용됩니다. 자바스크립트에서 함수를 작성할 때는 다음과 같이 초기화합니다.

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

TypeScript에서 함수를 작성할 경우 다음과 같이 초기화합니다.

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

서비스 계정 사용자 인증 정보를 사용하여 기본 프로젝트 구성으로 Admin SDK를 초기화해야 할 경우에는 파일에서 사용자 인증 정보를 로드하여 다음과 같이 FIREBASE_CONFIG에 추가할 수 있습니다.

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

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