Cloud Functions와 Cloud Run을 사용할 때, 환경변수를 어떻게 설정하고 관리하면 좋을지 정리해보았다. 보안을 고려해 .env
파일이나 Secret Manager를 사용하는 방법도 추가하였다.
환경변수(Environment Variables)는 애플리케이션 실행 시 외부에서 주입할 수 있는 값이다.
API 키, DB 주소, 서비스 계정 키 등 민감한 정보를 코드에 하드코딩하지 않고 주입할 때 자주 사용한다.
Cloud Functions 배포 시 --set-env-vars
옵션을 이용해 설정할 수 있다.
gcloud functions deploy my-function \
--runtime python39 \
--trigger-http \
--set-env-vars API_KEY=xxx,DATABASE_URL=mysql://...
단, 콘솔이나 로그에서 환경변수가 노출될 수 있으므로 민감한 값은 다른 방식으로 관리하는 게 안전하다.
.env
파일 활용로컬 테스트나 배포 자동화 스크립트에서는 .env
파일을 활용할 수 있다.
API_KEY=your-secret-api-key
DATABASE_URL=mysql://user:password@host/db
if [ -f .env ]; then
export $(cat .env | xargs)
fi
gcloud functions deploy my-function \
--runtime python39 \
--trigger-http \
--set-env-vars API_KEY=$API_KEY,DATABASE_URL=$DATABASE_URL
.gitignore
/ .gcloudignore
설정.env
파일은 Git이나 GCP 배포 대상에서 제외하는 게 좋다.
# .gitignore / .gcloudignore
.env
이 설정을 통해 민감한 정보가 외부에 유출되는 것을 방지할 수 있다.
Cloud Run도 --set-env-vars
옵션으로 설정할 수 있다.
gcloud run deploy my-service \
--image gcr.io/my-project/my-image \
--set-env-vars API_KEY=xxx,DATABASE_URL=xxx
콘솔 UI에서도 환경변수를 직접 추가할 수 있다.
(서비스 → 편집 및 배포 → 환경 변수 설정)
환경변수에 직접 민감한 값을 넣는 게 부담스러울 경우, Secret Manager를 사용할 수 있다.
# 비밀 생성
gcloud secrets create my-secret --replication-policy=automatic
# 값 저장
echo -n "your-secret-value" | gcloud secrets versions add my-secret --data-file=-
# 환경변수에 secret 참조
gcloud functions deploy my-function \
--set-env-vars API_KEY=projects/$PROJECT_ID/secrets/my-secret/versions/latest
Secret Manager를 사용하면 IAM 권한으로 접근 제어가 가능해 보안적인 장점이 있다.
.env
파일은 Git이나 배포 대상에서 제외해야한다.운영 중인 GCP 프로젝트가 있다면, 보안과 유지보수를 위해 환경변수 관리 방식을 한 번쯤 점검해보는 게 좋지 않을까?