Azure IaaS vs PaaS: VMs vs managed services, and when to use each
Both run your app in the cloud. The difference isn't the app — it's how much of the stack underneath it becomes your problem. Get that line straight and the choice makes itself.
New to cloud? CAMPUX is a free, build-first course. Start here →
IaaS gives you a virtual machine: Azure runs the physical host, you own everything from the OS up — patching, scaling, availability. PaaS gives you a managed platform like App Service or Azure SQL: Azure also runs the OS, runtime and most of the scaling, and you bring mainly code or data. Choose IaaS when you need control of the whole stack or are lifting-and-shifting; choose PaaS when you're building new and would rather ship the app than babysit the server. The whole decision is a question about responsibility, not technology.
Every "which should I use" argument about Azure compute is really the same question: how much of the machinery do you want to own? IaaS hands you the keys to a server and everything that comes with owning one. PaaS hands you a platform and quietly keeps the server-owning to itself. Neither is better; they trade control for convenience in opposite directions.
The line: who owns what
Both models sit on Azure's physical datacenter, network and hypervisor — that's always Microsoft's. Above the hypervisor is where they split:
| Layer | IaaS (a VM) | PaaS (a managed service) |
|---|---|---|
| Datacenter, network, hypervisor | Azure | Azure |
| Operating system + patching | You | Azure |
| Runtime / middleware | You | Azure |
| Scaling & availability | You (scale sets, LB, zones) | Mostly Azure (built in) |
| Your app & data | You | You |
That's the entire distinction. With IaaS the OS, the patch cadence, the scaling rules and the availability design are yours to build and run. With PaaS, Azure does those and you meet it near the top of the stack with your code or your data.
What each looks like in Azure
- IaaS: Azure Virtual Machines and Virtual Machine Scale Sets — you pick the image, patch the OS, and design the scaling and redundancy (across an availability set or zones).
- PaaS: App Service, Azure Functions, Azure SQL Database, Cosmos DB, Container Apps, and the managed control plane of AKS — you deploy code, containers or data and Azure runs the platform beneath.
There's also SaaS (a finished app like Microsoft 365) at the far end, and the boundaries blur — containers and AKS sit between the two — but VM-versus-managed-service is the decision you'll actually make most days.
When to choose IaaS (a VM)
- Lift and shift — moving an existing app to Azure unchanged; a VM is the closest thing to where it ran before.
- OS-level control — you need specific kernel modules, drivers, agents, or full control of the operating system.
- Legacy or licensing constraints — software that must run on a particular OS, or a license tied to the whole machine.
- Steady, well-understood workloads where fine-grained sizing beats managed convenience on cost.
When to choose PaaS (a managed service)
- Building something new — no legacy to preserve, so start where Azure carries the plumbing.
- You'd rather ship the app — offload patching, scaling and availability so the team spends time on features, not servers.
- Variable or bursty load — PaaS autoscaling (and serverless like Functions) handles spikes without you designing scale sets.
- Small team — fewer people means the operational hours PaaS saves are worth more than the control it costs.
PaaS can look pricier per hour and still be cheaper overall, because it removes the staff-time of patching and running servers. IaaS can win on steady workloads with careful sizing — but you pay the management overhead in engineering effort. Compare total cost of ownership (compute plus people-time), not the compute line alone.
The honest answer: usually both
Real architectures mix the two. A managed Azure SQL database behind an app running on VMs; Functions calling a legacy system that has to stay on a VM; a container app in front of an IaaS backend during a migration. The useful instinct is default to PaaS and drop to IaaS only where a real requirement forces control — because every layer Azure runs is a layer you don't patch at 2am.
IaaS is a server you own in someone else's building. PaaS is a service you rent and never see the hardware. Pick by how much you want to own.
Questions people also ask
What's the difference between IaaS and PaaS in Azure?
IaaS gives you a VM — Azure runs the host, you own OS-up (patching, scaling, availability). PaaS gives you a managed platform (App Service, Azure SQL) — Azure runs the OS, runtime and most scaling, and you bring code or data. The split is who owns the layers above the hypervisor.
When should I use a VM instead of a managed service?
When you need OS control, are lifting-and-shifting unchanged, have legacy/licensing dependencies, or have a steady workload where fine sizing wins on cost. Prefer PaaS for new builds where Azure should handle patching, scaling and availability.
Is PaaS cheaper than IaaS?
Not always per hour, but often in total cost — it removes patching and server maintenance (real staff time). IaaS can be cheaper for steady workloads with careful sizing, at the price of management effort. Compare total cost of ownership.
What are examples of each in Azure?
IaaS: Virtual Machines, Scale Sets. PaaS: App Service, Functions, Azure SQL Database, Cosmos DB, Container Apps, the managed AKS control plane. Many architectures mix both.