경우에 따라 함수에 타사 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);