GCP Cloud Run은 Google Cloud의 완전 관리형 서버리스 컨테이너 플랫폼이다. Docker 컨테이너를 HTTP 요청에 따라 자동 스케일링하며, 요청이 없으면 0으로 스케일 다운한다.
Cloud Run vs GKE vs App Engine
| 항목 | Cloud Run | GKE | App Engine (Standard) |
|---|
| 컨테이너 | 완전 지원 | 완전 지원 | 제한 (런타임 기반) |
| 스케일 to zero | 기본 | 추가 설정 필요 | 지원 |
| 콜드 스타트 | 있음 | 없음 | 있음 |
| 트래픽 분할 | 지원 | 수동 | 지원 |
| VPC 통합 | 지원 | 네이티브 | 제한적 |
| 관리 복잡도 | 낮음 | 높음 | 낮음 |
배포 예시
bash
# 컨테이너 빌드 및 배포
gcloud run deploy order-service --image=gcr.io/my-project/order-service:latest --region=asia-northeast3 --platform=managed --allow-unauthenticated --concurrency=100 --min-instances=0 --max-instances=10 --memory=512Mi --cpu=1 --set-env-vars="DB_URL=postgresql://..." --set-secrets="API_KEY=my-secret:latest"
Cloud Run 서비스 YAML
yaml
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: order-service
annotations:
run.googleapis.com/ingress: all
spec:
template:
metadata:
annotations:
autoscaling.knative.dev/minScale: "1"
autoscaling.knative.dev/maxScale: "100"
run.googleapis.com/startup-cpu-boost: "true"
spec:
containerConcurrency: 80
containers:
- image: gcr.io/my-project/order-service:latest
ports:
- containerPort: 8080
resources:
limits:
cpu: "2"
memory: "1Gi"
env:
- name: NODE_ENV
value: production
트래픽 분할 (Blue/Green, Canary)
bash
# 새 버전에 10% 트래픽
gcloud run services update-traffic order-service --to-revisions=order-service-v2=10,order-service-v1=90
# 점진적 마이그레이션
gcloud run services update-traffic order-service --to-latest
Pub/Sub 연동 (Cloud Run Jobs)
Cloud Run Jobs는 HTTP 요청 없이 배치 작업을 실행한다. Pub/Sub 구독, 스케줄 작업, 데이터 마이그레이션에 적합하다.