최근에 Cloud Functions 기반 자동화 파이프라인을 구성하면서, 환경변수와 인증 방식 관련해서 구조를 정리할 일이 생겼다. 처음엔 익숙한 .env 방식으로 작성했지만, 다음과 같은 이유로 구조를 변경하게 되었다.
.env → env.yamlCloud Functions 2세대에서는 --env-vars-file=env.yaml 형식으로 배포 시 환경변수를 설정하는 게 공식적이고 더 깔끔하다.
.env 파일은 로컬 테스트에는 편하지만,--set-env-vars 옵션으로 일일이 나열하기 불편하고 실수하기도 쉬움env.yaml로 환경변수를 선언해두면 버전 관리도 쉽고 배포 시도 간단해진다.처음에는 Google Sheets 연동 시 gspread.service_account(filename=...) 방식으로 키 파일을 사용했다.
하지만 Cloud Functions나 Cloud Run과 같이 GCP 리소스 내부에서 실행되는 환경이라면, Application Default Credentials(ADC) 를 사용하는 게 더 안전하고 간단하다.
/tmp로 복사해서 쓰는 건 불필요한 번거로움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 실행 환경에서 "기본 인증 정보"가 자동으로 사용되기 때문.
logging.info()가 안 나올 경우, logging.basicConfig() 대신 logging.getLogger().setLevel(logging.INFO)로 해결 가능