Ga naar hoofdinhoud

Cloud Run: een gids voor het deployen van gecontaineriseerde apps in GCP

Leer over Cloud Run en de use-cases, en volg daarna onze stapsgewijze gids om je eerste instance te starten.
· 9 min lezen

Verken met AI

Cloud Run is Google Cloud’s volledig beheerde serverless-platform waarmee je applicaties kunt deployen zonder je zorgen te maken over infrastructuurbeheer. Het is superflexibel en een uitstekende keuze voor allerlei projecten, van hobby tot enterprise.

In dit artikel leg ik uit wat Cloud Run is, hoe het werkt, welke use-cases het oplost en hoe het zich verhoudt tot andere serverless-oplossingen. Ook laat ik je stap voor stap zien hoe je je eerste Cloud Run-applicatie deployt!

En voordat je begint: ben je helemaal nieuw met cloud computing, dan raad ik je onze cursus Introduction to Cloud Computing aan. Deze cursus behandelt de basis van de cloud, legt sleuteltermen uit zoals schaalbaarheid en latentie en gaat in op de voordelen van cloudtools van aanbieders zoals GCP.

Wat is Cloud Run? 

Cloud Run is een serverless platform voor het uitvoeren van containers, waarmee je applicaties kunt deployen zonder je zorgen te maken over infrastructuurbeheer. 

Bij traditionele servergebaseerde deployments moet je doorgaans virtuele machines inrichten en onderhouden. Cloud Run werkt net even anders en abstraheert dat allemaal weg om een volledig beheerde omgeving te bieden. 

Het is gebouwd op Knative (een open-source, op Kubernetes gebaseerd platform dat serverless workloads mogelijk maakt), wat betekent dat je applicatie automatisch schaalt op basis van de vraag. Neemt het verkeer toe, dan start Cloud Run meer instances op om dit op te vangen. Daalt het verkeer, dan schaalt het terug. Het kan zelfs helemaal naar nul, zodat je niets betaalt wanneer je app niet actief draait.

Cloud Run is kostenefficiënt, maar ook superflexibel. Je kunt applicaties deployen in elke taal en met elk framework of elke binary, zolang het maar in een container draait. Je kunt werken met gangbare technologieën zoals Node.js, Python, Go, Java, of juist met meer obscure opties. In de praktijk betekent dit dat Cloud Run back-endservices, API’s, AI-workloads, webapps en zelfs geplande batchjobs kan draaien. 

Dat was alvast een voorproefje. Laten we iets dieper ingaan op de belangrijkste features van Cloud Run.

Belangrijkste features van Cloud Run

We noemden er net een paar, maar hier is een volledig overzicht van de hoofdfeatures van Cloud Run.

Taal- en frameworkagnostisch

Een van de grootste voordelen van Cloud Run is dat je niet vastzit aan een specifieke taal of framework. Zolang je applicatie in een container draait, kun je die deployen. Werk je in een team met een diverse techstack, dan kun je Cloud Run voor al je services gebruiken. Eén tool om ze allemaal te bedienen!

Automatisch schalen

Cloud Run schaalt horizontaal en dynamisch op basis van verkeer. Krijgt je applicatie meer requests, dan start Cloud Run automatisch meer instances. Daalt de vraag, dan schaalt het terug, indien nodig zelfs helemaal naar nul.

Ingebouwde beveiliging en compliance

Cloud Run biedt automatisch HTTPS voor alle gedeployde services, door Google beheerde service-identiteit voor veilige authenticatie, VPC-connectiviteit voor private networking en ingebouwde compliancecertificeringen zoals SOC 2, ISO 27001 en HIPAA (voor zorgapplicaties). Kortom: je zit goed.

Integratie met Google Cloud-services

Omdat Cloud Run onderdeel is van het Google Cloud-ecosysteem, werkt het naadloos samen met andere GCP-services. Je kunt het eenvoudig koppelen aan Cloud SQL voor databases, data streamen met Pub/Sub, bestanden opslaan in Cloud Storage of het gebruiken met BigQuery, Firebase en AI/ML-services.

