Google Cloud Run was a meaningful step forward for serverless container deployment. Push a container image, get a URL, pay only when requests arrive — the pitch was compelling. For teams already inside GCP, it still is. But Cloud Run does not exist in isolation. It depends on Artifact Registry for image storage, Cloud SQL for databases, IAM for access control, and Cloud Monitoring for observability. Each of those is a separate product with its own pricing, configuration surface, and failure modes.
If you want serverless container deployment with auto-scaling and scale-to-zero but without the GCP ecosystem attached, this guide examines what drives developers to look for a Google Cloud Run alternative and how Out Plane compares across deployment experience, pricing, and operational overhead.
Why Developers Look for Cloud Run Alternatives
Cloud Run is a technically capable product. The reasons developers look elsewhere are rarely about what it can't do — they're about what deploying on it actually requires in practice.
GCP Ecosystem Complexity
Cloud Run does not stand alone. A production deployment typically involves:
- Artifact Registry for storing container images (previously Container Registry, which was deprecated)
- Cloud SQL for managed databases, with its own connection management through Cloud SQL Auth Proxy or Private IP
- IAM service accounts with specific roles to allow Cloud Run to access Cloud SQL, Secret Manager, and other services
- VPC connectors if you need private networking between Cloud Run and Cloud SQL
- Secret Manager for environment variables that shouldn't be hardcoded
Each of these services has its own documentation, its own pricing, and its own failure modes. A developer deploying a web application with a database on Cloud Run is not deploying an application — they're assembling an infrastructure stack from five different GCP services. This is reasonable for a team with a dedicated platform engineer. For a small team or solo developer, it represents hours of configuration before the first request is served.
Billing Opacity
Cloud Run's pricing model combines multiple independent dimensions:
- vCPU-seconds allocated while the container is processing requests
- Memory GiB-seconds allocated during the same window
- $0.40 per million requests
- Network egress charges
- Artifact Registry storage and push/pull operations
- Cloud SQL instance costs, which are billed per hour regardless of database activity
The free tier is generous — 2 million requests per month, 360,000 vCPU-seconds, and 180,000 GiB-seconds — but understanding where your application sits relative to those limits requires ongoing monitoring. The practical challenge is that these dimensions interact in ways that are difficult to reason about before you deploy. A container that processes requests quickly but allocates a large amount of memory will cost differently from a CPU-intensive container with a small memory footprint, and neither calculation is intuitive.
No Built-In Database
Cloud SQL is the standard managed database offering for GCP, but it is a separate product with separate pricing. A minimal Cloud SQL PostgreSQL instance starts at roughly $7 to $10 per month for a shared-core instance and scales quickly from there. Connecting it to Cloud Run requires either the Cloud SQL Auth Proxy sidecar, direct IP allowlisting, or a private VPC with a Serverless VPC Access connector — each of which introduces additional configuration requirements and, in the case of the VPC connector, additional cost.
gcloud CLI and Artifact Registry Workflow
Cloud Run's deployment workflow assumes you have the gcloud CLI installed, authenticated, and configured for the correct project. Building and pushing container images requires:
gcloud auth configure-docker
docker build -t gcr.io/your-project/your-image .
docker push gcr.io/your-project/your-image
gcloud run deploy your-service --image gcr.io/your-project/your-imageFor teams that want a git-push deployment workflow — connect a repository, push code, get a deployment — Cloud Run's container registry model is an additional layer of work. GitHub Actions or Cloud Build can automate this, but that automation is another system to configure and maintain.
Cold Start Behavior
Cloud Run scales to zero by default. When a new request arrives after a period of inactivity, the container must start before it can respond. Startup times vary by language and container size, but Go applications typically start in under 500ms while Java or Python applications with heavy dependency trees can take several seconds. For user-facing applications, this latency is visible.
Cloud Run offers minimum instance settings to prevent cold starts, but keeping a minimum of one instance running means the container is billed for that reservation, which changes the economic model. At that point, you're paying a baseline compute cost similar to any always-on service, without the savings that scale-to-zero was supposed to provide.
Quick Comparison: Cloud Run vs. Out Plane
| Feature | Google Cloud Run | Out Plane |
|---|---|---|
| Deployment | gcloud CLI / Console + Artifact Registry | GitHub connect and deploy |
| Container Support | Docker (push to registry required) | Docker + Buildpacks (from GitHub directly) |
| Scale to Zero | Yes | Yes (min instances = 0) |
| Billing | vCPU-sec + memory-sec + request count | Per-second compute |
| Database | Cloud SQL (separate service, separate cost) | Managed PostgreSQL (built-in) |
| SSL/HTTPS | Automatic | Automatic |
| Custom Domains | Yes (requires domain mapping configuration) | Yes |
| Monitoring | Cloud Monitoring (separate GCP service) | Built-in logs and metrics |
| Free Tier | 2M requests/month | 3 free instances + $20 credit |
| Vendor Lock-in | GCP ecosystem | None |
| Setup Time | 30 to 60 minutes | Under 5 minutes |
| Database Networking | VPC connector or Cloud SQL Proxy | Direct connection string |
Pricing Comparison
Cloud Run Pricing
Cloud Run's pricing has two layers: the compute charges for Cloud Run itself, and the surrounding service costs.
Cloud Run compute:
- $0.00002400 per vCPU-second
- $0.00000250 per GiB-second of memory
- $0.40 per million requests (first 2 million free)
Free tier per month:
- 2 million requests
- 360,000 vCPU-seconds
- 180,000 GiB-seconds
These numbers look small individually, but a service handling 10 million requests per month at modest compute consumption can reach $50 to $100 in Cloud Run charges alone, before adding Cloud SQL, Artifact Registry storage, and network egress.
Cloud SQL costs (required for most applications):
- Shared-core PostgreSQL: from $7 to $10 per month
- Standard single-core instance: from $25 to $50 per month
- High-availability configuration doubles the instance cost
For a realistic production deployment — Cloud Run service, one Cloud SQL PostgreSQL instance, and light egress — expect a monthly bill between $30 and $80 before your application reaches any significant scale.
Out Plane Pricing
Out Plane uses per-second billing for compute across all instance types, from the op-20 (0.5 vCPU, 512MB RAM) to the op-94 (32 vCPU, 64GB RAM). Managed PostgreSQL is provisioned directly in the same console and billed at the same per-second rate.
New accounts receive $20 in free credit with no credit card required, and the Hobby plan includes 3 free instances for development and testing. For current rates, see the pricing page.
The key structural difference: on Out Plane, the web service, database, and all monitoring are in one billing relationship with one pricing model. On Cloud Run, each component has a separate pricing structure that requires individual monitoring to understand what you're spending.
Key Differences
Deployment Experience
The contrast in deployment workflow is significant for teams without dedicated DevOps engineers.
Cloud Run deployment path:
- Install and authenticate the
gcloudCLI - Configure a GCP project and enable the Cloud Run and Artifact Registry APIs
- Build your container image locally or in Cloud Build
- Push the image to Artifact Registry
- Deploy the service with
gcloud run deploy, specifying image, region, concurrency settings, and resource limits - Configure IAM permissions if the service needs to access other GCP resources
- Set up a VPC connector and Cloud SQL connection if using a database
Out Plane deployment path:
- Sign in to console.outplane.com with GitHub
- Select your repository and branch
- Choose Dockerfile or Buildpack as the build method
- Set environment variables
- Click Deploy
Out Plane pulls the repository, builds the image, and deploys it. Subsequent pushes to your configured branch trigger automatic redeployments. There is no container registry to manage, no CLI to install, and no IAM configuration required to connect your service to its database.
Database Integration
For applications that need a database, the integration story is where the two platforms diverge most noticeably.
On Cloud Run, connecting to Cloud SQL requires choosing between three approaches:
- Cloud SQL Auth Proxy: A sidecar container or local proxy that handles encrypted connections. Requires setting up a service account, granting the
cloudsql.clientrole, and configuring the proxy as a Cloud Run service dependency. - Private IP: Requires a VPC network, a Serverless VPC Access connector (billed separately), and peering configuration.
- Public IP with SSL: Requires certificate management and IP allowlisting.
None of these options are inherently wrong — they're well-documented and widely used. But each adds setup time and ongoing maintenance overhead.
On Out Plane, you provision a PostgreSQL database (versions 14 through 18) directly in the console, and the platform provides a connection string you set as an environment variable. There is no proxy, no VPC configuration, and no certificate management. The database and the application exist in the same network by default.
Scaling Behavior
Both platforms support scale-to-zero and auto-scaling, but the models differ.
Cloud Run uses a request-concurrency model. You set the maximum number of concurrent requests per instance, and Cloud Run scales the number of instances to meet demand. When requests reach zero, instances are deallocated. Cold starts are part of the scale-to-zero trade-off unless you configure minimum instances.
Out Plane uses an instance-count model. You set minimum and maximum instance counts, and the platform adjusts within those bounds based on traffic. Set minimum to 0 for scale-to-zero behavior. Set minimum to 1 for an always-warm instance. The configuration is straightforward and predictable.
For applications that need consistently low latency, setting a minimum instance count of 1 on either platform prevents cold starts. For batch processors, background workers, or services that can tolerate occasional startup latency, scale-to-zero reduces cost on both platforms. Out Plane's per-second billing means a warming instance costs a few cents, not a few dollars.
Monitoring and Observability
Cloud Run integrates with Cloud Monitoring and Cloud Logging, which are GCP services with their own pricing. Basic log retention through Cloud Logging is included, but longer retention, log-based metrics, and custom dashboards incur additional charges. Cloud Monitoring provides metrics for Cloud Run services, but correlating those metrics with application logs or database performance requires navigating between multiple GCP console interfaces.
Out Plane includes runtime logs, HTTP request logs, and CPU, memory, and network metrics in the same dashboard as your deployment configuration. There are no additional services to configure, no log sink setup, and no additional charges for the monitoring that most applications need. For teams that want more than basic observability, Out Plane supports standard log export to external systems.
When Cloud Run Still Makes Sense
Cloud Run is a well-engineered product, and there are valid reasons to use it.
Deep GCP investment. If your organization runs BigQuery, Pub/Sub, Cloud Functions, Vertex AI, or Spanner, Cloud Run's native integration with those services delivers real value. Event-driven architectures built on Eventarc, streaming pipelines that feed into BigQuery, or ML workloads that call Vertex AI endpoints benefit from being on the same network as those services. The integration cost is already paid.
Existing GCP expertise. Teams with engineers who know GCP well — who understand IAM, understand VPC networking, and are comfortable with the gcloud CLI — don't experience the setup friction that makes Cloud Run difficult for newcomers. For those teams, Cloud Run's performance characteristics and GCP-native integrations outweigh the operational overhead.
Global GCP infrastructure. Cloud Run is available in over 40 regions worldwide. If your application has strict data residency requirements for regions not covered by other providers, or if you need co-location with GCP services in a specific geography, Cloud Run's region coverage is an advantage.
Event-driven and asynchronous workloads. Cloud Run's Eventarc integration allows services to trigger on Pub/Sub messages, Cloud Storage events, and other GCP event sources. For event-driven architectures already using these services, Cloud Run is a natural fit.
When Out Plane Is a Better Fit
No GCP dependency. If your application doesn't need GCP-specific services — no BigQuery, no Pub/Sub, no Vertex AI — then Cloud Run's main benefit is container deployment, which Out Plane provides without the surrounding ecosystem requirement. Choosing Cloud Run without a GCP dependency means accepting ecosystem lock-in without a corresponding benefit.
Container deployment from GitHub. If your workflow is push code to GitHub and get a deployment, Out Plane supports that workflow natively with both Dockerfile and Buildpack builds. You do not need to set up a container registry, configure build pipelines, or manage image versions separately from your code.
Managed database in the same platform. For applications that need a relational database, Out Plane's managed PostgreSQL removes the Cloud SQL setup, VPC configuration, and separate billing relationship. The database is in the same console as the application.
Small teams without GCP expertise. The Cloud Run setup process is well-documented but assumes familiarity with GCP concepts. Out Plane's deployment flow does not require any prior platform knowledge beyond GitHub access. A developer deploying their first application on Out Plane can be running in production in under five minutes.
Simpler billing model. Per-second compute billing with managed databases on the same invoice is easier to budget, audit, and explain than a multi-dimensional billing model across five GCP services. For teams where the finance team or a non-technical founder needs to understand infrastructure costs, simplicity has real operational value.
How to Migrate from Cloud Run
Migration from Cloud Run to Out Plane follows a predictable path for most web applications.
Step 1: Prepare Your Dockerfile
If you already have a Dockerfile in your repository, no changes are required. Out Plane builds directly from the Dockerfile in your repo.
If you were building your image in Cloud Build with a cloudbuild.yaml configuration, extract the build steps into a Dockerfile that produces the same final image. Most Cloud Run workloads are already built from standard Dockerfiles — the Cloud Build pipeline just automates the build and push steps that Out Plane handles automatically.
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
EXPOSE 8080
CMD ["node", "server.js"]If you don't have a Dockerfile, Out Plane also supports Paketo Buildpacks, which auto-detect your language and framework. For Node.js, Python, Go, Ruby, Java, and PHP applications, no Dockerfile is required.
Step 2: Export Environment Variables and Secrets
In Cloud Run, environment variables and secrets managed through Secret Manager need to be collected and moved to Out Plane's environment variable editor.
From the GCP Console, navigate to your Cloud Run service, open the Variables and Secrets tab, and copy all variable names and values. Secret Manager references (secretKeyRef) should be resolved to their actual values when setting them in Out Plane.
Step 3: Migrate Your Database
If you're running Cloud SQL PostgreSQL, export your data using pg_dump:
pg_dump \
--host=your-cloud-sql-ip \
--username=postgres \
--format=custom \
--file=database-export.dump \
your-database-nameAfter provisioning a managed PostgreSQL database on Out Plane (versions 14 through 18 available), restore the dump:
pg_restore \
--no-acl \
--no-owner \
--dbname=your-outplane-connection-string \
database-export.dumpUpdate your application's DATABASE_URL environment variable to the Out Plane connection string before deploying.
Step 4: Deploy on Out Plane
- Navigate to console.outplane.com and sign in with GitHub
- Select your repository and branch
- Choose Dockerfile or Buildpack
- Set your environment variables, including the new
DATABASE_URL - Configure minimum and maximum instance counts (set min to 0 for scale-to-zero)
- Click Deploy
Out Plane pulls your repository, builds the container, and deploys it. The first deployment takes a few minutes. Subsequent pushes to your configured branch deploy automatically.
Step 5: Update DNS and Custom Domains
Add your custom domain in the Out Plane console. Update the CNAME record in your DNS provider to point to your Out Plane application URL. SSL certificates are provisioned automatically once DNS propagates.
Once you've verified the application is handling traffic correctly on Out Plane, you can delete the Cloud Run service and Cloud SQL instance from GCP. Artifact Registry images can be deleted through the GCP Console.
For a detailed walkthrough of container deployment, see the deploy Docker application guide.
Summary
Cloud Run is a capable container deployment platform, and for teams already committed to GCP it remains a sound choice. The constraints are not technical — they're operational. The GCP ecosystem dependency, the multi-dimensional billing model, the Cloud SQL connection complexity, and the Artifact Registry workflow add up to meaningful overhead for teams that just want to deploy a container and connect it to a database.
Out Plane addresses the core use case directly: connect a GitHub repository, deploy a Dockerfile or buildpack-detected application, provision a managed PostgreSQL database in the same console, and get per-second billing across all of it. Auto-scaling and scale-to-zero work the same way as Cloud Run without the ecosystem requirements.
If you're looking for a cloud run alternative that removes the GCP dependency without removing the capabilities, the migration path is straightforward and the operational simplicity compounds over time as your application grows.
Ready to deploy? Get started with Out Plane and receive $20 in free credit. No credit card required.