aws_eks_node_group cost estimation
Managed EC2 worker nodes for an EKS cluster. The node group has no charge of its own — it bills as the EC2 instances it launches. 3× m5.large is ~$210/month.
An aws_eks_node_group is where almost all of an EKS bill actually lives. The cluster itself (aws_eks_cluster) is a flat $0.10/hour (~$73/month) for the control plane, but that's a rounding error next to the worker nodes. The node group has no separate price line — it bills as the EC2 instances it launches, one per desired_size, at the on-demand rate for the first entry in instance_types.
The trap is desired_size × instance hours. Three m5.large nodes ($0.096/hour each) running 24/7 is $0.096 × 3 × 730 = $210.24/month, and that's before EBS volumes, the control plane, NAT data processing for image pulls, and any load balancers. A modest production cluster with a 6-node m5.xlarge group is already ~$840/month on compute alone.
capacity_type matters. ON_DEMAND is the conservative default c3x prices. SPOT can cut node cost 70–90% but the price floats and nodes get reclaimed, so c3x deliberately prices spot node groups at the on-demand ceiling rather than guessing a spot rate that would be wrong by next week.
The other quiet cost is over-provisioning: node groups are often sized for peak and left there. Cluster Autoscaler or Karpenter scaling the group to actual demand is usually the single biggest EKS saving, ahead of instance-family changes.
c3x estimates the node group from scaling_config.desired_size and the first instance_types entry (Linux, on-demand). EBS volumes attached to nodes and the control plane are separate line items.
Terraform example
A minimal but realistic configuration that C3X can estimate.
resource "aws_eks_node_group" "workers" {
cluster_name = aws_eks_cluster.main.name
node_group_name = "workers"
node_role_arn = aws_iam_role.node.arn
subnet_ids = aws_subnet.private[*].id
instance_types = ["m5.large"]
capacity_type = "ON_DEMAND"
scaling_config {
desired_size = 3
min_size = 3
max_size = 10
}
}Pricing dimensions
What you actually pay for when you provision aws_eks_node_group.
| Dimension | Unit | What's being charged |
|---|---|---|
| Node instances | per instance-hour | desired_size × the on-demand rate for the first instance_types entry (Linux/UNIX). This is the whole node-group bill. $0.096/hour for m5.large → 3 nodes ≈ $210.24/month |
| EBS volumes on nodes | per GB-month | Each node's root/data EBS volume bills separately (gp3 ~$0.08/GB-month). Estimated as aws_ebs_volume resources. |
| EKS control plane | per hour | Billed on aws_eks_cluster, not the node group: a flat $0.10/hour (~$73/month) per cluster. |
Sample C3X output
A 3-node m5.large managed node group, on-demand, running 24/7:
aws_eks_node_group.workers
└─ Node instances (Linux, on-demand) 2190 instance-hours $210.24
Monthly $210.24Optimization tips
Common ways to reduce aws_eks_node_group cost without changing the workload.
Run Karpenter or Cluster Autoscaler
30–50% on node computeNode groups are usually sized for peak and never scaled down. Karpenter (or Cluster Autoscaler) provisions nodes to actual pod demand and removes idle ones, typically cutting node spend 30–50% on bursty workloads.
Use a SPOT capacity_type node group for stateless workloads
Up to 90% on spot-eligible podsA second node group with capacity_type = SPOT for stateless, fault-tolerant pods can run at 70–90% off on-demand. Keep stateful and system pods on a small on-demand group.
Right-size the instance family
~20% with Gravitonm5 → m6i/m7i is roughly the same price for more performance, and Graviton (m7g) is ~20% cheaper for ARM-compatible workloads. Match the family to whether pods are CPU-, memory-, or burst-bound.
Consolidate tiny clusters
$73/month per eliminated clusterEvery EKS cluster carries a $73/month control-plane fee. Teams running one cluster per service pay that fee many times over; namespaces on a shared cluster avoid it.
FAQ
Why does my EKS node group show as EC2 cost, not EKS cost?
Because that's how AWS bills it. Managed node groups launch standard EC2 instances; there's no separate 'node group' meter. c3x prices desired_size × the on-demand instance rate, which is exactly what lands on your EC2 bill.
Does c3x price spot node groups at the spot rate?
No. Spot prices float and nodes are reclaimed, so any fixed spot number would be wrong. c3x prices a SPOT node group at the on-demand rate as a conservative ceiling, and flags it. Your real spot cost will be meaningfully lower.
Is the EKS control plane included in the node group estimate?
No. The flat $0.10/hour (~$73/month) control-plane fee bills on aws_eks_cluster. The node group line is purely the worker instances. Add both for the full cluster cost.
How is desired_size used in the estimate?
c3x multiplies scaling_config.desired_size by 730 hours and the instance rate. If the group autoscales, the estimate reflects the desired baseline, not the min or max — actual cost moves with how often the autoscaler adds nodes.
Related resources
Estimate this resource in your own Terraform
Free, open source, no API key. C3X parses your Terraform and shows line-item cost for every resource, including aws_eks_node_group.