On-demand GPU-ondersteuning

Voor AI-workloads biedt Cloud Run nu on-demand GPU-ondersteuning. Dit is een grote verbetering voor machine learning-inferencing, videobewerking en wetenschappelijke computing, omdat je elke GPU-versnelde workload kunt draaien zonder het onderliggende hardwarebeheer.

Cloud Run Functions: een Function-as-a-Service-model (FaaS)

Als je geen volledige containers wilt beheren, biedt Cloud Run Functions een vereenvoudigde, eventgedreven manier om kleine, single-purpose functies te draaien. Het lijkt op AWS Lambda of Google Cloud Functions, maar draait op de infrastructuur van Cloud Run.

Hoe Cloud Run werkt: stap voor stap

In deze sectie laat ik zien hoe je een eenvoudige applicatie naar Cloud Run deployt. Ik begeleid je door het proces van het containerizen van je app, het deployen naar Cloud Run en het automatisch schalen op basis van de vraag.

We gebruiken Docker om onze applicatie te containerizen, maar dat hoeft niet per se. Daarover aan het eind meer.

Stap 1: Stel je omgeving in

Voordat je iets deployt, moet je de volgende tools geïnstalleerd hebben:

  1. Google Cloud SDK: Dit is een command-line interface (CLI) waarmee je kunt communiceren met Google Cloud-services, waaronder Cloud Run. Je kunt het hier installeren.
  2. Docker: Als je app nog niet is gecontaineriseerd, heb je Docker nodig om je app te verpakken. Installeer Docker hier.
  3. Google Cloud-project: Zorg dat je een Google Cloud-project hebt ingesteld. Je kunt er een maken via de Google Cloud Console.

Stap 2: Schrijf je applicatiecode

Laten we nu een eenvoudige “Hello World”-applicatie in Node.js schrijven.

Maak een map voor je app:

mkdir hello-world-app
cd hello-world-app

Maak een index.js-bestand in de map met de volgende inhoud:

const http = require('http');

const requestListener = (req, res) => {
    res.writeHead(200);
    res.end('Hello, Cloud Run!');
};

const server = http.createServer(requestListener);
server.listen(8080, () => {
    console.log('Server is running on port 8080');
});

Maak een package.json om de dependencies van je app te definiëren:

{
    "name": "hello-world-app",
    "version": "1.0.0",
    "main": "index.js",
    "dependencies": {}
}

Nu de applicatie klaar is, gaan we deze containerizen.

Stap 3: Containerize de applicatie

Maak een Dockerfile om het containerimage te definiëren

Maak in je projectmap een bestand met de naam “Dockerfile” met de volgende inhoud:

# Use the official Node.js image as a base
FROM node:16-alpine

# Set the working directory inside the container
WORKDIR /usr/src/app

# Copy package.json and install dependencies (if any)
COPY package*.json ./

# Copy the rest of the application code
COPY . .

# Expose port 8080 for Cloud Run
EXPOSE 8080

# Start the app
CMD ["node", "index.js"]

Bouw het Dockerimage

Voer de volgende opdracht uit om je Dockerimage te bouwen:

docker build -t gcr.io/your-project-id/hello-world-app .

Let op: vervang your-project-id door je Google Cloud-project-ID.

Test het image lokaal

Je kunt je Dockercontainer lokaal testen met:

docker run -p 8080:8080 gcr.io/your-project-id/hello-world-app

Bezoek http://localhost:8080 in je browser om te controleren of de app draait.

Stap 4: Push het image naar Google Artifact Registry

Schakel Artifact Registry in voor je project

Als je Artifact Registry nog niet hebt ingeschakeld, voer dan de volgende opdracht uit

gcloud services enable artifactregistry.googleapis.com

Let op: je moet facturering inschakelen om deze stap te voltooien!

Maak een repository in Artifact Registry

