Skip to content

Commit 30c099a

Browse files
committed
Refactoring terraform laravel-eks
1 parent 650546f commit 30c099a

File tree

91 files changed

+21796
-848
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

91 files changed

+21796
-848
lines changed

terraform/environment/providers/aws/infra/resources/budget/budgets.tf

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,9 @@ resource "aws_budgets_budget" "monthly_forcasted" {
3939
}
4040

4141
resource "aws_budgets_budget" "monthly_budget" {
42-
name = "monthly_budget_300"
42+
name = "monthly_budget_150"
4343
budget_type = "COST"
44-
limit_amount = "300"
44+
limit_amount = "150"
4545
limit_unit = "USD"
4646
time_unit = "MONTHLY"
4747
time_period_start = "2022-01-01_00:00"

terraform/environment/providers/aws/infra/resources/budget/main.tf

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,15 @@ locals {
2020
# --------------------------------------------------------------------------
2121
provider "aws" {
2222
region = var.aws_region
23+
24+
## version >= 3.63.0, < 4.0
25+
shared_credentials_file = "$HOME/.aws/devopscorner/credentials"
26+
profile = "devopscorner"
27+
28+
## version >= 4.0
29+
# shared_config_files = ["$HOME/.aws/devopscorner/config"]
30+
# shared_credentials_files = ["$HOME/.aws/devopscorner/credentials"]
31+
# profile = "devopscorner"
2332
}
2433

2534
# --------------------------------------------------------------------------
Lines changed: 262 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,262 @@
1+
# ==========================================================================
2+
# Resources: EKS / autoscale-node-devops.tf (EKS Autoscale Configuration)
3+
# --------------------------------------------------------------------------
4+
# Description
5+
# --------------------------------------------------------------------------
6+
# - Node VPC Subnet
7+
# - Node Scaling
8+
# - Node Tagging
9+
# ==========================================================================
10+
11+
#============================================
12+
# NODE GROUP - DEVOPSCORNER MONITORING & TOOLS
13+
#============================================
14+
locals {
15+
#for tagging
16+
Environment_devops = "PROD"
17+
Name_monitoring = "EKS-1.23-DEVOPSCORNER-MONITORING"
18+
Type_devops = "PRODUCTS"
19+
ProductName_monitoring = "EKS-DEVOPSCORNER"
20+
ProductGroup_monitoring = "MONITORING-EKS-DEVOPSCORNER"
21+
Department_devops = "DEVOPS"
22+
DepartmentGroup_devops = "PROD-DEVOPS"
23+
ResourceGroup_devops = "PROD-EKS-DEVOPSCORNER"
24+
Services_monitoring = "MONITORING"
25+
}
26+
27+
# --------------------------------------------------------------------------
28+
# Autoscaling Schedule Node
29+
# --------------------------------------------------------------------------
30+
# References:
31+
# - https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/autoscaling_schedule
32+
# - https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/autoscaling_attachment
33+
34+
## Scale Down
35+
resource "aws_autoscaling_schedule" "scale_down_devops_monitoring" {
36+
autoscaling_group_name = aws_eks_node_group.devops["monitoring"].resources[0].autoscaling_groups[0].name
37+
desired_capacity = 1
38+
max_size = 1
39+
min_size = 1
40+
recurrence = "0 13,16 * * *"
41+
scheduled_action_name = "scale_down"
42+
# start_time = "2022-03-25T13:00:00Z"
43+
}
44+
45+
## Scale Up
46+
resource "aws_autoscaling_schedule" "scale_up_devops_monitoring" {
47+
autoscaling_group_name = aws_eks_node_group.devops["monitoring"].resources[0].autoscaling_groups[0].name
48+
desired_capacity = 3
49+
max_size = 5
50+
min_size = 1
51+
recurrence = "0 0 * * MON-FRI"
52+
scheduled_action_name = "scale_up"
53+
# start_time = "2022-03-28T00:00:00Z"
54+
}
55+
56+
# --------------------------------------------------------------------------
57+
# Autoscaling Tag
58+
# --------------------------------------------------------------------------
59+
# Monitoring
60+
resource "aws_autoscaling_group_tag" "Environment_group_tag_devops_monitoring" {
61+
for_each = toset(
62+
[for asg in flatten(
63+
[for resources in aws_eks_node_group.devops["monitoring"].resources : resources.autoscaling_groups]
64+
) : asg.name]
65+
)
66+
autoscaling_group_name = each.value
67+
tag {
68+
key = "Environment"
69+
value = local.Environment_devops
70+
propagate_at_launch = true
71+
}
72+
}
73+
74+
resource "aws_autoscaling_group_tag" "Name_group_tag_devops_monitoring" {
75+
for_each = toset(
76+
[for asg in flatten(
77+
[for resources in aws_eks_node_group.devops["monitoring"].resources : resources.autoscaling_groups]
78+
) : asg.name]
79+
)
80+
autoscaling_group_name = each.value
81+
tag {
82+
key = "Name"
83+
value = local.Name_monitoring
84+
propagate_at_launch = true
85+
}
86+
}
87+
88+
resource "aws_autoscaling_group_tag" "Type_group_tag_devops_monitoring" {
89+
for_each = toset(
90+
[for asg in flatten(
91+
[for resources in aws_eks_node_group.devops["monitoring"].resources : resources.autoscaling_groups]
92+
) : asg.name]
93+
)
94+
autoscaling_group_name = each.value
95+
tag {
96+
key = "Type"
97+
value = local.Type_devops
98+
propagate_at_launch = true
99+
}
100+
}
101+
102+
resource "aws_autoscaling_group_tag" "ProductName_group_tag_devops_monitoring" {
103+
for_each = toset(
104+
[for asg in flatten(
105+
[for resources in aws_eks_node_group.devops["monitoring"].resources : resources.autoscaling_groups]
106+
) : asg.name]
107+
)
108+
autoscaling_group_name = each.value
109+
tag {
110+
key = "ProductName"
111+
value = local.ProductName_monitoring
112+
propagate_at_launch = true
113+
}
114+
}
115+
116+
resource "aws_autoscaling_group_tag" "ProductGroup_group_tag_devops_monitoring" {
117+
for_each = toset(
118+
[for asg in flatten(
119+
[for resources in aws_eks_node_group.devops["monitoring"].resources : resources.autoscaling_groups]
120+
) : asg.name]
121+
)
122+
autoscaling_group_name = each.value
123+
tag {
124+
key = "ProductGroup"
125+
value = local.ProductGroup_monitoring
126+
propagate_at_launch = true
127+
}
128+
}
129+
130+
resource "aws_autoscaling_group_tag" "Department_group_tag_devops_monitoring" {
131+
for_each = toset(
132+
[for asg in flatten(
133+
[for resources in aws_eks_node_group.devops["monitoring"].resources : resources.autoscaling_groups]
134+
) : asg.name]
135+
)
136+
autoscaling_group_name = each.value
137+
tag {
138+
key = "Department"
139+
value = local.Department_devops
140+
propagate_at_launch = true
141+
}
142+
}
143+
144+
resource "aws_autoscaling_group_tag" "DepartmentGroup_group_tag_devops_monitoring" {
145+
for_each = toset(
146+
[for asg in flatten(
147+
[for resources in aws_eks_node_group.devops["monitoring"].resources : resources.autoscaling_groups]
148+
) : asg.name]
149+
)
150+
autoscaling_group_name = each.value
151+
tag {
152+
key = "DepartmentGroup"
153+
value = local.DepartmentGroup_devops
154+
propagate_at_launch = true
155+
}
156+
}
157+
158+
resource "aws_autoscaling_group_tag" "ResourceGroup_group_tag_devops_monitoring" {
159+
for_each = toset(
160+
[for asg in flatten(
161+
[for resources in aws_eks_node_group.devops["monitoring"].resources : resources.autoscaling_groups]
162+
) : asg.name]
163+
)
164+
autoscaling_group_name = each.value
165+
tag {
166+
key = "ResourceGroup"
167+
value = local.ResourceGroup_devops
168+
propagate_at_launch = true
169+
}
170+
}
171+
172+
resource "aws_autoscaling_group_tag" "Services_group_tag_devops_monitoring" {
173+
for_each = toset(
174+
[for asg in flatten(
175+
[for resources in aws_eks_node_group.devops["monitoring"].resources : resources.autoscaling_groups]
176+
) : asg.name]
177+
)
178+
autoscaling_group_name = each.value
179+
tag {
180+
key = "Service"
181+
value = local.Services_monitoring
182+
propagate_at_launch = true
183+
}
184+
}
185+
186+
// Mandatory TAGS for Cluster-Autoscaller
187+
resource "aws_autoscaling_group_tag" "Clustername_group_tag_devops_monitoring" {
188+
for_each = toset(
189+
[for asg in flatten(
190+
[for resources in aws_eks_node_group.devops["monitoring"].resources : resources.autoscaling_groups]
191+
) : asg.name]
192+
)
193+
autoscaling_group_name = each.value
194+
tag {
195+
key = "ClusterName"
196+
value = "${var.eks_cluster_name}-${var.env[local.env]}"
197+
propagate_at_launch = true
198+
}
199+
}
200+
201+
resource "aws_autoscaling_group_tag" "Autoscaler_ownership_group_tag_devops_monitoring" {
202+
for_each = toset(
203+
[for asg in flatten(
204+
[for resources in aws_eks_node_group.devops["monitoring"].resources : resources.autoscaling_groups]
205+
) : asg.name]
206+
)
207+
autoscaling_group_name = each.value
208+
tag {
209+
key = "k8s.io/cluster-autoscaler/${var.eks_cluster_name}-${var.env[local.env]}"
210+
value = "owned"
211+
propagate_at_launch = true
212+
}
213+
}
214+
215+
resource "aws_autoscaling_group_tag" "Autoscaler_enable_group_tag_devops_monitoring" {
216+
for_each = toset(
217+
[for asg in flatten(
218+
[for resources in aws_eks_node_group.devops["monitoring"].resources : resources.autoscaling_groups]
219+
) : asg.name]
220+
)
221+
autoscaling_group_name = each.value
222+
tag {
223+
key = "k8s.io/cluster-autoscaler/enabled"
224+
value = "true"
225+
propagate_at_launch = true
226+
}
227+
}
228+
229+
resource "aws_autoscaling_group_tag" "Terraform_group_tag_devops_monitoring" {
230+
for_each = toset(
231+
[for asg in flatten(
232+
[for resources in aws_eks_node_group.devops["monitoring"].resources : resources.autoscaling_groups]
233+
) : asg.name]
234+
)
235+
autoscaling_group_name = each.value
236+
tag {
237+
key = "Terraform"
238+
value = "true"
239+
propagate_at_launch = true
240+
}
241+
}
242+
243+
# --------------------------------------------------------------------------
244+
# Autoscaling Output
245+
# --------------------------------------------------------------------------
246+
## Scale Down ##
247+
output "eks_node_scale_down_devops_monitoring" {
248+
value = aws_autoscaling_schedule.scale_down_devops_monitoring.arn
249+
}
250+
251+
## Scale Up ##
252+
output "eks_node_scale_up_devops_monitoring" {
253+
value = aws_autoscaling_schedule.scale_up_devops_monitoring.arn
254+
}
255+
256+
# --------------------------------------------------------------------------
257+
# Autoscaling Node Group Output
258+
# --------------------------------------------------------------------------
259+
## Monitoring Output #
260+
output "eks_node_asg_group_devops_monitoring" {
261+
value = aws_eks_node_group.devops["monitoring"].resources[0].autoscaling_groups[0].name
262+
}

terraform/environment/providers/aws/infra/resources/eks/autoscale-node-devops.tf.example

Lines changed: 59 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@
1414
locals {
1515
#for tagging
1616
Environment_devops = "STG"
17-
Name_monitoring = "EKS-1.22-DEVOPSCORNER-MONITORING"
18-
Name_tools = "EKS-1.22-DEVOPSCORNER-TOOLS"
17+
Name_monitoring = "EKS-1.23-DEVOPSCORNER-MONITORING"
18+
Name_tools = "EKS-1.23-DEVOPSCORNER-TOOLS"
1919
Type_devops = "PRODUCTS"
2020
ProductName_monitoring = "EKS-DEVOPSCORNER"
2121
ProductName_tools = "EKS-DEVOPSCORNER"
@@ -348,6 +348,63 @@ resource "aws_autoscaling_group_tag" "ClusterName_group_devops_tools" {
348348
}
349349
}
350350

351+
// Mandatory TAGS for Cluster-Autoscaller
352+
resource "aws_autoscaling_group_tag" "Clustername_group_tag_devops_tools" {
353+
for_each = toset(
354+
[for asg in flatten(
355+
[for resources in aws_eks_node_group.devops["tools"].resources : resources.autoscaling_groups]
356+
) : asg.name]
357+
)
358+
autoscaling_group_name = each.value
359+
tag {
360+
key = "ClusterName"
361+
value = "${var.eks_cluster_name}-${var.env[local.env]}"
362+
propagate_at_launch = true
363+
}
364+
}
365+
366+
resource "aws_autoscaling_group_tag" "Autoscaler_ownership_group_tag_devops_tools" {
367+
for_each = toset(
368+
[for asg in flatten(
369+
[for resources in aws_eks_node_group.devops["tools"].resources : resources.autoscaling_groups]
370+
) : asg.name]
371+
)
372+
autoscaling_group_name = each.value
373+
tag {
374+
key = "k8s.io/cluster-autoscaler/${var.eks_cluster_name}-${var.env[local.env]}"
375+
value = "owned"
376+
propagate_at_launch = true
377+
}
378+
}
379+
380+
resource "aws_autoscaling_group_tag" "Autoscaler_enable_group_tag_devops_tools" {
381+
for_each = toset(
382+
[for asg in flatten(
383+
[for resources in aws_eks_node_group.devops["tools"].resources : resources.autoscaling_groups]
384+
) : asg.name]
385+
)
386+
autoscaling_group_name = each.value
387+
tag {
388+
key = "k8s.io/cluster-autoscaler/enabled"
389+
value = "true"
390+
propagate_at_launch = true
391+
}
392+
}
393+
394+
resource "aws_autoscaling_group_tag" "Terraform_group_tag_devops_tools" {
395+
for_each = toset(
396+
[for asg in flatten(
397+
[for resources in aws_eks_node_group.devops["tools"].resources : resources.autoscaling_groups]
398+
) : asg.name]
399+
)
400+
autoscaling_group_name = each.value
401+
tag {
402+
key = "Terraform"
403+
value = "true"
404+
propagate_at_launch = true
405+
}
406+
}
407+
351408
# --------------------------------------------------------------------------
352409
# Autoscaling Output
353410
# --------------------------------------------------------------------------

0 commit comments

Comments
 (0)