Ssoon
[5주차] 05 테라폼의 팁과 요령 (2) 조건문 - count 본문
CloudNet@ 팀의 가시다님이 진행하는 Terraform 101 Study 05주차 정리입니다.
✅ count Parameter를 사용한 조건문
✔ count 매개변수를 사용하면 기본 반복문을 수행할 수 있습니다.
📌 테라폼은 if문을 지원하지 않습니다. 그러나 count 매개변수의 특성을 사용하여 동일한 작업을 수행할 수 있습니다.
✔ Resource 에 count 설정
- count = 1 -> 해당 resource의 사본 하나를 얻습니다.
- count = 0 -> 해당 resource 는 만들어지지 않습니다.
✔ <CONDITION> ? <TRUE_VAL> : <FALSE_VAL> 형식의 조건 표현식을 통해
CONDITION에서 boolean 논리를 평가
- true -> TRUE_VAL 반환
- false -> FALSE_VAL 반환
❓ webserver-cluster module 에서 aws_autoscaling_schedule 리소스를 정의하고, 조건부로 일부 사용자에게는 module 를 생성해주고 나머지 사용자에게는 생성해주지 않는 방법 ?
1️⃣ module 의 autoscaling 사용 여부를 지정하는 데 사용할 Boolean 입력 변수를 추가합니다.
⛔ modules/services/webserver-cluster/variables.tf
variable "enable_autoscaling"
variable "enable_autoscaling" {
description = "If set to true, enable auto scaling"
type = bool
}
2️⃣ webserver-cluster module 을 업데이트합니다.
📌 conditional logic
👉 var.enable_autoscaling = true -> 각각의 aws_autoscaling_schedule 리소스에 대한 count 매개 변수가 1 로 설정 -> 리소스가 하나씩 생성됩니다.
👉 var.enable_autoscaling = false -> 각각의 aws_autoscaling_schedule 리소스에 대한 count 매개 변수가 0 로 설정 -> 어떤 리소스도 생성되지 않습니다.
⛔ modules/services/webserver-cluster/main.tf
resource "aws_autoscaling_schedule" "scale_out_during_business_hours" {
count = var.enable_autoscaling ? 1 : 0
scheduled_action_name = "${var.cluster_name}-scale-out-during-business-hours"
min_size = 2
max_size = 4
desired_capacity = 4
recurrence = "0 9 * * *"
autoscaling_group_name = aws_autoscaling_group.example.name
}
resource "aws_autoscaling_schedule" "scale_in_at_night" {
count = var.enable_autoscaling ? 1 : 0
scheduled_action_name = "${var.cluster_name}-scale-in-at-night"
min_size = 2
max_size = 2
desired_capacity = 2
recurrence = "0 17 * * *"
autoscaling_group_name = aws_autoscaling_group.example.name
}
3️⃣ enable_autoscaling 을 false 로 설정하여 autoscaling 을 비활성화합니다.
⛔ live/stage/services/webserver-cluster/main.tf
enable_autoscaling = false
module "webserver_cluster" {
source = "../../../../modules/services/webserver-cluster"
cluster_name = var.cluster_name
instance_type = "t2.micro"
min_size = 2
max_size = 2
enable_autoscaling = false
}
⛔ live/prod/services/webserver-cluster/main.tf
enable_autoscaling = true
module "webserver_cluster" {
source = "../../../modules/services/webserver-cluster"
cluster_name = "Ssoon-prod"
instance_type = "t2.micro"
min_size = 2
max_size = 2
enable_autoscaling = true
custom_tags = {
Owner = "team-Ssoon"
ManagedBy = "terraform"
}
}
🚩 Console 확인
enable_autoscaling = true
enable_autoscaling = false
❓ Boolean 값이 문자열 등의 더 복잡한 비교의 결과인 경우 ?
✅ webserver-cluster module의 일부로 CloudWatch 경보를 생성합니다.
✔ 특정 지표가 사전 정의된 임곗값을 초과하는 경우 이메일 등을 통해 알리도록 경보를 구성합니다.
⛔ modules/services/webserver-cluster/main.tf
👉 평균 CPU 사용률이 5분 동안 90 % 이상인 경우 발생하는 경보
namespace = "AWS/EC2"
metric_name = "CPUUtilization"
comparison_operator = "GreaterThanThreshold"
evaluation_periods = 1
period = 300
statistic = "Average"
threshold = 90
unit = "Percent"
resource "aws_cloudwatch_metric_alarm" "high_cpu_utilization" {
alarm_name = "${var.cluster_name}-high-cpu-utilization"
namespace = "AWS/EC2"
metric_name = "CPUUtilization"
dimensions = {
AutoScalingGroupName = aws_autoscaling_group.example.name
}
comparison_operator = "GreaterThanThreshold"
evaluation_periods = 1
period = 300
statistic = "Average"
threshold = 90
unit = "Percent"
}
❓ CPU Credit 은 t 인스턴스에만 적용되는데 var.instance_type 이 문자 't'로 시작하는 경우에만 알람을 생성하는 방법?
✅ CPU Credit 부족할 때 발생하는 알람을 추가합니다.
✔ 조건문을 사용합니다.
count = format("%.1s", var.instance_type) == "t" ? 1 : 0
✔ format 함수를 사용 var.instance_type 에서 1번째 문자만 추출합니다.
👉 첫번째 문자가 't'이면 count 을 1로 설정, 아니면 count 을 0으로 설정
⛔ modules/services/webserver-cluster/main.tf
resource "aws_cloudwatch_metric_alarm" "low_cpu_credit_balance" {
count = format("%.1s", var.instance_type) == "t" ? 1 : 0
alarm_name = "${var.cluster_name}-low-cpu-credit-balance"
namespace = "AWS/EC2"
metric_name = "CPUCreditBalance"
dimensions = {
AutoScalingGroupName = aws_autoscaling_group.example.name
}
comparison_operator = "LessThanThreshold"
evaluation_periods = 1
period = 300
statistic = "Minimum"
threshold = 10
unit = "Count"
}
🚩 Console 확인
'Terraform 101 Study' 카테고리의 다른 글
[6주차] 06 Terraform으로 Secret 관리 - Terraform과 함께 Secret 관리 도구 사용 (0) | 2022.11.22 |
---|---|
[6주차] 06 Terraform으로 Secret 관리 - Basic/Tools (0) | 2022.11.22 |
[5주차] 05 테라폼의 팁과 요령 (1) 반복문 - String Directive (0) | 2022.11.17 |
[5주차] 05 테라폼의 팁과 요령 (1) 반복문 - for expressions (0) | 2022.11.17 |
[5주차] 05 테라폼의 팁과 요령 (1) 반복문 - for_each (0) | 2022.11.15 |