Hosting options: Deployment efficiency matters

Hosting options as AWS App Runner moved into maintenance mode. Deployment efficiency matters

Hosting options: Deployment efficiency matters
Photo by Maro Luke / Unsplash
💡
Summary of MCP server and tools we've built up to date
https://inagentic.ai/news/mcp-servers-oxcomply-inagentic/

Most teams pick a deployment platform once and live with it for years. The gap between the fastest and slowest path from Dockerfile to live URL is hours, not minutes, monthly cost can vary three to five times for the same workload, and how fast a code change reaches production once a service exists matters just as much, yet gets talked about far less.

This matters more now: AWS App Runner has moved into maintenance mode (no new customers after April 2026), and Heroku shifted to sustaining engineering in early 2026. Thousands of teams are re-evaluating where to run their workloads.

What "deployment efficiency" actually means

  • Setup time. Account creation to a live, HTTPS-reachable URL.
  • Update time. Code change pushed to that change serving live traffic on an already-running service. The number most comparisons skip, and the one you live with daily.
  • Cost per month. A small, always-on container at modest traffic, not a sleeping free-tier demo.

Setup time is paid once. Update time is paid every deploy, for the life of the service. Ten extra minutes of setup for thirty seconds saved on every redeploy pays for itself within weeks of normal shipping cadence.

Setup time vs. update time: the comparison

Setup assumes a working Dockerfile and repo, account creation to live URL. Update assumes that service already exists, measured from push to live traffic.

Platform Setup time Update time Why
Railway Under 5 minutes 15 to 60 seconds Railpack builds and ships fast, and railway up from the terminal skips the dashboard entirely. Instant rollback to the previous deployment if something breaks.
Render 5 to 15 minutes 1 to 3 minutes Auto-deploys on every push to the connected branch. Zero-downtime rolling deploys, but the build step is generally slower than Railway's.
Google Cloud Run 10 to 20 minutes 30 seconds to 2 minutes Each deploy creates a new immutable revision and shifts traffic once it's healthy. Traffic splitting and instant rollback to any prior revision are built in.
Fly.io 15 to 30 minutes 30 seconds to 2 minutes fly deploy does a rolling update machine by machine. Fast per machine, but the total time scales with how many machines and regions you're running.
AWS ECS Express Mode 30 to 60 minutes 3 to 6 minutes A new image push triggers a fresh ECS deployment, gated by ALB health checks before old tasks are drained. Reliable, but the health-check cycle adds real minutes you don't get back.
AWS ECS Fargate (standard) Half a day to several days 5 to 10 minutes Same health-check-gated rollout as Express Mode, often slower still if you've configured blue-green deployments through CodeDeploy for extra safety, which add their own validation window.

Setup and update rankings don't fully agree. Cloud Run and Fly.io take longer to set up but are near the front on update speed once running. ECS pays a structural tax on both, the cost of its health-check-gated safety net. If you ship daily, weight update time more heavily than setup time.

Cost per month: the comparison

List prices mislead. The comparison below is a small, always-on web service: roughly 0.5 vCPU, 512MB to 1GB RAM, modest traffic.

Platform Approx. monthly cost Pricing model
Fly.io £2 to £6 Pure usage based, billed per VM-second plus separate metered egress, storage and IPv4 charges. Cheapest at idle, but the bill is genuinely harder to predict because every component is billed separately.
Railway £4 to £12 Usage based, billed by the second, with a monthly minimum spend. Cheapest option for a single low-traffic service with a database attached.
Render £0 (free, sleeps after 15 min idle) or £6 to £20 (Starter, always on) Flat fee per service. Highly predictable, but each additional service, worker or database is billed separately and the total adds up quickly on multi-service apps.
Google Cloud Run £0 to £10 Request-based billing with a generous free tier and true scale to zero. Can be the cheapest option by far for genuinely intermittent traffic, but cold starts are a real trade-off for latency-sensitive workloads.
AWS ECS Express Mode £8 to £20 Fargate compute pricing plus a shared application load balancer across up to 25 services, which keeps the ALB overhead from dominating the bill for small workloads. No scale to zero.
AWS ECS Fargate (standard) £15 to £40+ Same compute pricing as Express Mode, but you're paying for your own dedicated ALB, NAT gateway and supporting infrastructure rather than sharing it. The control comes at a fixed overhead cost regardless of how small the workload is.

Rule of thumb: flat-rate platforms (Render, standard Fargate) carry fixed overhead a single small service pays in full. Usage-based platforms (Fly.io, Railway, Cloud Run) scale that overhead down with you, which is why they tend to win on cost at small scale.

Reading the trade-off correctly

Fast and cheap now is a cost paid later. Platforms that get you live in five minutes make infrastructure decisions on your behalf, region, scaling, secrets, which is the right trade until you need something the platform doesn't expose. Standard ECS Fargate exists for teams that genuinely need custom task definitions, blue-green deployments, and fine-grained IAM, and are willing to pay in setup time for that control. The mistake is reaching for it before you need it.

What the PaaS comparison leaves out: the hyperscaler bundle

