cloudparts

Infrastructure as a service (IaaS)

Rent virtual machines, disks and networks through an API and pay for the time they exist; the provider runs the hardware and the hypervisor, and you run everything from the operating system up.

5 technologies on this page ↓

How it works

A provider fills data centers with servers, storage and network gear, splits the servers into virtual machines with a hypervisor (Compute Engine uses KVM), and puts all of it behind an API. The console, the CLI, the SDKs and tools such as CloudFormation are clients of that API. To launch a machine you name four things: an image, which is a template holding the operating system and any extra software (an AMI on EC2); a size, which fixes the CPU, memory, network and storage (an instance type on EC2, a flavor on OpenStack); a key pair, whose public half the provider injects for SSH; and a network with firewall rules (a security group). The control plane then picks a physical host. In OpenStack’s Nova, an API service receives the HTTP request, a scheduler “decides which host gets each instance”, and a compute service running on that host drives the hypervisor to boot it. Disks are separate resources: an EBS volume is persistent and can outlive the instance, while instance store volumes are deleted when the instance stops or terminates. On first boot an agent such as cloud-init reads the user data you passed at launch (at most 16 KB on EC2) and sets the hostname, creates users and runs your scripts. From then on the machine is yours to run: NIST gives the consumer control over “operating systems, storage, and deployed applications” and possibly host firewalls, but not the infrastructure beneath. Billing follows the clock, not the work: EC2 bills Linux On-Demand instances per second with a 60-second minimum, whether the CPU is busy or idle.

Think of it as

Renting units in a warehouse. The landlord owns the building, the power, the loading docks and the guard at the gate, and will give you another unit on a phone call and take it back when you’re done. What goes on the shelves, how they’re arranged and who gets a key to your unit are your problem, and if you leave the door unlocked, the guard at the gate won’t notice.

Reach for it when

  • Moving an existing server with its operating system, agents and configuration as it is, without rewriting the application
  • Software that needs a particular OS, kernel setting, GPU or license tied to a physical server: EC2 Dedicated Hosts exist so you can use existing server-bound licenses
  • Batch work that runs for minutes or hours and then stops: per-second billing ends the cost when the instance does, and Spot Instances sell unused capacity at steep discounts for jobs that can be interrupted
  • Building your own platform on top, such as a Kubernetes cluster, a database you tune yourself, or a self-hosted PaaS

Think twice when

  • A small team with an ordinary web app: patching the guest OS, writing firewall rules and setting up scaling all stay yours, which a PaaS or functions would take over
  • Workloads that sit idle most of the time: an instance is billed for every second it runs, busy or not, while functions bill per request
  • Expecting one VM to be highly available: Azure’s 99.99% connectivity guarantee needs two or more instances across two or more Availability Zones
  • Keeping data on the instance’s own disk: instance store volumes are deleted when the instance stops, hibernates or terminates, so anything that matters goes on a persistent volume or in object storage

A real example

A team moves a nightly reporting job from an office server to EC2. It picks an AMI with the same Linux distribution, an instance type with enough memory, and a security group that allows SSH only from the office’s IP range. The job’s data sits on an EBS volume, so it survives when the instance is replaced. A user data script installs the job at first boot. The job runs for about 40 minutes a night, and with per-second billing the team pays for those minutes rather than for a server that sits idle the rest of the day. To cut the cost further it runs on Spot capacity and checkpoints its progress, because EC2 gives a two-minute warning before it reclaims a Spot Instance. The cloud now handles failed disks and broken hosts; patching the operating system and keeping the firewall rules tight are still the team’s job.

Technologies

Specific products, and what each does differently.

What each provider calls it

AWS
Amazon EC2: instances launched from AMIs, EBS and instance store volumes, security groups and VPC subnets; On-Demand billed per second (60-second minimum on Linux), plus Spot Instances, Savings Plans, Reserved Instances and Dedicated Hosts
Google Cloud
Compute Engine: self-managed VM and bare metal instances on a KVM hypervisor, configured through the console, the gcloud CLI or a REST API
Azure
Azure Virtual Machines with managed disks, virtual networks and network security groups; Virtual Machine Scale Sets for groups that grow and shrink with demand
Open source & others
OpenStack (Apache 2.0): Nova places and runs instances, mostly on KVM, with images, flavors, volumes, security groups and floating IPs; cloud-init for first-boot setup

The same parts under different names#

Every IaaS cloud asks for the same handful of things when you create a machine. The names differ.

