@@ -111,11 +111,28 @@ module "eks_cluster" {
111111 cluster_encryption_config_resources = var. cluster_encryption_config_resources
112112
113113 addons = local. addons
114- addons_depends_on = [module . eks_node_group ]
114+ addons_depends_on = var . auto_mode_enabled ? null : [module . eks_node_group ]
115115 bootstrap_self_managed_addons_enabled = var. bootstrap_self_managed_addons_enabled
116116 upgrade_policy = var. upgrade_policy
117117 zonal_shift_config = var. zonal_shift_config
118118
119+ # EKS Auto Mode
120+ auto_mode_compute_config = {
121+ enabled = var.auto_mode_enabled
122+ node_pools = var.auto_mode_enabled ? [" general-purpose" , " system" ] : []
123+ node_role_arn = var.auto_mode_enabled ? one (aws_iam_role. auto_mode_node [* ]. arn ) : null
124+ }
125+
126+ auto_mode_storage_config = {
127+ block_storage = {
128+ enabled = var.auto_mode_enabled
129+ }
130+ }
131+
132+ auto_mode_elastic_load_balancing = {
133+ enabled = var.auto_mode_enabled
134+ }
135+
119136 access_entry_map = local. access_entry_map
120137 access_config = {
121138 authentication_mode = " API"
@@ -136,10 +153,49 @@ module "eks_cluster" {
136153 cluster_depends_on = [module . subnets ]
137154}
138155
156+ # Auto Mode node role (only when auto_mode_enabled = true)
157+ data "aws_iam_policy_document" "auto_mode_node_assume_role" {
158+ count = local. enabled && var. auto_mode_enabled ? 1 : 0
159+
160+ statement {
161+ effect = " Allow"
162+ actions = [" sts:AssumeRole" ]
163+
164+ principals {
165+ type = " Service"
166+ identifiers = [" ec2.amazonaws.com" ]
167+ }
168+ }
169+ }
170+
171+ resource "aws_iam_role" "auto_mode_node" {
172+ count = local. enabled && var. auto_mode_enabled ? 1 : 0
173+
174+ name = " ${ module . label . id } -auto-mode-node"
175+ assume_role_policy = one (data. aws_iam_policy_document . auto_mode_node_assume_role [* ]. json )
176+ tags = module. label . tags
177+ }
178+
179+ resource "aws_iam_role_policy_attachment" "auto_mode_node_minimal" {
180+ count = local. enabled && var. auto_mode_enabled ? 1 : 0
181+
182+ role = one (aws_iam_role. auto_mode_node [* ]. name )
183+ policy_arn = " arn:aws:iam::aws:policy/AmazonEKSWorkerNodeMinimalPolicy"
184+ }
185+
186+ resource "aws_iam_role_policy_attachment" "auto_mode_node_ecr" {
187+ count = local. enabled && var. auto_mode_enabled ? 1 : 0
188+
189+ role = one (aws_iam_role. auto_mode_node [* ]. name )
190+ policy_arn = " arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryPullOnly"
191+ }
192+
139193module "eks_node_group" {
140194 source = " cloudposse/eks-node-group/aws"
141195 version = " 3.2.0"
142196
197+ enabled = ! var. auto_mode_enabled
198+
143199 # node group <= 3.2 requires a non-empty list of subnet_ids, even when disabled
144200 subnet_ids = local. enabled ? module. subnets . public_subnet_ids : [" filler_string_for_enabled_is_false" ]
145201 cluster_name = module. eks_cluster . eks_cluster_id
0 commit comments