This compares container hosting in isolation. That's wrong once your stack includes a database, storage, a queue, a CDN, and identity, because at that point AWS, Azure and Google Cloud compete on the whole system, not the container.

  • One bill, one discount lever. AWS Organizations, Azure Management Groups and GCP Billing Accounts roll multiple projects into one bill, hitting volume tiers faster than any single workload would alone.
  • Commitment discounts apply account-wide. AWS EDP, Azure MACC, and GCP CUD are a percentage off total qualifying spend, not one service, something a stack split across separate PaaS vendors has no equivalent to.
  • No cross-vendor egress. Traffic between separately-hosted services typically crosses the public internet and gets billed. Intra-account traffic on all three hyperscalers is typically free.
  • Single identity model. IAM, Entra ID, or Cloud IAM covers container, database, storage and CI/CD with one permission model and one audit log, instead of one per vendor.
  • Simpler compliance scope. Fewer vendors means fewer data processing agreements and sub-processors to disclose for SOC 2, ISO 27001, or HIPAA audits.
  • Native AI integration. Azure for OpenAI-on-Microsoft-365, GCP for BigQuery and Vertex AI, AWS Bedrock inside the same VPC. None of the PaaS platforms above offer an equivalent in-network AI story.
  • One support relationship. One SLA, one escalation path, instead of a different status page for every vendor in an outage.

This doesn't change the cost or setup-time numbers above for a single small container. It changes shape as the system around that container grows: PaaS wins when the container is most of what you run, the hyperscaler wins once it's one piece of a stack that already includes a database, storage, and identity, because the saving shows up at the account level. Multi-cloud setups are usually about filling a specific service gap, not saving money.

A practical framework

  • Prototype or side project: Railway or Render's free tier. Optimise for setup time, cost is near zero either way.
  • Small production service, shipping daily: Railway. The sub-minute update time saves real hours over a year of normal shipping.
  • Intermittent or spiky traffic: Google Cloud Run. True scale to zero plus fast, instant-rollback revision deploys.
  • Latency-sensitive, global users: Fly.io, the only platform here built around regional placement by design.
  • Already deep in AWS: ECS Express Mode if you can live with a slower, health-check-gated update cycle. Standard Fargate only once you need its control.
  • Running a full stack, not just a container: stay on one hyperscaler. The consolidated bill and zero-egress internal traffic usually beat per-service savings from a best-of-breed PaaS mix.

A note from building InAgentic

We run InAgentic's pipeline on AWS App Runner today, which is why this isn't theoretical for us. Update time matters more than setup time since the pipeline ships several times a week. We're weighing ECS Express Mode's slower rollout against Cloud Run's faster revisions for the parts that ship most often, while keeping always-on services where the setup cost is already paid. The bundling argument favours AWS specifically: our MCP servers, storage, and queueing already share the same account, so a PaaS migration would mean egress that's currently free and losing the single IAM boundary we have. Staying inside one cloud's boundary for services that talk to each other constantly is usually worth more than the per-service saving from spreading them across vendors.

The bottom line

There's no universally correct platform, only the right one for your stage and traffic pattern. The spread is wide enough, in time and in pounds, that it's worth re-running this comparison whenever your traffic changes, your AWS dependency changes, or the platform you're standing on changes its roadmap out from under you.

When building with AI at pace, number of deployment per day will be much higher than in traditional development cycles.

✓  TL;DR
What we learned comparing hosting platforms
Update time matters more than setup time for anyone shipping regularly. Setup is paid once; update time is paid on every deploy for the life of the service — ten extra minutes of setup for thirty seconds saved per redeploy pays for itself within weeks of normal shipping cadence.
Setup speed and update speed don't rank the same way. Cloud Run and Fly.io take longer to set up but lead on update speed once running; standard ECS Fargate pays a structural tax on both, the cost of its health-check-gated safety net.
Flat-rate platforms carry fixed overhead a small service pays in full. Usage-based platforms (Fly.io, Railway, Cloud Run) scale their overhead down with actual traffic, which is why they tend to win on cost at small scale — flat fee platforms like Render or standard Fargate don't shrink with you.
Fast, cheap platforms make infrastructure decisions for you — that's the right trade until it isn't. Standard ECS Fargate exists for teams that genuinely need custom task definitions, blue-green deployments, and fine-grained IAM. The mistake is reaching for that control before it's actually needed.
Once a stack includes a database, storage, a queue, and identity, the comparison changes shape entirely. A hyperscaler bundle (AWS, Azure, GCP) wins on consolidated billing, account-wide commitment discounts, zero-egress internal traffic, and a single IAM boundary — savings that show up at the account level, not the container level.
AI-paced development multiplies how much any of this matters. Deployment frequency when building with AI runs far higher than traditional cycles, so the gap between fast and slow update paths compounds faster than it would in a conventional release cadence.
Coming in future chapters
Weighing ECS Express Mode against Cloud Run for InAgentic's most-frequently-shipped pipeline components, and why staying inside one cloud's account boundary is winning out over spreading services across vendors.


💡
This is a genuinely useful frame for 2026.

Most writing about new technology treats it as a break from history. Today's piece does the opposite.
https://inagentic.ai/news/meet-the-new-stack-same-as-the-old-stack/