terraform-aws-eks module supports four distinct compute strategies for running workloads on Amazon EKS. Each option offers different trade-offs in control, operational overhead, and cost.
Compute options
EKS Auto Mode
Fully managed compute with automatic node provisioning, scaling, and lifecycle management. AWS manages the underlying EC2 fleet.
EKS Managed Node Groups
AWS-managed Auto Scaling Groups where EKS handles node provisioning and lifecycle, but you retain control over instance configuration via launch templates.
Self-Managed Node Groups
Fully self-managed Auto Scaling Groups. You control every aspect of the node lifecycle, launch template, and bootstrap process.
Fargate Profiles
Serverless compute for pods. No nodes to manage — AWS provisions isolated compute for each pod matching your selectors.
Comparison
| Feature | EKS Auto Mode | Managed Node Groups | Self-Managed | Fargate |
|---|---|---|---|---|
| Node management | AWS | AWS | You | AWS (serverless) |
| Launch template | Not applicable | Custom (default on) | Full control | Not applicable |
| Custom AMI | No | Yes | Yes | No |
| Spot / On-Demand mix | Automatic | Via capacity type | Via mixed instances policy | No |
| EFA support | No | Yes | Yes | No |
| Bottlerocket OS | No | Yes | Yes | No |
| Windows nodes | No | Yes | Yes | No |
| Bin packing / cost optimization | Automatic | Manual | Manual | Per-pod billing |
| Best for | Simplicity, managed operations | Standard workloads needing customization | Advanced control or custom AMIs | Batch, burst, or isolation workloads |
Default node group configurations
All node group types inherit cluster-level defaults unless overridden at the node group level. The module waits30s after the EKS cluster becomes active before creating any node groups (configurable via dataplane_wait_duration).
For eks_managed_node_groups and self_managed_node_groups, when no values are specified:
min_sizedefaults to1max_sizedefaults to3desired_sizedefaults to1ami_typedefaults toAL2023_x86_64_STANDARDinstance_type/instance_typesdefaults tot3.medium(managed) orm6i.large(self-managed)
The
desired_size value is only respected on initial creation. Subsequent changes are ignored to avoid conflicts with the cluster autoscaler or Karpenter managing the desired count externally.