Maak een nieuwe Dockerrepository in Artifact Registry:

gcloud artifacts repositories create hello-world-repo \
--repository-format=docker \
--location=us-central1

Authenticeer Docker bij Artifact Registry

Configureer Docker om te authenticeren met Artifact Registry:

gcloud auth configure-docker us-central1-docker.pkg.dev

Tag het Dockerimage voor Artifact Registry

Tag je Dockerimage met de Artifact Registry-repository-URL:

docker tag gcr.io/your-project-id/hello-world-app us-central1-docker.pkg.dev/your-project-id/hello-world-repo/hello-world-app

Push het image naar Artifact Registry

Push het getagde Dockerimage naar je Artifact Registry-repository:

docker push us-central1-docker.pkg.dev/your-project-id/hello-world-repo/hello-world-app

Stap 5: Deploy naar Cloud Run

Zodra je image is gepusht naar Artifact Registry, kun je het naar Cloud Run deployen, rechtstreeks vanuit Artifact Registry.

Deploy je image naar Cloud Run met de volgende opdracht:

gcloud run deploy hello-world-app \
--image us-central1-docker.pkg.dev/your-project-id/hello-world-repo/hello-world-app \
--platform managed \
--region us-central1 \
--allow-unauthenticated
  • hello-world-app: Dit is de naam van je Cloud Run-service.
  • us-central1-docker.pkg.dev/your-project-id/hello-world-repo/hello-world-app: De URL van je image dat is opgeslagen in Artifact Registry.
  • --platform managed: Zorgt ervoor dat de deployment het volledig beheerde platform van Cloud Run gebruikt (geen GKE-cluster).
  • --region us-central1: Specificeer de regio waar Cloud Run de service moet deployen.
  • --allow-unauthenticated: Hiermee staat je publieke toegang tot de service toe. Als je beperkte toegang nodig hebt, kun je deze vlag aanpassen.

Na het uitvoeren van deze opdracht deployt Cloud Run je gecontaineriseerde applicatie en krijg je een URL om deze te openen.

En dat was het! Kijk even in de GCP-console: daar zou je je nieuwe instance moeten zien.

Stap 6: Opruimen

Om doorlopende kosten te voorkomen, verwijder je service zodra je klaar bent met testen.

1. Verwijder de Cloud Run-service

Voer de volgende opdracht uit om je gedeployde Cloud Run-service te verwijderen:

gcloud run services delete hello-world-app --region us-central1

Dit verwijdert de Cloud Run-instance, maar niet het containerimage.

2. Verwijder het Artifact Registry-image

Om het image uit Artifact Registry te verwijderen, lijst je eerst de images op:

gcloud artifacts docker images list us-central1-docker.pkg.dev/your-project-id/hello-world-repo

Verwijder daarna het image met:

gcloud artifacts docker images delete us-central1-docker.pkg.dev/your-project-id/hello-world-repo/hello-world-app --delete-tags

Nu is je Artifact Registry ook opgeruimd.

3. Verwijder de Artifact Registry-repository (als die niet meer nodig is)

Wil je de Artifact Registry-repository volledig verwijderen, voer dan uit:

gcloud artifacts repositories delete hello-world-repo --location=us-central1

Deze stap is alleen nodig als je helemaal klaar bent met de repository; anders kun je hem hergebruiken voor toekomstige deployments.

4. (Optioneel) Verwijder het Google Cloud-project

Als dit een testproject was en je het niet meer nodig hebt, kun je het hele project verwijderen om alle bijbehorende resources te verwijderen:

gcloud projects delete your-project-id

Source deployments

Weet je nog dat ik zei dat je je app niet altijd handmatig hoeft te containerizen?

Cloud Run ondersteunt nu source deployments, wat betekent dat het met Cloud Build het containerimage voor je kan bouwen op basis van je broncode.

Je kunt de opdracht gebruiken:

gcloud run deploy hello-world-app \
--source . \
--region us-central1 \
--allow-unauthenticated

