Skip to content

Cloud Service Models

Cloud service models define how much of the technology stack the cloud provider manages versus how much you manage yourself. Understanding these models is essential for making the right architectural choices — choosing too low a level means unnecessary operational burden, while choosing too high a level may limit flexibility.


The Service Model Spectrum

You Manage More Provider Manages More
◄──────────────────────────────────────────────────────►
On-Premise IaaS PaaS FaaS/BaaS SaaS
────────── ────── ────── ───────── ──────
┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐
│ App │ │ App │ │ App │ │ App │ │████████│
├────────┤ ├────────┤ ├────────┤ ├────────┤ │████████│
│Runtime │ │Runtime │ │████████│ │████████│ │████████│
├────────┤ ├────────┤ │████████│ │████████│ │████████│
│ OS │ │ OS │ │████████│ │████████│ │████████│
├────────┤ ├────────┤ │████████│ │████████│ │████████│
│ VM │ │████████│ │████████│ │████████│ │████████│
├────────┤ │████████│ │████████│ │████████│ │████████│
│Hardware│ │████████│ │████████│ │████████│ │████████│
└────────┘ └────────┘ └────────┘ └────────┘ └────────┘
████ = Managed by provider
Blank = Managed by you

IaaS: Infrastructure as a Service

IaaS provides the fundamental building blocks of computing: virtual machines, storage, and networking. You manage everything from the operating system upward.

What You Get

  • Virtual machines (CPU, memory, storage)
  • Virtual networks, subnets, firewalls
  • Block storage and object storage
  • Load balancers
  • IP addresses and DNS

What You Manage

  • Operating system installation, patching, and security
  • Runtime environments and middleware
  • Application deployment and scaling
  • Data backup and disaster recovery
  • Security hardening of the OS and application

IaaS Examples

ProviderComputeStorageNetworking
AWSEC2EBS, S3VPC, ELB
AzureVirtual MachinesManaged Disks, BlobVNet, Load Balancer
GCPCompute EnginePersistent Disk, Cloud StorageVPC, Cloud Load Balancing
DigitalOceanDropletsVolumes, SpacesVPC

When to Use IaaS

  • You need full control over the operating system
  • Running legacy applications that cannot be containerized
  • Compliance requirements mandate OS-level access
  • Custom networking configurations are needed
  • Running specialized software that requires specific OS settings
Terminal window
# Launch an EC2 instance with AWS CLI
aws ec2 run-instances \
--image-id ami-0c55b159cbfafe1f0 \
--instance-type t3.medium \
--key-name my-key-pair \
--security-group-ids sg-0123456789abcdef0 \
--subnet-id subnet-0123456789abcdef0 \
--iam-instance-profile Name=ec2-role \
--user-data '#!/bin/bash
yum update -y
yum install -y docker
systemctl start docker
docker run -d -p 80:8080 myapp:latest'

PaaS: Platform as a Service

PaaS provides a managed platform for deploying applications. The provider handles the operating system, runtime, middleware, and scaling. You focus on writing code.

What You Get

Everything in IaaS, plus:

  • Managed runtime environments (Node.js, Python, Java, etc.)
  • Automatic OS patching and security updates
  • Built-in scaling and load balancing
  • Managed databases and caching
  • Deployment tooling and CI/CD integration

What You Manage

  • Application code and configuration
  • Data and data models
  • Application-level security
  • Business logic

PaaS Examples

ProviderServiceBest For
AWSElastic Beanstalk, App RunnerQuick deployment of web apps
AzureApp Service.NET and Node.js applications
GCPApp Engine, Cloud RunPython, Java, Go, Node.js apps
HerokuHeroku PlatformRapid prototyping, small apps
RenderRender PlatformModern web apps and APIs
RailwayRailway PlatformFull-stack applications

When to Use PaaS

  • Rapid development and deployment is the priority
  • Standard web application workloads
  • Team does not have strong infrastructure expertise
  • Reducing operational overhead is important
  • Standard language runtimes are sufficient
Terminal window
# Deploy a containerized app to AWS App Runner
aws apprunner create-service \
--service-name my-web-app \
--source-configuration '{
"ImageRepository": {
"ImageIdentifier": "123456.dkr.ecr.us-east-1.amazonaws.com/myapp:latest",
"ImageRepositoryType": "ECR",
"ImageConfiguration": {
"Port": "8080",
"RuntimeEnvironmentVariables": {
"NODE_ENV": "production",
"DATABASE_URL": "postgres://..."
}
}
},
"AutoDeploymentsEnabled": true
}' \
--instance-configuration '{
"Cpu": "1024",
"Memory": "2048"
}' \
--auto-scaling-configuration-arn "arn:aws:apprunner:..."

SaaS: Software as a Service

SaaS delivers complete applications over the internet. Users access the software through a web browser or API — there is nothing to install, configure, or maintain.

What You Get

A fully managed application. Everything is handled by the provider.

What You Manage

  • Your data within the application
  • User accounts and permissions
  • Application configuration (within the app’s settings)

SaaS Examples

CategoryExamples
ProductivityGoogle Workspace, Microsoft 365, Notion
CRMSalesforce, HubSpot
CommunicationSlack, Zoom, Teams
DevOpsGitHub, GitLab, Jira, PagerDuty
MonitoringDatadog, New Relic, Splunk
PaymentStripe, PayPal
EmailSendGrid, Mailgun

When to Use SaaS

  • Standard business applications (email, CRM, project management)
  • You need to be productive immediately without setup
  • The SaaS vendor’s feature set matches your requirements
  • You want zero operational burden for that capability

