Skip to content

Commit 6a08e0f

Browse files
committed
Refactor Terraform configuration: parameterize AWS region, enhance EKS module with subnet handling, and update node group settings for improved resource management.
1 parent ebfae9d commit 6a08e0f

File tree

8 files changed

+164
-146
lines changed

8 files changed

+164
-146
lines changed

Terraform/1-provider.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
# Configure the AWS Provider
22
provider "aws" {
3-
region = "us-east-1"
3+
region = var.region
44
}

Terraform/3-main.tf

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,20 +9,20 @@ module "vpc" {
99
}
1010

1111
module "eks" {
12-
source = "./modules/eks"
13-
cluster_name = var.cluster_name
14-
cluster_version = var.cluster_version
15-
vpc_id = module.vpc.vpc_id
16-
cluster_subnet_ids = concat(module.vpc.private_subnet_ids, module.vpc.public_subnet_ids)
17-
node_subnet_ids = module.vpc.private_subnet_ids
18-
node_groups = var.node_groups
19-
depends_on = [module.vpc]
12+
source = "./modules/eks"
13+
cluster_name = var.cluster_name
14+
cluster_version = var.cluster_version
15+
vpc_id = module.vpc.vpc_id
16+
subnet_ids = module.vpc.private_subnet_ids
17+
node_groups = var.node_groups
18+
depends_on = [ module.vpc ]
2019
}
20+
2121
resource "aws_eks_addon" "metrics_server" {
2222
cluster_name = module.eks.cluster_name
2323
addon_name = "metrics-server"
2424
addon_version = null
2525
resolve_conflicts_on_create = "OVERWRITE"
2626
resolve_conflicts_on_update = "OVERWRITE"
27-
depends_on = [module.eks]
27+
depends_on = [ module.eks ]
2828
}

Terraform/4-variables.tf

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
variable "region" {
2+
description = "AWS region"
3+
type = string
4+
default = "us-east-1"
5+
}
6+
17
variable "vpc_cidr" {
28
description = "CIDR Block for VPC"
39
type = string
@@ -47,6 +53,7 @@ variable "node_groups" {
4753
max_size = number
4854
min_size = number
4955
})
56+
ssh_key_name = string
5057
}))
5158

5259
default = {
@@ -58,6 +65,7 @@ variable "node_groups" {
5865
max_size = 3
5966
min_size = 1
6067
}
68+
ssh_key_name = "MyPairKey"
6169
}
6270
}
6371
}

Terraform/5-outputs.tf

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
output "region" {
2+
description = "AWS region"
3+
value = var.region
4+
}
5+
16
output "vpc_id" {
27
description = "VPC ID"
38
value = module.vpc.vpc_id

Terraform/modules/eks/main.tf

Lines changed: 70 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,53 @@
11
data "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+
348
resource "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" {
2268
resource "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

2973
resource "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" {
4590
resource "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

101101
resource "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)
126126
resource "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
134136
resource "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
220224
resource "aws_sqs_queue" "karpenter_interruption" {
221225
name = "karpenter-interruption-queue-${var.cluster_name}"
222226
message_retention_seconds = 300
223-
}
227+
}

Terraform/modules/eks/variables.tf

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,32 @@
11
variable "cluster_name" {
2-
description = "Name of the EKS cluster"
3-
type = string
2+
description = "Name of the EKS cluster"
3+
type = string
44
}
55

66
variable "cluster_version" {
7-
description = "Kubernetes version"
8-
type = string
7+
description = "Kubernetes version"
8+
type = string
99
}
1010

1111
variable "vpc_id" {
1212
description = "VPC ID"
1313
type = string
1414
}
1515

16-
variable "cluster_subnet_ids" {
17-
description = "List of subnet IDs for EKS cluster (public + private)"
18-
type = list(string)
16+
variable "subnet_ids" {
17+
description = "Subnets IDS"
18+
type = list(string)
1919
}
2020

21-
variable "node_subnet_ids" {
22-
description = "List of subnet IDs for EKS node groups (private only)"
23-
type = list(string)
24-
}
2521
variable "node_groups" {
26-
description = "EKS node groups configuration"
27-
type = map(object({
22+
description = "EKS node groups configuration"
23+
type = map(object({
2824
instance_types = list(string)
2925
capacity_type = string
3026
scaling_config = object({
3127
desired_size = number
3228
max_size = number
33-
min_size = number
29+
min_size = number
3430
})
3531
}))
3632
}

0 commit comments

Comments
 (0)