Where the work actually runs: instances, clusters, containers, and the scaling behaviour that decides what they cost.
Every AWS compute service ultimately runs on EC2 capacity; the services differ in how much of the stack AWS manages for you. With plain EC2 you choose the instance family, the AMI and the operating system, and you are responsible for patching, scaling and placement. EMR packages EC2 instances into a managed cluster with Spark, Hive, Trino and other big-data frameworks preinstalled and configured. ECS and EKS schedule containers; they can place tasks on EC2 instances you own, or on Fargate, where AWS provisions right-sized capacity per task and you never see the underlying hosts. Lambda, covered under Serverless, sits at the far end with per-invocation billing.
Auto Scaling is the cross-cutting concern: it decides how many instances, nodes or tasks run at any moment, and therefore most of the bill. Target-tracking policies on a metric such as CPU or queue depth are usually the right starting point, with scheduled scaling layered on for predictable daily peaks.
| Workload | Good fit | Why |
|---|---|---|
| Long-running service needing specific OS, GPU or licensing | EC2 | Full control of the instance |
| Batch Spark / Hive jobs over S3 data | EMR | Managed cluster, Spot task nodes, transient clusters |
| Containerised microservices, AWS-native team | ECS (EC2 or Fargate) | Simpler control plane, deep IAM integration |
| Containers with Kubernetes tooling or portability needs | EKS | Standard Kubernetes API and ecosystem |
| Spiky container workloads, no node management | Fargate | Per-task capacity and billing |
| Variable traffic on any of the above | Auto Scaling | Match capacity to demand |
Cost and operational effort pull in opposite directions. EC2 with Reserved Instances or Savings Plans is usually cheapest per unit of compute at steady load, but carries the most operational work. Fargate and Lambda cost more per vCPU-hour yet remove idle capacity and host maintenance. Spot capacity can cut costs substantially for interruptible work such as EMR task nodes and stateless containers.
See AWS Serverless for Lambda and Step Functions, Networking for VPC placement, and Monitoring for the metrics that drive scaling decisions.