FaaS: Functions as a Service

FaaS (also called serverless compute) lets you run individual functions in response to events, without managing any servers. The provider handles all infrastructure, scaling, and execution.

Key Characteristics

  • Event-driven: Functions trigger on events (HTTP requests, queue messages, file uploads, schedules)
  • Ephemeral: Functions start, execute, and terminate; no persistent state
  • Auto-scaling: From zero to thousands of concurrent executions automatically
  • Pay-per-invocation: Charged per execution and compute time (often in 1ms increments)

FaaS Examples

ProviderServiceMax TimeoutMemory Range
AWSLambda15 minutes128 MB - 10 GB
AzureFunctions230 seconds (Consumption)Up to 1.5 GB
GCPCloud Functions9 minutes (1st gen), 60 min (2nd gen)128 MB - 32 GB
CloudflareWorkers30 seconds128 MB
import json
import boto3
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('Users')
def handler(event, context):
"""
Lambda function triggered by API Gateway.
Handles GET and POST for user management.
"""
http_method = event['httpMethod']
if http_method == 'GET':
user_id = event['pathParameters']['id']
response = table.get_item(
Key={'userId': user_id}
)
return {
'statusCode': 200,
'headers': {
'Content-Type': 'application/json'
},
'body': json.dumps(
response.get('Item', {})
)
}
elif http_method == 'POST':
body = json.loads(event['body'])
table.put_item(Item=body)
return {
'statusCode': 201,
'body': json.dumps({
'message': 'User created'
})
}
return {
'statusCode': 405,
'body': json.dumps({
'error': 'Method not allowed'
})
}

BaaS: Backend as a Service

BaaS provides ready-made backend capabilities (authentication, databases, file storage, push notifications) through APIs and SDKs. Developers build frontends that connect directly to these managed backend services.

BaaS Examples

ServiceCapabilities
FirebaseAuth, Firestore, Cloud Storage, Hosting, Cloud Messaging
SupabaseAuth, PostgreSQL, Storage, Edge Functions, Realtime
AWS AmplifyAuth (Cognito), API (AppSync/GraphQL), Storage (S3)
AppwriteAuth, Database, Storage, Functions, Messaging

Container Services

Container services occupy a space between IaaS and PaaS. You package your application in containers, and the provider manages the orchestration, scaling, and infrastructure.

Container Service Spectrum:
More Control Less Control
◄─────────────────────────────────────────────────►
Self-managed K8s Managed K8s Container PaaS
on IaaS (EKS/AKS/GKE) (App Runner/Cloud Run)
───────────────── ────────────── ───────────────────
You manage: You manage: You manage:
- K8s control plane - Worker nodes - Container images
- Worker nodes - Pod specs - Configuration
- Networking - Deployments
- Storage - Services
- Upgrades
ServiceTypeProvider
EKSManaged KubernetesAWS
AKSManaged KubernetesAzure
GKEManaged KubernetesGCP
ECSProprietary container orchestrationAWS
Cloud RunContainer PaaS (serverless containers)GCP
App RunnerContainer PaaSAWS
Azure Container AppsContainer PaaSAzure

The Shared Responsibility Model

The shared responsibility model defines who is responsible for security at each layer. It varies by service model:

┌──────────────────┬───────────┬───────────┬───────────┬───────────┐
│ │ IaaS │ PaaS │ FaaS │ SaaS │
├──────────────────┼───────────┼───────────┼───────────┼───────────┤
│ Data │ Customer │ Customer │ Customer │ Customer │
│ Application │ Customer │ Customer │ Customer │ Provider │
│ Runtime │ Customer │ Provider │ Provider │ Provider │
│ Operating System │ Customer │ Provider │ Provider │ Provider │
│ Virtualization │ Provider │ Provider │ Provider │ Provider │
│ Network │ Provider │ Provider │ Provider │ Provider │
│ Physical │ Provider │ Provider │ Provider │ Provider │
└──────────────────┴───────────┴───────────┴───────────┴───────────┘
Customer = You are responsible for securing this layer
Provider = The cloud provider handles security for this layer

Choosing the Right Service Model

Decision Framework

START
Need full OS control? ──YES──▶ IaaS
│ NO
Standard web app or API? ──YES──▶ PaaS
│ NO
Event-driven / short-lived tasks? ──YES──▶ FaaS
│ NO
Just need a complete application? ──YES──▶ SaaS
│ NO
Need managed backend for frontend? ──YES──▶ BaaS
│ NO
Container-based workloads? ──YES──▶ Container Services

Cost Comparison (Approximate Monthly for a Small Web App)

ModelExampleApproximate CostOperational Effort
IaaSEC2 t3.medium + managed DB$50-150/monthHigh
PaaSHeroku Standard$25-75/monthLow
ContainerCloud Run$10-50/monthMedium
FaaSLambda + DynamoDB$5-30/monthVery Low
SaaS(use existing tool)Per-seat pricingNone

Summary

ModelYou ManageProvider ManagesBest For
IaaSOS, runtime, app, dataHardware, virtualization, networkingFull control, legacy apps
PaaSApp, dataOS, runtime, scaling, infrastructureStandard web apps, rapid development
FaaSFunction codeEverything elseEvent-driven, intermittent workloads
BaaSFrontend, data modelsBackend services (auth, DB, storage)Mobile/web frontends
SaaSData, configEverythingBusiness applications
ContainersContainer images, configsOrchestration, infrastructureMicroservices, portable workloads