Cloud Run — szerverless konténerek
- cloud-runBevezető
01 — Bevezetés
Mi a Cloud Run?
Az alapfilozófia
- Konténer mint egység — bármilyen nyelv, bármilyen futtatókörnyezet, ami tudja a HTTP-t és figyel egy porton. Nincs vendor-lock futtatókörnyezetbe (mint az AWS Lambdánál a Node 20 vagy Python 3.12), bármit becsomagolhatsz Docker-be.
- Scale-to-zero — ha nincs forgalom, nincs futó példány, nem fizetsz semmit. Ezt nem mindegyik szerverless platform tudja, és pont ez teszi a Cloud Run-t alkalmassá kis-közepes projektekre is.
- Per-másodperc számlázás — 100 ms-os pontossággal mérik a futási időt, és csak azt kell fizetni. Egy ritkán hívott háttérfeladat lehet 0 forint havonta.
Mit ad a dobozból?
- HTTPS-végpont — a Cloud Run-tól kapott URL automatikusan HTTPS, érvényes tanúsítvánnyal. Saját domainnel könnyen összekötheted.
- Autoskálázás — 0-tól ezerig, magától. Ezt nem te konfigurálod, nem te írod a HPA-szabályokat — egyszerűen működik.
- Verziózás és traffic splitting — minden telepítés egy új revízió, és a forgalmat százalékosan oszthatod el a régi és az új között. Tökéletes a canary deploy-hoz.
- Beépített IAM — a Google IAM rendszerébe integrált, finom-szemcsés jogosultságkezeléssel.
- Logging és monitoring — a Google Cloud Logging-ba és Monitoring-ba magától integrálódik, semmit nem kell beállítanod.
- Több régiós telepítés — egyetlen paranccsal több régióba telepíthetsz, és a forgalmat globális load balancer osztja szét.
- cloud-runKözéphaladó
02 — Négy futási modell
Services, jobs, worker pools, instances
Cloud Run services — a HTTP-szerver
- Tipikus felhasználás: REST API, GraphQL szerver, weboldal-backend, webhook-fogadó, Next.js / Nuxt SSR, NestJS API.
- Maximális futási idő: 60 perc kérésenként.
- Skálázás: 0-tól tetszőleges példányszámig (alapból max 100).
Cloud Run jobs — a batch-feladat
- Tipikus felhasználás: napi statisztika-számolás, adatbázis-migráció, batch ML-inferencia, video-átkódolás, riport-generálás, archiválás.
- Maximális futási idő: 24 óra taskonként.
- Skálázás: task-szintű párhuzamosság (akár 10 ezer párhuzamos task).
Cloud Run worker pools — a sor-feldolgozó
- Tipikus felhasználás: e-mail-küldő-szolgáltatás, video-feldolgozási sor, hosszan futó ML-feladatok, big tömeges üzenet-feldolgozás.
- Számlázás: instance-alapú — a teljes futási idő alatt fizetsz, nem csak a kérésnél.
- Skálázás: állandó példányszám, magad konfigurálod.
Cloud Run instances — az egyedi konténer
Egy összevető táblázat
| Modell | Trigger | Számlázás | Tipikus eset |
|---|---|---|---|
| services | HTTP-kérés | kérés + futási idő | API, weboldal-backend |
| jobs | kézi indítás vagy cron | teljes futási idő | batch, riport |
| worker pools | (nincs — magától fut) | instance-óra | sor-feldolgozás, async munka |
| instances (preview) | kézi indítás | instance-óra | AI-agent, long-running |
- cloud-runKözéphaladó
03 — Telepítés
Telepítés — forráskódból vagy Dockerfile-ból
Telepítés forráskódból (buildpacks)
package.json → Node.js, requirements.txt → Python, stb.), és magától felépíti a megfelelő konténert. Nem tökéletes minden esetre, de egyszerű projekteknél nagyon gyors.# Deploy a NestJS app from source
$ gcloud run deploy my-api \
--source . \
--region europe-west1 \
--allow-unauthenticated
# Output: Service URL: https://my-api-abc123.run.app
Telepítés Dockerfile-ból
# Build and push to Artifact Registry
$ gcloud builds submit --tag europe-west1-docker.pkg.dev/PROJECT/repo/my-api
# Deploy from the built image
$ gcloud run deploy my-api \
--image europe-west1-docker.pkg.dev/PROJECT/repo/my-api \
--region europe-west1 \
--memory 512Mi \
--cpu 1 \
--concurrency 80
Egy egyszerű Dockerfile
FROM node:22-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM node:22-alpine
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
# Cloud Run tells you which port to listen on via PORT
ENV PORT=8080
CMD ["node", "dist/main.js"]
process.env.PORT-ot a kódodban, ne hardkódolj. Ha a portod nem stimmel, az app indul, de a Cloud Run nem tudja átirányítani hozzá a forgalmat, és időtúllépés lesz.CI/CD Cloud Build-del
cloudbuild.yaml-t adsz, és minden git-push-ra magától épít, tesztel, telepít. GitHub-os projekt is köthető hozzá pár kattintással. Egy átlagos pipeline lefut 2-4 perc alatt, és nincs külön CI-server-üzemeltetés.- cloud-runKözéphaladó
04 — Skálázás
Autoskálázás és párhuzamosság
Hogy működik a skálázás?
| Beállítás | Mit jelent | Alapérték |
|---|---|---|
--concurrency | Egy példány hány kérést kezelhet egyszerre | 80 |
--min-instances | Minimum példány, akkor is, ha nincs forgalom | 0 |
--max-instances | Maximum példány csúcsforgalomban | 100 |
--cpu-throttling | Ha kérés nincs, a CPU lecsökken (alapból be) | be |
Párhuzamosság — mire figyelj
- Memóriaintenzív kérés — ha minden kérés sok memóriát fogyaszt (pl. nagy fájlt tölt be), 80 párhuzamossal együtt kifuthatsz a memória-keretből. Ekkor 10-20 párhuzamossal jobban jársz.
- CPU-intenzív kérés — ha minden kérés sokat számol, akkor 80 párhuzamos kérés egy 1 vCPU-s gépen rosszabb teljesítményt ad, mint 4 párhuzamos. A throughput jobb lesz, ha minden kérés gyorsabban végez.
- Adatbázis-kapcsolat-pool — ha az app pl. PostgreSQL-hez kapcsolódik, és a kapcsolat-pool max 10, akkor 80 párhuzamos kérés egy részénél időtúllépés lesz.
Min instances — a hideg indulás ellenszere
--min-instances 1-re. Egy 512 MiB-os példány havi költsége kb. 11-12 USD ($0.5/nap). Egy felhasználó-szembesülő API-nál sokszor megéri a látható UX-javulásért. Egy belső admin-funkciónál (amit napi 5-ször használnak) felesleges.- cloud-runKözéphaladó
05 — Hideg indulás
Hideg indulás — az eltűnő szerver ára
Mi történik egy hideg indulásnál?
- Konténer-példány készítés — a Google létrehoz egy új konténert.
- Konténer indítás — a base-image betöltődik, az ENTRYPOINT lefut.
- Az alkalmazás indul — Node.js, Python, JVM, .NET CLR feláll, dependenciák betöltődnek.
- A HTTP-szerver figyelni kezd a porton — a Cloud Run ekkor küldi az első kérést.
A klasszikus optimalizációk
- Kicsi base-image —
node:alpine~50 MB,nodeteljes ~1 GB. Az alpine gyorsabban töltődik be. - Karcsú dependenciák — minden import a fájl tetején lassítja az indulást. Csak amit tényleg kell.
- Lazy loading — egy ritkán használt nehéz könyvtárat (pl. PDF-generáló, Sharp) dynamic import-tal töltsd be.
- JVM-optimalizáció — Java appoknál a hideg indulás jelentős. AOT-fordítás GraalVM-mel vagy a Spring Boot 3 native image-szel sokszor 5x-ös gyorsulás.
- Min instances — egyszerűen 1 (vagy több), ha az UX kritikus.
Az „instance-based billing" mód
- cloud-runHaladó
06 — GPU és disk
GPU támogatás és ephemeral disk
GPU a Cloud Run-on
| GPU | VRAM | Min CPU/RAM | Ár (Tier 1) |
|---|---|---|---|
| NVIDIA L4 | 24 GB | 4 vCPU / 16 GiB | ~$0.67/óra |
| NVIDIA RTX PRO 6000 Blackwell | 96 GB | 20 vCPU / 80 GiB | magasabb (kérésre) |
Mire jó GPU a Cloud Run-on?
- LLM-inferencia — Llama, Mistral, Gemma modellek futtatása valós idejű chatre. A 70B+ paraméteres modellek a Blackwell-en futnak.
- Stable Diffusion-szerű kép-generálás — bursty forgalom, nullára skálázás.
- Embedding-generálás — szöveget vektorokká alakítás, RAG-rendszerekhez.
- Video-feldolgozás — átkódolás, thumbnail-generálás, GPU-gyorsított stream-elés.
- Fine-tuning — egy modell saját adaton való finomhangolása (Cloud Run jobs-szal, nem szervizzel).
Ephemeral disk (preview, 2026)
- cloud-runKözéphaladó
07 — Költség
Költség — hogyan számláz?
Az ingyenes keret
- 2 millió kérés havi.
- 360 ezer GiB-másodperc memória.
- 180 ezer vCPU-másodperc CPU-idő.
- 1 GiB egress hálózati kimenő forgalom.
A számlázás dimenziói
| Dimenzió | Egységár (Tier 1, kb.) |
|---|---|
| vCPU-másodperc | $0.000024 |
| GiB-másodperc memória | $0.0000025 |
| Kérés (1 millióra) | $0.40 |
| NVIDIA L4 GPU másodperc | $0.000187 |
Konkrét számolás
Committed Use Discounts
08 — vs. Cloud Functions
Cloud Run vs. Cloud Functions
A két modell
| Szempont | Cloud Functions v2 | Cloud Run services |
|---|---|---|
| Egység | Egy függvény | Egy konténer (akármilyen webszerver) |
| Indítók | HTTP, Firestore, Storage, Pub/Sub, Auth, Schedule | HTTP (Pub/Sub, Schedule mellé Eventarc) |
| Nyelv-támogatás | Node.js, Python, Java, Go, .NET, Ruby, PHP | Bármi, ami Docker-be csomagolható |
| Maximum futási idő | 9 perc esemény / 60 perc HTTP | 60 perc |
| Maximum memória | 32 GB | 32 GB |
| GPU | nincs | NVIDIA L4, RTX PRO 6000 Blackwell |
| Indítási sebesség | ~0.5-1.5 mp (v2) | ~0.5-2 mp |
| Kódolási élmény | Egyszerű függvény-szignatúra | Saját webszerver (Express, Fastify, NestJS, …) |
Mikor melyik?
Cloud Functions vagy Cloud Run?
Egy konkrét eseményre reagáló kis logika: Firestore-trigger, Storage-trigger, webhook-fogadó. Ahol a kód lényege egyetlen függvény, és a többit a Firebase ökoszisztémával együtt használod.
Egy nagyobb backend: REST API, GraphQL szerver, web-app, ML-szolgáltatás. Ahol szerver-keretrendszert használsz (NestJS, Express, FastAPI), és kontrollt akarsz a teljes konténer felett.
Egy gyakorlati hibrid
09 — vs. App Engine és GKE
A Google Cloud egyéb opciói: App Engine és GKE
App Engine — a klasszikus PaaS
Google Kubernetes Engine (GKE)
A három réteg viszonya
| Szolgáltatás | Mit kell csinálnod | Mikor választanád |
|---|---|---|
| Cloud Run | Konténert csomagolsz, a többit a platform | HTTP-szolgáltatások, API-k, batch-feladatok, scale-to-zero |
| App Engine | Kódot adsz, a platform futtatja (Standard) vagy konténert (Flexible) | Régi projektek karbantartása, migrációs útpont |
| GKE Autopilot | Pod-okat definiálsz, a Google futtatja | Több service együtt, sidecar-ok, mesh, finom konfiguráció |
| GKE Standard | Cluster-t üzemeltetsz | Teljes kontroll, hibrid környezet, on-prem integráció |
10 — vs. AWS
AWS-megfelelők — Lambda és Fargate
AWS Lambda
- Korlátozott futtatókörnyezet — Node.js, Python, Java, .NET, Go, Ruby, és „custom runtime" (de nem teljes Docker-konténer, hanem egy speciális layer-rendszer). 2020 óta van „container image" mód is, ami közelebb áll a Cloud Run-hoz, de méretkorlát van (10 GB).
- Maximum futási idő — 15 perc. A Cloud Run-on 60 perc kérésenként, vagy 24 óra job-onként.
- Hideg indulás — több bejelentés alapján a Lambda hideg indulása lassabb, főleg a Java esetében. A Provisioned Concurrency a megoldás (ami lényegében min instances).
- Nincs natív HTTP-szerver — egy Lambda függvény egy esemény-objektumot kap, nem HTTP-kérést. Ha klasszikus webszerver-stílusban akarsz dolgozni (Express, Fastify, FastAPI), az AWS API Gateway + Lambda + adapter-csomagok kombinációja kell. A Cloud Run-on ez közvetlen.
AWS Fargate
- Nincs natív scale-to-zero — a Fargate-on legalább 1 task fut mindig (kivéve specifikus konfigurációkkal). A Cloud Run alapból scale-to-zero.
- Per-perc számlázás a Fargate-en (per-másodperc a Cloud Run-on). Kis terhelésnél a Cloud Run kedvezőbb.
- Több konfiguráció — VPC, security groups, ALB, target groups. A Cloud Run egy parancs.
Egy összehasonlító táblázat
| Szempont | Cloud Run | AWS Lambda | AWS Fargate |
|---|---|---|---|
| Egység | Konténer | Függvény (vagy konténer 10 GB-ig) | Konténer |
| Maximum futási idő | 60 perc | 15 perc | nincs korlát |
| Scale-to-zero | igen | igen | nem (alapból) |
| Számlázás | per másodperc | per millisec | per perc |
| GPU | L4, RTX PRO 6000 | nincs | nincs (Fargate-en) |
| HTTP-natív | igen | nem (API Gateway kell) | igen |
11 — vs. Vercel és Render
A „developer experience" platformok — Vercel, Render, Fly.io
Vercel
- Drágább nagy forgalomra — a Vercel a felhasználói élményre számláz (function-execution + bandwidth), és ez gyors növekedésnél tud meglepő lenni. Cloud Run-on a CPU-/memória-percek kiszámíthatóbbak.
- Nem-Next.js workload-ok — egy NestJS API vagy egy Python-ML-szolgáltatás Vercel-re tehető, de a platform Next.js-re van élezve. Cloud Run univerzálisabb.
- Edge-funkciók korlátai — a Vercel Edge Runtime a V8 Isolate-on fut, nem a teljes Node.js-en — pár csomag nem működik. A Cloud Run teljes Node.js-t ad.
Render
Fly.io
Egy összehasonlító táblázat
| Szempont | Cloud Run | Vercel | Render | Fly.io |
|---|---|---|---|---|
| Fókusz | Konténerek általában | Next.js, frontend | PaaS, full-stack | Edge, globális |
| Scale-to-zero | igen | igen (function-ök) | nem (alap) | igen |
| Konténer-szabványos | igen (Knative) | nem | igen | igen |
| Fejlesztői élmény | jó | kiváló (Next.js-szel) | kiváló | jó |
| GPU | L4, Blackwell | nincs | nincs | elérhető |
| Globális LB alapból | igen | igen | korlátozottan | igen |
| Költség kis forgalmon | $0 (free tier) | $0 (Hobby) | ~$7/mo (Standard) | ~$5/mo (per app) |
12 — Mikor érdemes
Mikor érdemes Cloud Run-t választani?
Akkor jó választás, ha…
- Konténerben gondolkodsz — már van Dockerfile-od, vagy kényelmes ezt fejleszteni.
- Egyenetlen forgalmú az alkalmazás — sok pillanat 0 forgalom, alkalmanként csúcsok. Itt a scale-to-zero komoly költségmegtakarítás.
- Standard webszerver-keretrendszerben írsz — Express, NestJS, FastAPI, Flask, Spring Boot. A Cloud Run egy klasszikus szerver fut, semmi különös API-modell.
- EU-s ügyfélkör, GDPR-fontos — a Cloud Run-on könnyen tartható az adat EU-ban (europe-west1, europe-west3).
- AI-/ML-inferencia bursty forgalommal — a GPU-támogatás scale-to-zero-val nagyon kedvező az on-demand modellekre.
- Vendor-lock minimalizálása fontos — a Knative-szabvány miatt elvileg átköltözhető más Kubernetes-re.
Mikor nem ideális
- WebSocket-szerű hosszú kapcsolatok dominálnak — bár a Cloud Run támogatja a WebSocket-et (60 percig), a klasszikus mintában az instance-billing modell jobb. Nagy forgalomnál egy állandó GKE-cluster olcsóbb.
- Több service együtt, közös belső networking-gel — a Cloud Run service-ek könnyen kommunikálnak, de bonyolult mesh-konfigurációhoz GKE Autopilot előnyösebb.
- StatefulSet-szerű viselkedés kell — egy adott példánynak adott nevet, állandó adatkönyvtárat. A Cloud Run instances modell részben megoldja, de teljes StatefulSet-funkció nincs.
- Nagy állandó terhelés — ha az app 24/7 magas terhelésen fut, egy committed GKE-cluster vagy Compute Engine olcsóbb lehet (per-óra árban).
Tervezési checklist Cloud Run-ra váltás előtt
- ☐Az appom konténerizálható, és van vagy lesz Dockerfile-om vagy buildpacks-támogatott szerkezetem?
- ☐A környezeti változók (API-kulcsok, DB-konnekciók) a Secret Manager-be kerülnek, nem a kódba?
- ☐A PORT változót a kódom a környezetből olvassa, nem hardkódolva?
- ☐Az állapotom (session, cache) külön szolgáltatásban van (Redis, Firestore, DB), nem a memóriában?
- ☐A párhuzamosság beállításait átgondoltam (alapból 80, memória- vagy DB-pool-korlátok mentén csökkentve)?
- ☐Eldöntöttem, kell-e
min-instances 1a hideg indulás ellen? - ☐Az EU-s adatkezeléshez europe-west1 vagy europe-west3 régiót választottam?
- ☐A CI/CD beállítva, hogy git-push-ra magától épít és telepít (Cloud Build, GitHub Actions)?
- ☐A logging strukturált (JSON), nem szabad szöveges?
- ☐A GPU-szükséglet egyértelmű, és nem felesleges (sok use-case CPU-n is jól megy)?
- ☐A költség-becslést megcsináltam a Pricing Calculator-ral, és a havi várt költség elfogadható?
- ☐Nincs olyan funkcióm, ami Cloud Functions-ben jobban megoldható (pl. Firestore-trigger)?
A Cloud Run nem csodaszer, de a 2020-as évek közepén egy új projektnél a legtöbb szerveres workload-ra ez a kiindulási pont. Egyszerű, rugalmas, kompetitív áron, és nem zár vendor-be. Akkor érdemes mást választani, ha a project-igények ezt indokolják — nem fordítva.
A Firebase ökoszisztémában a Cloud Run-nak egyre nagyobb szerepe van: a Firebase Hosting már natívan tudja routolni a forgalmat Cloud Run-ra (a rewrites szakaszon keresztül), így egy Angular SPA + Cloud Run backend kombináció ma már a klasszikus választás. A korábbi cikkben tárgyalt Cloud Functions továbbra is jó az esemény-trigger-ek és a kicsi, fókuszált backend-műveletek esetére, viszont egy klasszikus REST API vagy GraphQL szerver építéséhez a Cloud Run kényelmesebb.