Cloud Build detecteert automatisch de taal van je applicatie (Node.js, Python, Go, Java, etc.), bouwt een containerimage voor je en slaat dit op in Artifact Registry. Cloud Run deployt vervolgens het gebouwde image alsof je handmatig een container had gemaakt. Ik raad dit zeker aan voor eenvoudige applicaties met ondersteunde talen (Node.js, Python, Go, Java, etc.), maar niet als je volledige controle over de container nodig hebt (bijv. custom dependencies, OS-level tweaks, multi-step builds).

Tips om Cloud Run efficiënt te gebruiken

Een app naar Cloud Run deployen is vrij eenvoudig, maar hem efficiënt laten draaien vergt wat fine-tuning. Ik heb zelf een fase van trial-and-error doorlopen toen ik ermee begon, en dit is wat ik heb geleerd:

1. Cold starts zijn echt

Zeker als je met een groot containerimage werkt. Hoe kleiner je image, hoe sneller je service opstart. Een minimale base image zoals distroless kan veel verschil maken. Als je Python-apps bouwt, probeer dan slim-versies van officiële images. Of als kosten je minder interesseren, zet je minimumaantal instances op 1.

2. De beste variabele om mee te spelen is de request-concurrency

Cloud Run laat elke instance meerdere requests tegelijk afhandelen, maar de standaard (80 requests per container) is vaak niet optimaal. Voor CPU-intensieve taken heb ik gemerkt dat het verlagen van concurrency naar 1 of 2 de boel veel soepeler maakt. Aan de andere kant kunnen API’s doorgaans een hoger aantal aan. Hoe hoger het aantal, hoe meer je het aantal benodigde instances kunt terugbrengen en dus hoe minder je betaalt. Het is zeker de moeite waard om met verschillende waarden te experimenteren om de sweet spot voor je app te vinden.

3. Stel je instancelimieten in!

Superhandig wanneer iemand (ik) besluit om loadtests te doen en een belachelijk aantal requests start. Die les heb ik geleerd zodat jij dat niet hoeft te doen. Stel alsjeblieft je maximale aantal instances in.

4. Zorg dat de juiste mensen toegang hebben tot je instance

Standaard kunnen Cloud Run-services worden benaderd door iedereen met de URL. Handig voor snelle demo’s, maar minder voor productie. Als je app niet publiek bedoeld is, scherm hem dan af met IAM-rechten. 

5. Cloud Logging en Cloud Trace worden je beste vrienden

Als je, net als ik, geneigd bent om problemen te debuggen door via SSH op virtuele machines in te loggen, kom je bedrogen uit. Cloud Run-logboeken worden rechtstreeks naar het Google Cloud-dashboard gestreamd, zodat je daar alles ziet. Zorg dat je gestructureerde logging aan je applicatie toevoegt; dat maakt troubleshooten veel eenvoudiger.

Use-cases voor Cloud Run

We noemden al een paar use-cases voor Cloud Run, zoals webapps, API’s of cronjobs draaien, maar er zijn er natuurlijk nog veel meer.

Video- en afbeeldingsanalyse

Je kunt een model voor beeldherkenning deployen om geüploade afbeeldingen realtime te verwerken voor een socialmediaplatform, of videotran-coding uitvoeren wanneer een video wordt geüpload. Cloud Run kan pieken in de vraag (zoals virale content) aan met geautomatiseerde schaalvergroting, terwijl het bij lage vraag kosten-efficiënt blijft.

Video and image analysis

Bron: Google Cloud

Realtime streamverwerking

Stel dat je een systeem bouwt dat gebruikersgedrag op een online marktplaats monitort. Door eventstreams te verwerken vanuit Pub/Sub of BigQuery kun je direct acties triggeren op basis van gebruikersactiviteit, zoals pushmeldingen sturen of trends realtime analyseren. Cloud Run schaalt automatisch op om binnenkomende events tijdens piekperiodes aan te kunnen en schaalt terug wanneer het volume aan streams afneemt.

