programing

Firebase용 Cloud Functions의 로컬 환경 변수 설정 방법

starjava 2023. 7. 1. 07:57
반응형

Firebase용 Cloud Functions의 로컬 환경 변수 설정 방법

저는 http cloud 함수를 사용하여 요청을 듣고 간단한 메시지를 반환합니다.

다음을 사용하여 로컬에서 클라우드 기능을 개발하고 있습니다.

firebase serve --only functions

다음을 사용하여 사용자 지정 환경 변수를 설정했습니다.

firebase functions:config:set

아래 코드를 사용하여 사용자 지정 구성 변수에 액세스하면 프로젝트가 배포될 때 제대로 작동합니다.

 functions.config()

그러나 로컬로 개발할 때는 작동하지 않습니다.http://localhost:5002/my-project-name/us-central1/functionName을(를) 눌러 함수가 트리거된 경우 사용자 지정 구성 변수에 액세스할 수 없습니다.functions.config()를 로컬에서 사용하면 사용자 지정 구성 변수가 아닌 기본 구성을 볼 수 있습니다.

로컬에서 작업할 때 환경 변수에 대한 대체 솔루션 또는 모범 사례가 있습니까?

현재로서는 수동으로 생성해야 합니다..runtimeconfig.json 명령을 실행하여 functions 디렉토리 안에 파일을 저장합니다.그런 다음 serve 명령을 실행합니다.

firebase functions:config:get > .runtimeconfig.json

Windows PowerShell을 사용하는 경우 위의 내용을 다음으로 대체합니다.

firebase functions:config:get | ac .runtimeconfig.json

자세한 내용은 https://firebase.google.com/docs/functions/local-emulator 에서 확인할 수 있습니다.

환경 변수(process.env)를 사용하려는 사용자를 위해 이 해결 방법을 따릅니다.

배포하기 전에 구성 값 설정

firebase functions:config:set envs.db_host=$DB_HOST_PROD envs.db_user=$DB_USER_PROD envs.db_password=$DB_PASSWORD_PROD envs.db_name=$DB_NAME_PROD envs.db_use_ssl=false

함수 코드 아래에서 구성을 읽고 환경 변수를 먼저 업데이트합니다.

const functions = require('firebase-functions');
const config = functions.config();

// Porting envs from firebase config
for (const key in config.envs) {
    process.env[key.toUpperCase()] = config.envs[key];
}

.env.json이라는 파일을 유지하고 배포 명령을 트리거할 때 로드할 수 있습니다.

{
  "name": "project",
  "version": "0.0.0",
  "scripts": {
    "deploy": "npm run env && firebase deploy --only functions",
    "env": "test -f env.json && firebase functions:config:unset env && firebase functions:config:set env=\"$(cat env.json)\" || echo \"Please add the file env.json before deploy.\""
  },
  "dependencies": {
    "firebase-functions": "^3.1.0"
  },
  "devDependencies": {
    "firebase-functions-test": "^0.1.6"
  }
}

문제를 Windows Powershell로 좁혔습니다.

입니다.firebase functions:config:get > .runtimeconfig.jsonpowershell에서 손상된 json을 생성합니다. 이유를 알 수 없습니다. 구문 분석 시 위치 0의 JSON에서 예기치 않은 토큰 �이 제공됩니다.

Windows 명령 프롬프트에서 .runtimeconfig.json generation 명령을 실행하여 해결했습니다.

Nrwl NX를 사용하는 경우 다음을 생성해야 합니다..runtimeconfig.json의 내부에dist/apps/functions디렉토리입니다.

package.json:

{
  "scripts": {
    "firebase:emulators:start": "firebase functions:config:get > dist/apps/functions/.runtimeconfig.json && env-cmd firebase emulators:start --export-on-exit=\".firebase-emulator\" --import=\".firebase-emulator\""
  }
}

최고 등급의 답변이 작동하는지는 잘 모르겠지만, Mac의 Firebase 기능(로컬로 제공)에 대해서는 다음과 같은 작업을 수행합니다.

npm run admin-keys && export dev=true && firebase emulators:start

관리 키 위치

"admin-keys": "export GOOGLE_APPLICATION_CREDENTIALS='./.keys/admin.keys.json'"

구성을 로드합니다..runtimeconfig.json

프로덕션의 경우 다음과 같은 작업을 수행하여 수동으로 설정해야 합니다.

firebase functions:config:set facebookCred.secret="something"

언급URL : https://stackoverflow.com/questions/44766536/how-do-you-setup-local-environment-variables-for-cloud-functions-for-firebase

반응형