Move from Cloud Run, GKE, or App Engine to RaidFrame.
Google Cloud Platform offers Cloud Run, GKE, App Engine, and Compute Engine — each with different tradeoffs, pricing models, and configuration complexity. RaidFrame replaces all of them with a single deploy command.
| GCP Service | RaidFrame Equivalent |
|---|---|
| Cloud Run | rf deploy (web service) |
| GKE | rf deploy (containers, auto-scaled) |
| App Engine | rf deploy (auto-detected stack) |
| Compute Engine | Not needed (containers handle it) |
| Cloud SQL (PostgreSQL) | rf add postgres |
| Memorystore (Redis) | rf add redis |
| Cloud Storage | rf add storage |
| Pub/Sub | rf add queue (pub/sub mode) |
| Cloud Tasks | rf add queue + workers |
| Cloud Scheduler | rf cron add |
| Cloud Logging | Built-in (rf logs) |
| Cloud Monitoring | Built-in (rf metrics) |
| Cloud Load Balancing | Built-in |
| Cloud CDN | Built-in CDN |
| Artifact Registry | Built-in (push and deploy) |
| Cloud Build | Built-in CI/CD |
| Secret Manager | rf secrets set |
| Firebase Hosting | Static service (type: static) |
Cloud Run is the closest GCP equivalent to RaidFrame. Migration is straightforward.
Your Cloud Run service YAML:
# GCP Cloud Run service.yaml
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: api
spec:
template:
metadata:
annotations:
autoscaling.knative.dev/minScale: "1"
autoscaling.knative.dev/maxScale: "10"
spec:
containerConcurrency: 80
containers:
- image: gcr.io/my-project/api:latest
ports:
- containerPort: 8080
resources:
limits:
cpu: "2"
memory: 1Gi
env:
- name: DATABASE_URL
value: postgresql://...
Becomes:
# raidframe.yaml
services:
api:
type: web
build:
dockerfile: Dockerfile
port: 8080
resources:
cpu: 2
memory: 1GB
scaling:
min: 1
max: 10
# Export from Cloud SQL
gcloud sql export sql my-instance gs://my-bucket/backup.sql --database=mydb
gsutil cp gs://my-bucket/backup.sql ./backup.sql
# Import to RaidFrame
rf add postgres --plan pro
rf db import main backup.sql
# Export from Cloud Run
gcloud run services describe api --format='yaml' | \
grep -A1 'name:' | grep -E '(name|value):' | \
paste - - | awk '{print $2"="$4}' > .env
# Import
rf env push
rf add storage
gsutil -m rsync -r gs://my-gcs-bucket/ ./local/
rf storage sync ./local/ s3://my-app-uploads/
If you're running Kubernetes on GKE, you already have Dockerfiles. The migration is about simplifying:
# Your k8s deployment → raidframe.yaml
rf init --from kubernetes ./k8s/
Reading Kubernetes manifests...
Found:
Deployment: api (2 replicas, 1 CPU, 2GB) → web service
Deployment: worker (1 replica) → worker service
CronJob: cleanup (0 3 * * *) → cron service
Service: api (port 8080) → load balancer (auto)
Ingress: api.myapp.com → rf domains add api.myapp.com
Secret: db-credentials → rf secrets set
ConfigMap: app-config → rf env set
PVC: uploads → rf add storage
Generated: raidframe.yaml
What you stop managing:
# app.yaml → raidframe.yaml
rf init --from appengine
| app.yaml | raidframe.yaml |
|---|---|
runtime: python39 | Auto-detected from Dockerfile |
instance_class: F2 | resources: { cpu: 1, memory: 1GB } |
automatic_scaling | scaling: { min: 1, max: 10 } |
env_variables | rf env set |
handlers | Not needed (your framework handles routing) |
Typical small SaaS on GCP vs RaidFrame:
| Component | GCP Monthly | RaidFrame |
|---|---|---|
| Cloud Run (2 instances avg) | $45 | |
| Cloud SQL db-f1-micro | $8 | |
| Cloud SQL db-custom (prod) | $50 | |
| Memorystore (1GB) | $35 | |
| Cloud Storage (50GB) | $1 | |
| Cloud Load Balancing | $20 | |
| Cloud Logging (50GB) | $25 | |
| Cloud Build (120 min) | $1 | |
| Artifact Registry | $1 | |
| Total | $186/mo | $57/mo |
The hidden GCP cost: the $4,676 Cloud Run bill from bot traffic that went viral on Hacker News. On RaidFrame, your bill stays flat regardless of bot traffic.
rf deploy
rf domains add myapp.com
Update DNS. Done.