1---2name: cloud-run-functions3description: Cloud Run & Cloud Functions4---56# Cloud Run & Cloud Functions78## When to Use9- Deciding between Cloud Run, Cloud Functions, and App Engine10- Configuring autoscaling, concurrency, and cold start behavior11- Building event-driven serverless architectures12- Preparing for GCP Professional Cloud Developer exam1314## Core Jobs1516### 1. Compute Option Decision17| Option | Best for | Billing |18|--------|---------|---------|19| **Cloud Run** | Containerized apps, any language, HTTP/gRPC | Per request + CPU |20| **Cloud Functions (2nd gen)** | Cloud Run under the hood, longer timeout, concurrency | Per request + CPU |21| **App Engine Standard** | Specific runtimes (Python/Java/Go/Node), instant scaling | Per instance hour |22| **App Engine Flexible** | Custom runtimes, Docker, always-on | Per instance hour |2324### 2. Cloud Run Configuration25- **Concurrency** — requests per container instance (default 80, max 1000)26- **Min instances** — keep warm instances to avoid cold starts (set to 1+ for latency-sensitive)27- **Max instances** — cap scaling to control costs28- **CPU allocation** — always-on vs request-only (request-only = cheaper, cold starts)29- **Traffic splitting** — route % of traffic to different revisions (canary/blue-green)3031### 3. Cloud Functions Triggers32- **HTTP trigger** — synchronous, returns response33- **Pub/Sub trigger** — async, event-driven34- **Cloud Storage trigger** — on object create/delete/finalize35- **Firestore trigger** — on document create/update/delete36- **Eventarc** — unified eventing; routes events from GCP services to Cloud Run/Functions3738### 4. Cold Start Mitigation39- Set **min-instances** > 0 for latency-sensitive services40- Keep container images small (use distroless or alpine base)41- Lazy-load dependencies (don't load everything at startup)42- Use Cloud Functions 2nd gen (faster cold starts than 1st gen)4344### 5. Authentication Patterns45- **Unauthenticated** — public APIs (Cloud Run allows-unauthenticated)46- **Service-to-service** — use service account + ID token (not API key)47- **IAM invoker role** — `roles/run.invoker` for Cloud Run, `roles/cloudfunctions.invoker`48- **Audience** — ID token audience must match the service URL4950## Key Concepts51- **Revision** — immutable deployment of a Cloud Run service52- **Service identity** — each Cloud Run service runs as a service account53- **VPC connector** — connect Cloud Run to private VPC resources (Cloud SQL, Redis)54- **Ingress control** — restrict to internal, load balancer only, or all traffic5556## Checklist57- [ ] Min-instances set for latency-sensitive services?58- [ ] Max-instances capped to prevent runaway costs?59- [ ] Service runs as dedicated service account (not default compute SA)?60- [ ] VPC connector configured for private resource access?61- [ ] Unauthenticated access explicitly enabled/disabled?62- [ ] Image stored in Artifact Registry (not Docker Hub)?6364## Output Format65- 🔴 **Critical** — using default compute service account (over-privileged), unauthenticated enabled unintentionally66- 🟡 **Warning** — no min-instances for latency-sensitive, no max-instances cap67- 🟢 **Suggestion** — CPU always-on for latency; min-instances for warm pool6869## Exam Tips70- Cloud Run = containers, any language, HTTP/gRPC; Functions = event-driven, simpler71- Cloud Functions 2nd gen = built on Cloud Run (same infrastructure)72- Traffic splitting → use for canary releases without a load balancer73- Service-to-service auth = ID token (not API key, not user credentials)74- VPC connector required to access Cloud SQL/Memorystore from Cloud Run75- App Engine Standard = instant scale to zero; Flexible = always at least 1 instance