Real-time stream processing

Bron: Google Cloud

Realtime bestandsverwerking

Een use-case kan zijn: realtime analyse van logbestanden voor een grote onderneming. Telkens wanneer een logbestand wordt geüpload naar Cloud Storage, kan Cloud Run een container triggeren om het bestand te parsen, analyses uit te voeren en de resultaten op te slaan, terwijl het dynamisch schaalt op basis van de bestandsgrootte en de complexiteit van de verwerkingstaak.

Real-time file processing

Bron: Google Cloud

Serverless IoT-backends

Cloud Run is ideaal voor het afhandelen van backendservices voor IoT-applicaties. In een IoT-oplossing die omgevingsdata van duizenden sensoren bijhoudt, kan Cloud Run bijvoorbeeld de binnenkomende data van elk apparaat realtime verwerken.

Serverless IoT backends

Bron: Google Cloud

Google Cloud Run-prijzen 

Cloud Run werkt met een pay-as-you-go-model: je betaalt alleen voor de compute-resources die worden gebruikt terwijl je applicatie actief draait. Wanneer je app geen requests afhandelt, kan deze terugscha-len naar nul, waardoor je geen onnodige kosten maakt.

Kostenoverzicht

Vanaf maart 2025 rekent Cloud Run kosten op basis van twee hoofdcomponenten:

ResourceKostenGratis tier
CPU$0.000018 per vCPU-seconde240.000 vCPU-seconden/maand
Geheugen$0.000002 per GiB-seconde450.000 GiB-seconden/maand

Dit prijsmodel geldt voor instance-based billing, maar voor request-based billing werkt het anders. De prijs en gratis tier hierboven verschillen ook licht per regio, dus check de officiële Google Cloud-pagina voor de exacte cijfers. Ze hebben een prijs-calculator om je te helpen de kosten in te schatten, en bieden ook kortingen voor committed use.

Kleine tip: verkeer met andere Google Cloud-services in dezelfde regio is gratis, dus probeer Cloud Storage, Cloud SQL of Pub/Sub te gebruiken in plaats van externe services voor data-uitwisseling.

Cloud Run vs. Cloud Run Functions 

Google biedt twee serverless compute-opties: Cloud Run en Cloud Run Functions (voorheen Cloud Functions). Beide laten je code draaien zonder infrastructuur te beheren, maar ze verschillen net even.

FeatureCloud RunCloud Functions
UitvoeringsmodelDraait volledige gecontaineriseerde applicatiesDraait individuele functies (FaaS-model)
RuntimecontroleElke taal, elk framework, custom binariesVoorgedefinieerde runtimes (Node.js, Python, Go, etc.)
StateStateless, maar kan connecties behouden binnen een requestStateless, ontworpen voor eventgedreven workloads
SchalenSchaalt per containerinstanceSchaalt per functie-aanroep
TriggeringHTTP-requests, Pub/Sub, eventgedrevenEventgedreven (Pub/Sub, Cloud Storage, HTTP, etc.)
Cold startsMinimaal met voorverwarmde instancesKan merkbare vertragingen hebben bij schalen
Beste voorAPI’s, microservices, backendservices, AI-workloadsLichtgewicht, eventgedreven functies, automatisering

Wanneer gebruik je Cloud Run

  • ✅ Je hebt volledige controle nodig over runtime en dependencies.
  • ✅ Je draait een webservice, API of microservice die persistente requests afhandelt.
  • ✅ Je wilt een bestaande gecontaineriseerde applicatie met minimale aanpassingen deployen.
  • ✅ Je hebt achtergrondverwerking of langlopende taken nodig (zoals AI-inferencing, batchjobs).

