# Google Cloud Run guides · Exodus by elim.io

> Guides to Google Cloud Run in plain numbers: what it is, what it costs, what breaks, and how to move an app from Heroku, Railway, Render or Fly.

<https://exodus.elim.io/blog>

## Cloud Run, in plain numbers.

What it is, what it costs, what breaks on the way and how to move from Heroku, Railway, Render or Fly. Every figure names its source.

- [An AI agent backend on Cloud Run: the loop, the stream, the state, and the bill](https://exodus.elim.io/blog/an-ai-agent-backend-on-cloud-run.md): An AI agent's backend on Cloud Run: the model-and-tools loop as a streaming service, sessions in Firestore, keyless access, tools as MCP servers, and why tokens are most of the bill.
- [A SaaS architecture on Cloud Run: tenants, sign-in, data, domains, and the bill as it grows](https://exodus.elim.io/blog/a-saas-architecture-on-cloud-run.md): A SaaS product on Cloud Run: one service and one database, a tenant id on every row under Postgres row security, sign-in, customer domains, and the bill at 5, 50 and 500 customers.
- [Backups and point-in-time recovery on Cloud SQL: the defaults, getting a table back, and settings to check on day one](https://exodus.elim.io/blog/backups-and-point-in-time-recovery-on-cloud-sql.md): What a new Cloud SQL instance backs up by default, the four settings to change, how a restore and a point-in-time clone work, a copy that outlives the instance, and what it costs.
- [Cloud SQL, Firestore or a serverless Postgres: choosing the database for a Cloud Run app](https://exodus.elim.io/blog/cloud-sql-firestore-or-serverless-postgres.md): The database sets the floor of a Cloud Run bill: Cloud SQL from $9.37 a month, Firestore per document, or a serverless Postgres on another cloud. Costs, connections and code for each.
- [Connecting Cloud Run to Cloud SQL: the /cloudsql socket, connectors, private IP and the errors of the first deploy](https://exodus.elim.io/blog/connecting-cloud-run-to-cloud-sql.md): Three ways from Cloud Run to Cloud SQL: the /cloudsql socket, a connector library, or a private IP. The commands, the connection string, the cost, and the errors of the first deploy.
- [Connection pooling on Cloud Run: sizing the pool, Cloud SQL's 25 connections, PgBouncer or Managed Connection Pooling](https://exodus.elim.io/blog/connection-pooling-on-cloud-run.md): Each Cloud Run instance opens its own pool, and the smallest Cloud SQL machine takes 25 connections. How to size pools per framework, and when to use Managed Connection Pooling or PgBouncer.
- [Custom domains and HTTPS on Cloud Run: domain mapping, a load balancer or Firebase Hosting, DNS and the certificate](https://exodus.elim.io/blog/custom-domains-and-https-on-cloud-run.md): Your own domain on Cloud Run through domain mapping, a load balancer or Firebase Hosting: the cost, DNS records, certificate wait and limits of each, and the traps in DNS caches, CAA and proxies.
- [Database migrations on Cloud Run: run them as a job, before the deploy](https://exodus.elim.io/blog/database-migrations-as-cloud-run-jobs.md): Cloud Run has no release phase. How to run migrations as a Cloud Run job with the new image before the deploy, write migrations the old revision survives, and pay about a tenth of a cent a run.
- [Deploying to Cloud Run from GitHub without keys: Workload Identity Federation step by step](https://exodus.elim.io/blog/deploying-from-github-without-keys.md): GitHub Actions can deploy to Cloud Run with a per-run token instead of a JSON key. The pool, provider, deployer account, roles and workflow of Workload Identity Federation, and the errors you meet.
- [Do you still need Redis on Cloud Run? Each job it does, what replaces it, and what it costs if it stays](https://exodus.elim.io/blog/do-you-still-need-redis-on-cloud-run.md): A PaaS Redis collects sessions, cache, queue, rate limits and locks; on Cloud Run it is Memorystore billed every hour. How to move each job to Postgres or Cloud Tasks, and when Redis stays.
- [GPUs on Cloud Run: running your own model, what it costs, and where the start goes](https://exodus.elim.io/blog/gpus-on-cloud-run.md): Cloud Run attaches an NVIDIA L4 or RTX PRO 6000 to an instance and scales it to zero. What a deploy needs, a sample model image we built and timed, where the cold start goes, and the cost.
- [Health checks on Cloud Run: startup, liveness and readiness probes, and what the default one misses](https://exodus.elim.io/blog/health-checks-and-startup-probes.md): Every Cloud Run service gets one TCP check you never set. What it misses, how startup, liveness and readiness probes work, the endpoint behind them, reading results in logs, and the cost.
- [IAM for a Cloud Run app: who may call it, what it may touch, who may deploy it](https://exodus.elim.io/blog/iam-for-a-cloud-run-app.md): IAM decides who may call a Cloud Run service, what its code may touch and who may deploy it. The roles, public or private, service-to-service calls, an account per service, and deploy rights.
- [Logs, metrics and alerts for a Cloud Run app: what you get for free and the three alerts to set up](https://exodus.elim.io/blog/logs-metrics-and-alerts-for-a-cloud-run-app.md): Cloud Run sends requests, logs and metrics to Google Cloud with no setup. The log format Google reads, where to look, three alerting policies as files, and what each part costs.
- [Long requests on Cloud Run: every timeout in the chain, and where long work goes](https://exodus.elim.io/blog/long-requests-and-timeouts.md): A Cloud Run request ends at 5 minutes, 60 at most, and other clocks sit on the way. Which one ends a request, how to find slow ones, and when to raise, stream, or hand the work to a task or job.
- [Minimum instances and startup CPU boost: what a cold start costs, and what it costs to skip it](https://exodus.elim.io/blog/min-instances-and-startup-cpu-boost.md): Startup CPU boost makes every start faster for a fraction of a cent; a minimum instance skips the wait for about $8 to $10 a month. How each works, how to measure first, the costs and the traps.
- [Moving a Postgres database to Cloud SQL without losing data: rehearse, compare, freeze, copy](https://exodus.elim.io/blog/moving-a-postgres-database-without-losing-data.md): A dump and restore moves a small Postgres in minutes and loses rows written meanwhile unless writes stop. The order that keeps a way back, Cloud SQL's flags, proving both sides match.
- [Node, Python, Rails and Go on Cloud Run: the container and the traps of each stack](https://exodus.elim.io/blog/node-python-rails-and-go-on-cloud-run.md): The container each of Node, Python, Rails and Go needs on Cloud Run, and the traps we reproduced: dropped requests on shutdown, one-at-a-time gunicorn, port 80, and Go's CPU count.
- [Revisions, traffic splitting and rollbacks on Cloud Run: release to 5% first, go back with one command](https://exodus.elim.io/blog/revisions-traffic-splitting-and-rollbacks.md): Every Cloud Run deploy makes a revision that never changes. Rollbacks without a rebuild, a release to 5% first, tagged test URLs, the trap that leaves a deploy at 0%, and what a rollback misses.
- [Rust on Cloud Run: the container, the build, the first second, and the bill](https://exodus.elim.io/blog/rust-on-cloud-run.md): How we run Rust on Cloud Run: $PORT and SIGTERM, a two-stage Dockerfile for an 11 MB image, where to compile, why 256 MiB means the first generation, start times, and three setups' bills.
- [Secrets on Cloud Run: Secret Manager as variables or files, who can read them, and rotating a key without an outage](https://exodus.elim.io/blog/secrets-on-cloud-run.md): Secret Manager hands secrets to Cloud Run as variables, files or through a client. How each behaves on change, who needs which role, why build arguments leak, rotating a key in five steps.
- [Stripe webhooks on Cloud Run: verify, record, queue, answer, and never charge twice](https://exodus.elim.io/blog/stripe-webhooks-on-cloud-run.md): Stripe webhooks on Cloud Run: verify the signature, record the event id, queue a named Cloud Task, answer 200; a private worker does each event once. The traps, catching up after an outage, the cost.
- [The cutover day checklist: moving traffic to Cloud Run with the old app as the way back](https://exodus.elim.io/blog/the-cutover-day-checklist.md): The day traffic moves to Cloud Run, step by step from a week before to a week after: the DNS TTL, freeze, copy, compare and switch, checks from outside, the way back, and the overlap's cost.
- [Moving from a VPS to Cloud Run](https://exodus.elim.io/blog/a-vps-to-cloud-run.md): A VPS runs nginx, the app, Postgres, cron and uploads on one machine. What each piece becomes on Cloud Run, the commands, what breaks, and why the bill usually goes up while the work goes down.
- [Moving from AWS Lambda or App Runner to Cloud Run](https://exodus.elim.io/blog/aws-lambda-to-cloud-run.md): Lambda bills each request; Cloud Run bills an instance that takes many at once, and App Runner closed to new customers in April 2026. What each piece becomes, with commands and both bills.
- [Background workers on Cloud Run: Cloud Tasks or a worker pool](https://exodus.elim.io/blog/background-workers-with-cloud-tasks.md): A worker waiting on a Redis queue stalls or bills all day on Cloud Run. How to turn each job into a Cloud Tasks request, with retries, rate limits, costs, and when a worker pool fits better.
- [Budget alerts and the billing export](https://exodus.elim.io/blog/budget-alerts-and-the-billing-export.md): Google Cloud has no spending limit unless you set one. How budgets and alerts work, what a Pub/Sub budget message can do, spend caps, and the BigQuery billing export read with three queries.
- [Buildpacks or a Dockerfile: how to get your code into a Cloud Run container](https://exodus.elim.io/blog/buildpacks-or-a-dockerfile.md): One command builds your Cloud Run container with Google's buildpacks or your own Dockerfile. What each does, what it costs, who patches the OS, what breaks, and the commands for both.
- [Choosing a Cloud Run region: latency, price tiers and what each region has](https://exodus.elim.io/blog/choosing-a-cloud-run-region.md): A Cloud Run service lives in the region of its first deploy. What that decides (latency, a 20 to 40% price gap, nearby products, where data stays), how to measure it, and how to move later.
- [How fast Cloud Run wakes up: cold starts, measured](https://exodus.elim.io/blog/cloud-run-cold-start-measured.md): An idle Cloud Run app stops, and the next visitor waits for a start. What a study across eight platforms measured, what 703 of our own starts took, and how to measure and shorten yours.
- [What Cloud Run costs at 100 thousand, 1 million, 10 million and 100 million requests a month](https://exodus.elim.io/blog/cloud-run-costs-worked-examples-by-traffic.md): One web app priced line by line at 100 thousand to 100 million requests a month: Cloud Run, database, egress, logs, images, every assumption written down, and how to check the prices yourself.
- [Cloud Run or a VPS: which one costs less](https://exodus.elim.io/blog/cloud-run-or-a-vps.md): A VPS bills the month; Cloud Run bills the seconds your code runs. Worked prices for a small app, a busy one and a steady one, and what each price leaves out: database, egress, disk, your time.
- [Cloud Run services, jobs and worker pools: which shape your code takes](https://exodus.elim.io/blog/cloud-run-services-jobs-and-worker-pools.md): Cloud Run runs a container as a service, a job, a worker pool or a Preview singleton. What each is, how it bills, the commands, and which one each part of a PaaS app becomes.
- [The smallest Cloud SQL instances and what they cost](https://exodus.elim.io/blog/cloud-sql-smallest-instances-and-what-they-cost.md): Cloud SQL's cheapest machines, from $7.67 to $184.69 a month, priced with storage, backups, HA and the charges people miss. Which to choose, how to create it, how to read its cost.
- [Moving from a Compute Engine VM to Cloud Run](https://exodus.elim.io/blog/compute-engine-vm-to-cloud-run.md): An app on Compute Engine is already on Google Cloud; only the machines go. What changes for the image, account, network and disks, a weighted switch behind one load balancer, and when a VM is cheaper.
- [Concurrency on Cloud Run: how many requests one instance takes](https://exodus.elim.io/blog/concurrency-on-cloud-run.md): One setting decides how many requests share a Cloud Run instance. What it limits, how the autoscaler reads it, why your web server decides the real number, and its effect on the bill and database.
- [Cron and timers on Cloud Run: Cloud Scheduler and jobs](https://exodus.elim.io/blog/cron-and-timers-with-cloud-scheduler.md): In-process timers do not fire on an idle Cloud Run app and fire twice on two instances. How to move each to Cloud Scheduler: endpoint or job, service account, run-once handlers, time zones, cost.
- [Moving an app from DigitalOcean App Platform to Cloud Run](https://exodus.elim.io/blog/digitalocean-app-platform-to-cloud-run.md): App Platform bills each container all month with a traffic allowance; Cloud Run bills while requests run. What each part of the app spec becomes, the commands, and the bill on both sides.
- [Moving a Docker Compose app to Cloud Run](https://exodus.elim.io/blog/docker-compose-to-cloud-run.md): gcloud run compose up puts a whole compose.yaml in one Cloud Run instance, fine for a demo and wrong for production. How to split it into a service, a worker pool, Cloud SQL and Cloud Storage.
- [Moving from ECS on Fargate to Cloud Run](https://exodus.elim.io/blog/ecs-fargate-to-cloud-run.md): Fargate bills tasks every second behind an hourly load balancer; Cloud Run runs the same image and scales to zero. What each part of a task definition becomes, the commands, and both bills.
- [Egress on Google Cloud, explained](https://exodus.elim.io/blog/egress-on-google-cloud-explained.md): Google Cloud egress: free in, free inside a region, $0.02 to $0.08 per GiB between regions, about $0.105 to users in Europe and North America. When a load balancer or CDN lowers the bill.
- [Files and uploads on Cloud Run: from disk to a Cloud Storage bucket](https://exodus.elim.io/blog/files-and-uploads-with-cloud-storage.md): A Cloud Run instance's disk is memory and dies with the instance. How to move uploads to Cloud Storage with signed URLs, serve downloads, move existing files, and what it costs.
- [Moving an app from Fly.io to Cloud Run](https://exodus.elim.io/blog/fly-to-cloud-run.md): Fly.io runs your Dockerfile on VMs you size and count; Cloud Run runs the same image and counts for you. What each part of fly.toml becomes, secrets, volumes, Postgres, the domain, and both bills.
- [Moving a small web app from AWS to Cloud Run](https://exodus.elim.io/blog/from-aws-to-cloud-run.md): App Runner takes no new customers, Lambda needs an adapter and Fargate bills all month. What each AWS piece becomes on Google Cloud, a small app's cost on each side, and the move in six steps.
- [Moving a Netlify site to Firebase Hosting and Cloud Run](https://exodus.elim.io/blog/netlify-to-cloud-run.md): A Netlify site moves to Firebase Hosting for files and one Cloud Run service for code. An adapter for unchanged functions, _redirects as firebase.json, schedules, secrets, the domain, both bills.
- [Planning a new product for Cloud Run before you write it](https://exodus.elim.io/blog/planning-a-new-product-for-cloud-run.md): The decisions to make before writing a product for Cloud Run: where state lives, the database, background work, payments, live updates, the region, and the bill at launch, in a year and busy.
- [Reading your first Google Cloud bill](https://exodus.elim.io/blog/reading-your-first-google-cloud-bill.md): A first Google Cloud bill is a statement that arrives after the charge, with many $0.00 lines. How it is built, when you are charged, how to check a line yourself, and what credits are.
- [Request-based or instance-based billing on Cloud Run: which one to pick](https://exodus.elim.io/blog/request-based-or-instance-based-billing.md): A Cloud Run service bills only while it handles requests, or for every second an instance lives. What each charges for, what the CPU does between requests, where costs cross, and how to switch.
- [Sessions on Cloud Run without Redis: signed cookies and the database you have](https://exodus.elim.io/blog/sessions-without-redis.md): In-memory sessions log people out on Cloud Run. How to use signed cookies with keys in Secret Manager, log out everywhere with one column, when a database table fits, and when Redis is worth it.
- [Setting up a Google Cloud project for a small team](https://exodus.elim.io/blog/setting-up-a-google-cloud-project-for-a-small-team.md): The first hour on Google Cloud in order: organization, billing account, a project per environment, budget and cap, APIs, group roles, keyless service accounts, contacts. Costs and traps.
- [The Cloud Run free tier, explained: what is free, how far it goes, what ends it](https://exodus.elim.io/blog/the-cloud-run-free-tier-explained.md): Cloud Run gives each billing account $4.32 of CPU, $0.90 of memory and 2 million requests a month. What that buys, who shares it, what quietly uses it up, and how to read what is left.
- [Moving a Next.js app from Vercel to Cloud Run](https://exodus.elim.io/blog/vercel-to-cloud-run.md): Vercel builds, caches, schedules and previews a Next.js app; on Cloud Run each is a piece you set up once. When the move pays, the container, secrets, cron, previews, the domain, and both bills.
- [WebSockets and server-sent events on Cloud Run: timeouts, reconnects, fan-out and the bill](https://exodus.elim.io/blog/websockets-and-sse-on-cloud-run.md): On Cloud Run every open WebSocket or SSE connection is a request: it ends at the timeout, keeps its instance billed, and sees one instance. Timeouts, reconnects, fan-out through Postgres, the cost.
- [Work after the response on Cloud Run: why it stalls and the four ways out](https://exodus.elim.io/blog/work-after-the-response.md): Code that runs after the response gets almost no CPU on a request-billed Cloud Run service. How to find it, and when to finish it in the request, use Cloud Tasks or Pub/Sub, or pay per instance.
- [What Cloud Run is, for someone who has never used it](https://exodus.elim.io/blog/what-cloud-run-is.md): Cloud Run runs your container and bills for the seconds it works. What it runs, its three shapes, how it bills, what changes in your code, cold starts, what it does not do, a first deploy.
- [Moving from Heroku to Cloud Run](https://exodus.elim.io/blog/heroku-to-cloud-run.md): What each part of a Heroku app becomes on Google Cloud, the order of the move, the commands for each part, what it costs on both sides, what breaks, and the same map for Railway, Render and Fly.
- [Moving from Railway or Render to Cloud Run](https://exodus.elim.io/blog/railway-or-render-to-cloud-run.md): Railway and Render projects map to Google Cloud piece by piece. What each part becomes, the commands, the cost on each side, the order of the move, and when staying is the better answer.
- [The patterns that break on Cloud Run, and their replacements](https://exodus.elim.io/blog/patterns-that-break-on-cloud-run.md): Queue workers, work after the response, timers, files on disk, in-memory sessions and open connections: why each breaks on Cloud Run, how to find it, what replaces it and what that costs.
- [What Cloud Run costs, with worked examples](https://exodus.elim.io/blog/what-cloud-run-costs.md): Google's list prices for Cloud Run and the services around it, the free tier, a small app priced line by line, the case where Cloud Run costs more, and how to check every price yourself.
