11data "aws_caller_identity" "current" {}
22
3+ resource "aws_eks_cluster" "main" {
4+ name = var. cluster_name
5+ version = var. cluster_version
6+ role_arn = aws_iam_role. cluster . arn
7+
8+ access_config {
9+ authentication_mode = " API_AND_CONFIG_MAP"
10+ bootstrap_cluster_creator_admin_permissions = true
11+ }
12+
13+ vpc_config {
14+ subnet_ids = var. subnet_ids
15+ }
16+
17+ depends_on = [
18+ aws_iam_role_policy_attachment . cluster_policy
19+ ]
20+
21+ tags = {
22+ " karpenter.sh/discovery" = var.cluster_name
23+ " Name" = var.cluster_name
24+ }
25+ }
26+
27+ resource "aws_ec2_tag" "cluster_sg_karpenter" {
28+ resource_id = aws_eks_cluster. main . vpc_config [0 ]. cluster_security_group_id
29+ key = " karpenter.sh/discovery"
30+ value = var. cluster_name
31+
32+ depends_on = [
33+ aws_eks_cluster . main
34+ ]
35+ }
36+
37+ # EKS OIDC Identity Provider
38+ resource "aws_iam_openid_connect_provider" "eks" {
39+ client_id_list = [" sts.amazonaws.com" ]
40+ thumbprint_list = [" 9e99a48a9960b14926bb7f3b02e22da2b0ab7280" ]
41+ url = aws_eks_cluster. main . identity [0 ]. oidc [0 ]. issuer
42+
43+ depends_on = [
44+ aws_eks_cluster . main
45+ ]
46+ }
47+
348resource "aws_iam_role" "cluster" {
449 name = " ${ var . cluster_name } -cluster-role"
50+
551 assume_role_policy = jsonencode ({
652 Version = " 2012-10-17"
753 Statement = [
@@ -22,12 +68,11 @@ resource "aws_iam_role" "cluster" {
2268resource "aws_iam_role_policy_attachment" "cluster_policy" {
2369 policy_arn = " arn:aws:iam::aws:policy/AmazonEKSClusterPolicy"
2470 role = aws_iam_role. cluster . name
25-
26- depends_on = [aws_iam_role . cluster ]
2771}
2872
2973resource "aws_iam_role" "node" {
3074 name = " ${ var . cluster_name } -node-role"
75+
3176 assume_role_policy = jsonencode ({
3277 Version = " 2012-10-17"
3378 Statement = [
@@ -45,66 +90,22 @@ resource "aws_iam_role" "node" {
4590resource "aws_iam_role_policy_attachment" "node_policy" {
4691 for_each = toset ([
4792 " arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy" ,
48- " arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy" ,
4993 " arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryPullOnly" ,
50- " arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly "
94+ " arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy "
5195 ])
5296
5397 policy_arn = each. value
5498 role = aws_iam_role. node . name
55-
56- depends_on = [aws_iam_role . node ]
57- }
58-
59- resource "aws_eks_cluster" "main" {
60- name = var. cluster_name
61- version = var. cluster_version
62- role_arn = aws_iam_role. cluster . arn
63-
64- access_config {
65- authentication_mode = " API_AND_CONFIG_MAP"
66- bootstrap_cluster_creator_admin_permissions = true
67- }
68-
69- vpc_config {
70- subnet_ids = var. cluster_subnet_ids # Changed from var.subnet_ids
71- }
72-
73- depends_on = [
74- aws_iam_role . cluster ,
75- aws_iam_role_policy_attachment . cluster_policy
76- ]
77-
78- tags = {
79- " karpenter.sh/discovery" = var.cluster_name
80- " Name" = var.cluster_name
81- }
82- }
83-
84- # EKS OIDC Identity Provider
85- resource "aws_iam_openid_connect_provider" "eks" {
86- client_id_list = [" sts.amazonaws.com" ]
87- thumbprint_list = [" 9e99a48a9960b14926bb7f3b02e22da2b0ab7280" ]
88- url = aws_eks_cluster. main . identity [0 ]. oidc [0 ]. issuer
89-
90- depends_on = [aws_eks_cluster . main ]
91- }
92-
93- resource "aws_ec2_tag" "cluster_sg_karpenter" {
94- resource_id = aws_eks_cluster. main . vpc_config [0 ]. cluster_security_group_id
95- key = " karpenter.sh/discovery"
96- value = var. cluster_name
97-
98- depends_on = [aws_eks_cluster . main ]
9999}
100100
101101resource "aws_eks_node_group" "main" {
102- for_each = var. node_groups
102+ for_each = var. node_groups
103+
103104 cluster_name = aws_eks_cluster. main . name
104105 node_group_name = each. key
105106 node_role_arn = aws_iam_role. node . arn
106- subnet_ids = var. node_subnet_ids # Changed from var. subnet_ids
107-
107+ subnet_ids = var. subnet_ids
108+
108109 scaling_config {
109110 desired_size = each. value . scaling_config . desired_size
110111 max_size = each. value . scaling_config . max_size
@@ -116,24 +117,25 @@ resource "aws_eks_node_group" "main" {
116117 }
117118
118119 depends_on = [
119- aws_eks_cluster . main ,
120- aws_iam_role . node ,
121- aws_iam_role_policy_attachment . node_policy
120+ aws_iam_role_policy_attachment . node_policy ,
121+ aws_eks_cluster . main
122122 ]
123123}
124124
125125# Karpenter Node Instance Profile (reuse existing node role)
126126resource "aws_iam_instance_profile" "karpenter_node" {
127- name = " KarpenterNodeInstanceProfile- ${ var . cluster_name } "
127+ name = " KarpenterNodeInstanceProfile"
128128 role = aws_iam_role. node . name
129-
130- depends_on = [aws_iam_role . node ]
129+
130+ depends_on = [
131+ aws_iam_role . node
132+ ]
131133}
132134
133135# Karpenter Controller IAM Role
134136resource "aws_iam_role" "karpenter_controller" {
135137 name = " KarpenterControllerRole-${ var . cluster_name } "
136-
138+
137139 assume_role_policy = jsonencode ({
138140 Version = " 2012-10-17"
139141 Statement = [
@@ -152,10 +154,10 @@ resource "aws_iam_role" "karpenter_controller" {
152154 }
153155 ]
154156 })
155-
157+
156158 depends_on = [
157- aws_eks_cluster . main ,
158- aws_iam_openid_connect_provider . eks
159+ aws_iam_openid_connect_provider . eks ,
160+ aws_eks_cluster . main
159161 ]
160162}
161163
@@ -201,8 +203,8 @@ resource "aws_iam_role_policy" "karpenter_controller" {
201203 Resource = " *"
202204 },
203205 {
204- Effect = " Allow"
205- Action = " iam:CreateServiceLinkedRole"
206+ Effect = " Allow"
207+ Action = " iam:CreateServiceLinkedRole"
206208 Resource = " *"
207209 Condition = {
208210 StringEquals = {
@@ -212,12 +214,14 @@ resource "aws_iam_role_policy" "karpenter_controller" {
212214 }
213215 ]
214216 })
215-
216- depends_on = [aws_iam_role . karpenter_controller ]
217+
218+ depends_on = [
219+ aws_iam_role . karpenter_controller
220+ ]
217221}
218222
219223# SQS Queue for Spot Interruption Notifications
220224resource "aws_sqs_queue" "karpenter_interruption" {
221225 name = " karpenter-interruption-queue-${ var . cluster_name } "
222226 message_retention_seconds = 300
223- }
227+ }
0 commit comments