본문 바로가기

카테고리 없음

[openAI api.250205] firebase functions deploy 성공기 (feat. openAI 인스턴스를 생성하는 적절한 시점)

아 도무지 에러가 안잡혀서, 지난 에러에 대해 글을 쓰기로 했다. 짤막하게.

 

openAI api를 쓰려면 api key가 필요하다. 아주 소중한 api key. 

 

처음에는 코드를 이렇게 썼었다. 

 

const functions = require("firebase-functions");
const admin = require("firebase-admin");
const { onDocumentWritten } = require("firebase-functions/v2/firestore");

const openai = new OpenAI({
   apiKey: process.env.OPENAI_API_KEY,
 });

 

그랬더니, 이 함수를 firebase functions에 deploy 하려고 `firebase deploy --only functions`이렇게 하면 어김없이 에러를 마주해야 했다. 

 

OpenAIError: The OPENAI_API_KEY environment variable is missing or empty; 
either provide it, or instantiate the OpenAI client with an apiKey option, 
like new OpenAI({ apiKey: 'My API Key' }).
    at new OpenAI(내 작업 주소)
    블라블라
    블라블라blah blah blah

 

functions가 함수를 deploy 하기 전에 한 번 싸악 parsing 할텐데, 그 때, process.env 위치에는 api key가 없다. 그래서 저 에러가 나는거였다. 저 process.env 위치는 구글 클라우드 시크릿 매니저를 이용해서 그 자리에 넣어둔 값을 참조하란 뜻이었기 때문이다.

 

그래서 저 api key 참조하는 부분을 함수 안으로 넣었더니, 해결이 잘 되었다. 

바뀐 코드는 다음과 같다. 

 

const functions = require("firebase-functions");
const admin = require("firebase-admin");
const { onDocumentWritten } = require("firebase-functions/v2/firestore");
const { onCall } = require("firebase-functions/v2/https");
const { defineSecret } = require("firebase-functions/params");

const openAiApiKey = defineSecret("OPENAI_API_KEY");

// OpenAI는 함수 내부에서 생성 (배포 전 파싱 시점 오류 방지)
const { OpenAI } = require("openai");

....


exports.generateWod = functions.https.onCall(async (data, context) => {

	...

    const openai = new OpenAI({
      apiKey: openAiApiKey.value(),
    });
    
    ...

 

 

이렇게 했더니 아주 기쁘게도! 

 

Deploy complete! 이라는 메세지를 터미널에서 확인할 수 있었다.

 

 

그리고 나는 그 기쁨을 한껏 누려볼 새도 없이, 그 찰나의 기쁨을 누려보지도 못하고, 또 다른 에러를 맞이하여 허우적거리고있다.

 

아니야 허우적거리지 않아 실패는 성공의 어머니 ,, 어머니가 너무 많아..