Wanneer gebruik je Cloud Run Functions

  • ✅ Je wilt eenvoudige, eventgedreven functies die triggeren op events zoals Pub/Sub-berichten of Cloud Storage-uploads.
  • ✅ Je handelt kortdurende operaties af, zoals notificaties versturen, kleine jobs verwerken of data transformeren.
  • ✅ Je wilt geen containers beheren en geeft de voorkeur aan voorgebouwde runtimes voor JavaScript, Python, Go, etc.

Je hoeft overigens niet te kiezen: je kunt ze ook samen gebruiken! Je Cloud Run-backend kan bijvoorbeeld Cloud Run Functions triggeren voor specifieke taken, zoals e-mails versturen of afbeeldingen asynchroon verwerken.

Vergelijking met andere Google Cloud-services

We hebben Cloud Run en Cloud Run Functions uitgebreid vergeleken, maar er zijn nog twee Google Cloud-services die het vermelden waard zijn: GKE en App Engine.

FeatureCloud RunGoogle Kubernetes Engine (GKE)App Engine
BeheerVolledig beheerde serverlessZelfbeheerde Kubernetes-clustersVolledig beheerde platform-as-a-service
SchalenAutomatisch schalen, tot aan nulHandmatig schalen of autoscaling via KubernetesAutomatisch schalen (maar niet tot nul)
DeploymentContainers deployen (elke taal)Containers deployen via KubernetesCode deployen (specifieke runtimes ondersteund)
Use-casesAPI’s, microservices, webapps, batchjobs, AIComplexe apps, grootschalige microservices, ML-workloadsWebapps, mobiele backends, API’s
Ondersteunde talenAlle (containergebaseerd)Alle (containergebaseerd)Specifieke runtimes ondersteund

Er is natuurlijk meer nuance, maar kort samengevat: heb je een volledig beheerde, containergebaseerde oplossing met automatisch schalen en flexibiliteit nodig, kies dan voor Cloud Run. Bouw je een webapp met minimale configuratie, kies dan App Engine. En wil je volledige controle over je Kubernetes-clusters voor grootschalige, complexe applicaties, kies dan GKE.

Conclusie

Nu je alles weet over Cloud Run, kun je je eerste instance starten of andere Google Cloud-services verkennen om het juiste niveau van controle en automatisering voor jou te vinden!

Cloud Run FAQ’s

Hoe ga ik om met databaseconnecties in Cloud Run?

Je kunt de Cloud SQL Auth Proxy gebruiken, connection pooling inschakelen (bijv. PgBouncer voor PostgreSQL) of serverless databases zoals Firestore gebruiken om connectielimieten te vermijden.

Kan ik een eigen domein gebruiken met Cloud Run?

Ja. Stel het in de Cloud Run-console onder Beheer aangepaste domeinen, verifieer eigendom en werk de DNS-records bij. SSL wordt automatisch geleverd.

Ondersteunt Cloud Run WebSockets en langdurige connecties?

Ja, maar instances kunnen worden uitgeschakeld als ze idle zijn. Stel minimuminstances in of gebruik Pub/Sub voor eventgedreven communicatie om connecties te behouden.

Kan Cloud Run achtergrondjobs afhandelen?

Niet direct, omdat het request-based is. Gebruik Cloud Tasks, Pub/Sub of Workflows om achtergrondverwerking te triggeren en beheren.

Kan ik stateful applicaties draaien op Cloud Run?

Niet aan te raden, omdat instances stateless zijn. Gebruik Cloud Storage, Firestore of een externe database om state te bewaren.

Marie Fayard

Auteur

Marie Fayard

Ik ben een productgerichte tech lead die gespecialiseerd is in het laten groeien van startups in een vroeg stadium, van het eerste prototype tot product‑market fit en verder. Ik ben eindeloos nieuwsgierig naar hoe mensen technologie gebruiken, en ik werk graag nauw samen met oprichters en multidisciplinaire teams om gedurfde ideeën tot leven te brengen. Als ik geen producten bouw, zoek ik inspiratie in nieuwe uithoeken van de wereld of ontspan ik me in de yogastudio.

Onderwerpen

Gerelateerd