[GCP] Google Cloud Functions 2세대에서 환경변수 관리와 인증 방식 정리 (.env → env.yaml + ADC)

yeahcold·2025년 4월 2일
0

Data Engineering

목록 보기
16/20

최근에 Cloud Functions 기반 자동화 파이프라인을 구성하면서, 환경변수와 인증 방식 관련해서 구조를 정리할 일이 생겼다. 처음엔 익숙한 .env 방식으로 작성했지만, 다음과 같은 이유로 구조를 변경하게 되었다.


✅ 변경한 이유

1. .envenv.yaml

Cloud Functions 2세대에서는 --env-vars-file=env.yaml 형식으로 배포 시 환경변수를 설정하는 게 공식적이고 더 깔끔하다.

  • .env 파일은 로컬 테스트에는 편하지만,
  • 배포 시 --set-env-vars 옵션으로 일일이 나열하기 불편하고 실수하기도 쉬움
    env.yaml로 환경변수를 선언해두면 버전 관리도 쉽고 배포 시도 간단해진다.

2. 서비스 계정 키 파일 제거 (→ ADC)

처음에는 Google Sheets 연동 시 gspread.service_account(filename=...) 방식으로 키 파일을 사용했다.
하지만 Cloud Functions나 Cloud Run과 같이 GCP 리소스 내부에서 실행되는 환경이라면, Application Default Credentials(ADC) 를 사용하는 게 더 안전하고 간단하다.

  • 키 파일을 직접 GCS에 올려놓고 /tmp로 복사해서 쓰는 건 불필요한 번거로움
  • GCP 서비스 계정에 권한만 잘 부여하면 google.auth.default() 로 바로 인증 가능
import google.auth
from google.auth.transport.requests import AuthorizedSession
import gspread

creds, _ = google.auth.default(scopes=["https://www.googleapis.com/auth/spreadsheets.readonly"])
gc = gspread.Client(auth=creds)
gc.session = AuthorizedSession(creds)

이 코드로 별도의 JSON 키 없이 gspread 연동이 가능하다. Cloud Function 실행 환경에서 "기본 인증 정보"가 자동으로 사용되기 때문.


💡 참고사항

  • GCP 리소스 위에서 돌아가는 함수라면 서비스 계정 권한만 정확히 주는 게 중요
  • GCS 키 파일 없이도 ADC 이용하면 Sheets, BigQuery 등 거의 모든 GCP 리소스 접근 가능
  • Cloud Function 로그에 logging.info()가 안 나올 경우, logging.basicConfig() 대신 logging.getLogger().setLevel(logging.INFO)로 해결 가능
profile
Software Engineer

0개의 댓글