PartAmazon EC2AzureOpenStack
The machineInstanceVirtual machineInstance (server)
What it boots fromAMIImageImage, snapshot or volume
Its sizeInstance typeVM sizeFlavor
Persistent diskEBS volumeManaged disk (OS disk and data disks)Block storage volume
Firewall rulesSecurity groupNetwork security groupSecurity group
First-boot scriptUser data (up to 16 KB)Custom data (up to 64 KB)User data, read by cloud-init
  • Azure’s OS disk is usually 127 GiB and is billed at the regular rate for disks; Azure recommends keeping data on a separate disk so it can be detached and attached to a new VM.
  • Azure also has a separate user data feature, which stays readable from the instance metadata service for the VM’s lifetime; custom data is processed once by the provisioning agent at first boot.

Ways to pay for the same machine#

IaaS pricing trades flexibility for discount. These are EC2’s options; other clouds have close equivalents.

On-Demand

per second

Pay for the time an instance runs, billed per second with a 60-second minimum, with no commitment. Since October 2017 for Linux; Windows and Linux distributions with their own hourly charge were left out of that change.

Spot

interruptible

Request unused capacity at a steep discount. EC2 can reclaim it, and sends a two-minute interruption notice first, so it suits data analysis, batch jobs and background processing that can be interrupted.

Savings Plans

1 or 3 years

Commit to a steady amount of usage in USD per hour for one or three years, in exchange for a lower rate.

Reserved Instances

1 or 3 years

Commit to a specific instance configuration, including type and Region, for one or three years.

Dedicated Hosts

whole server

A physical server for your use only, so you can bring server-bound software licenses and meet compliance rules.

In code · bash

# Launch one VM: an image, a size, a key, a network and firewall rules
aws ec2 run-instances \
  --image-id ami-0abcdef1234567890 \
  --instance-type t2.micro \
  --count 1 \
  --subnet-id subnet-08fc749671b2d077c \
  --key-name MyKeyPair \
  --security-group-ids sg-0b0384b66d7d692f9 \
  --user-data file://my_script.txt      # run as root on first boot

# The same request on an OpenStack cloud
openstack server create --image ubuntu-24.04 --flavor m1.small \
  --key-name mykey --network private --security-group web \
  --user-data my_script.txt web-1

Often confused with

Where it came from2006–2017

Before IaaS, more servers meant a purchase order. Google describes procurement processes that can take months, plus rooms with power and cooling and staff to run the machines, and the risk of either running out of capacity or paying for capacity nobody uses. On August 24, 2006, Amazon put EC2 into beta: a web service that “provides resizable compute capacity in the cloud”, gave “complete control of your computing resources”, cut the time to obtain and boot a server “to minutes” and charged only “for capacity that you actually use”.

Others followed with their own machines and an open-source alternative. In July 2010 Rackspace and NASA announced OpenStack, built from NASA’s Nebula platform and Rackspace’s Cloud Files, to be a cloud platform for “public and private clouds regardless of size”; its first release, Austin, came out on October 21, 2010. In September 2011 NIST’s SP 800-145 defined IaaS by what the consumer controls. On June 28, 2012, Google announced Compute Engine at Google I/O to provide “general purpose virtual machines” next to App Engine, and on April 16, 2013, Microsoft made Windows Azure’s Virtual Machines and Virtual Networks generally available, backed by an enterprise SLA.

The model then got finer-grained rather than different. On October 2, 2017, EC2 moved Linux instances and EBS volumes from hourly billing to per-second billing with a 60-second minimum, so short jobs stopped paying for the rest of the hour. OpenStack, released under Apache 2.0 and supported by the OpenInfra Foundation, turned 15 on July 19, 2025.

Why it’s built this way

Rent whole virtual servers, not a new programming model
EC2 aimed to make “web-scale computing easier for developers” by handing them servers they fully control, so existing software could move without being rewritten.
Everything through a self-service API
NIST lists on-demand self-service, provisioning “without requiring human interaction with each service provider”, as an essential cloud trait. OpenStack likewise describes pools of compute, storage and networking “managed and provisioned through APIs”.
Bill by use, then by the second
Paying only for capacity used was EC2’s pitch in 2006. In 2017 AWS cut the unit to one second because dev/test, data processing, batch and rendering jobs run for irregular periods and were paying for the unused minutes of each hour.
An open-source cloud stack
Rackspace and NASA started OpenStack so organizations could run cloud services on standard hardware in their own data centers as well as public ones, with the code released under Apache 2.0.

Timeline

  1. 2006

    Amazon EC2 enters beta on August 24

  2. 2010

    Rackspace and NASA announce OpenStack in July; first release, Austin, on October 21

  3. 2011

    NIST SP 800-145 defines infrastructure as a service

  4. 2012

    Google announces Compute Engine at Google I/O on June 28

  5. 2013

    Windows Azure Virtual Machines become generally available on April 16

  6. 2017

    EC2 switches Linux instances to per-second billing on October 2

Sources15

Improve this page on GitHub