Move from Azure App Service, AKS, or Container Apps to RaidFrame.
Azure offers App Service, Container Apps, AKS, and Azure Functions. Each has its own pricing model, deployment pipeline, and configuration surface. RaidFrame replaces all of them with Docker containers, one config file, and rf deploy.
| Azure Service | RaidFrame Equivalent |
|---|---|
| App Service | rf deploy (web service) |
| Container Apps | rf deploy (auto-scaled containers) |
| AKS | rf deploy (no k8s management) |
| Azure Functions | Cron or worker services |
| Azure Database for PostgreSQL | rf add postgres |
| Azure Cache for Redis | rf add redis |
| Blob Storage | rf add storage |
| Service Bus | rf add queue |
| Application Insights | Built-in (rf metrics, rf traces) |
| Azure Front Door / CDN | Built-in CDN |
| Azure DevOps Pipelines | Built-in CI/CD |
| Key Vault | rf secrets set |
| Azure Monitor | Built-in (rf logs, rf alerts) |
| Azure Container Registry | Built-in (push and deploy) |
| Cognitive Search | rf add search |
| SendGrid (Azure) | rf add email |
# Get App Service settings
az webapp config show --name my-app --resource-group my-rg --output json > app-config.json
az webapp config appsettings list --name my-app --resource-group my-rg --output json > app-settings.json
# raidframe.yaml
services:
web:
type: web
build:
dockerfile: Dockerfile
port: 8080
resources:
cpu: 2
memory: 4GB
scaling:
min: 2
max: 10
health_check:
path: /health
# Convert Azure app settings to .env format
cat app-settings.json | jq -r '.[] | "\(.name)=\(.value)"' > .env
# Push to RaidFrame
rf env push
# Export from Azure Database for PostgreSQL
pg_dump -h my-server.postgres.database.azure.com -U adminuser -d mydb > backup.sql
# Import
rf add postgres --plan pro
rf db import main backup.sql
Azure Container Apps is architecturally similar to RaidFrame. Your Dockerfiles work as-is.
# Azure Container Apps (simplified)
properties:
template:
containers:
- name: api
image: myregistry.azurecr.io/api:latest
resources:
cpu: 1.0
memory: 2Gi
scale:
minReplicas: 1
maxReplicas: 10
rules:
- name: http-scaling
http:
metadata:
concurrentRequests: "100"
Becomes:
# raidframe.yaml
services:
api:
type: web
build:
dockerfile: Dockerfile
port: 8080
resources:
cpu: 1
memory: 2GB
scaling:
min: 1
max: 10
target_rps: 100
Same as GKE migration — bring your Dockerfiles, leave the Kubernetes configuration behind:
rf init --from kubernetes ./k8s/
What you stop managing:
| Function Type | RaidFrame |
|---|---|
| HTTP trigger | Web service |
| Timer trigger | Cron job |
| Queue trigger | Worker with queue |
| Blob trigger | Worker with storage events |
services:
# HTTP trigger → web service
api:
type: web
port: 3000
# Timer trigger → cron
nightly-job:
type: cron
schedule: "0 2 * * *"
command: node functions/nightly.js
# Queue trigger → worker
processor:
type: worker
command: node functions/process-queue.js
Key advantage: no cold starts, no 10-minute execution limit, no consumption plan billing surprises.
# Export from Azure Blob Storage
az storage blob download-batch -d ./local-copy -s my-container --account-name mystorageaccount
# Upload to RaidFrame
rf add storage
rf storage sync ./local-copy/ s3://my-app-uploads/
Typical small SaaS on Azure vs RaidFrame:
| Component | Azure Monthly | RaidFrame |
|---|---|---|
| App Service (B2: 2 core, 3.5GB) | $55 | |
| Azure Database for PostgreSQL | $50 | |
| Azure Cache for Redis (C0) | $16 | |
| Blob Storage (50GB) | $1 | |
| Azure Front Door | $35 | |
| Application Insights (5GB) | $12 | |
| Azure DevOps (5 users) | $30 | |
| Key Vault | $1 | |
| Total | $200/mo | $57/mo |
Plus: no per-seat charges for Azure DevOps or Azure AD Premium.
rf deploy
rf domains add myapp.com