Ssoon
[T101-2주차] 02 왜 Terraform 인가? - (7) 로드밸런서 배포 본문
CloudNet@ 팀의 가시다님이 진행하는 Terraform 101 Study 2주차 정리입니다. |
aws_lb 리소스 사용하여 ALB 작성
resource "aws_lb" "ssoon_alb" {
name = "T101_Ssoon_alb"
load_balancer_type = "application"
subnets = [aws_subnet.ssoon_subnet1.id, aws_subnet.ssoon_subnet2.id]
security_groups = [aws_security_group.ssoon_sg.id]
tags = {
Name = "T101_Ssoon_alb"
}
}
output "ssoon_alb_dns" {
value = aws_lb.ssoon_alb.dns_name
description = "The DNS Address of the ALB"
}
aws_lb_listener 리소스 사용하여 ALB 리스너 정의
resource "aws_lb_listener" "ssoon_http" {
load_balancer_arn = aws_lb.ssoon_alb.arn
port = 80
protocol = "HTTP"
# By default, return a simple 404 page
default_action {
type = "fixed-response"
fixed_response {
content_type = "text/plain"
message_body = "404: page not found - T101 Study"
status_code = 404
}
}
}
output "ssoon_alb_dns" {
value = aws_lb.ssoon_alb.dns_name
description = "The DNS Address of the ALB"
}
80 포트 수신 / HTTP 를 protocol 로 사용 / listener 규칙과 일치하지 않으면 응답으로 404 페이지 보냄.
aws_lb_target_group 리소스 사용하여 asg의 대상 그룹을 생성
resource "aws_lb_target_group" "ssoon_alb_tg" {
name = "T101-Ssoon-alb-tg"
port = 80
protocol = "HTTP"
vpc_id = aws_vpc.ssoon_vpc.id
health_check {
path = "/"
protocol = "HTTP"
matcher = "200-299"
interval = 5
timeout = 3
healthy_threshold = 2
unhealthy_threshold = 2
}
}
각 Instance 에 주기적으로 HTTP 요청을 전송하여 상태 점검
구성괸 matcher 와 일치하는 응답을 반환하는 경우에만 Instance 를 'healthy' 로 간주
Instance 가 다운되거나 응답하지 않으면 'unhealthy' 로 표시되고 Traget Group 은 사용자가 받는 지장을 최소화하기 위해 트래픽 전송을 중지
terraform state list 를 통해 배포된 리소스 확인
ASG 와 ALB 통합
- "aws_autoscaling_group" 리소스에서
- "target_group_name" 인수 설정 -> 새 Target Group 지정
- "health_check_type" -> ELB 로 설정
- ASG 가 "Target Group" 의 상태 확인을 하여 Instance 가 정상인지 여부를 판별하고 자동으로 Instance 교체
resource "aws_autoscaling_group" "ssoon_asg" {
name = "ssoon_asg"
launch_configuration = aws_launch_configuration.ssoon_lauch_config.name
vpc_zone_identifier = [aws_subnet.ssoon_subnet1.id, aws_subnet.ssoon_subnet2.id]
min_size = 2
max_size = 5
health_check_type = "ELB"
target_group_arns = [aws_lb_target_group.ssoon_alb_tg.arn]
tag {
key = "Name"
value = "T101_Ssoon_asg"
propagate_at_launch = true
}
}
aws_lb_listener_rule 리소스 사용하여 리스너 규칙을 생성하고 모두 연결
- 모든 경로("*") 일치하는 요청을 ASG 가 포함된 Target Group 으로 보내는 ("forward") 리스너 규칙을 추가
resource "aws_lb_listener_rule" "ssoon_alb_rule" {
listener_arn = aws_lb_listener.ssoon_http.arn
priority = 100
condition {
path_pattern {
values = ["*"]
}
}
action {
type = "forward"
target_group_arn = aws_lb_target_group.ssoon_alb_tg.arn
}
}
terraform state list 를 통해 배포된 리소스 확인
ALB DNS주소로 curl 접속 확인
'Terraform 101 Study' 카테고리의 다른 글
[T101-2주차] 03 테라폼 상태 관리하기 - (2) 상태파일공유 (0) | 2022.10.28 |
---|---|
[T101-2주차] 03 테라폼 상태 관리하기 - (1) 테러폼상태란? (0) | 2022.10.27 |
[T101-2주차] VPC + 보안그룹 + EC2 배포 (0) | 2022.10.25 |
최고의(?) 클라우드 인프라 다이어그램 Brainboard (1) | 2022.10.25 |
[T101-2주차] 02 왜 Terraform 인가? - (6) 웹 서버 클러스터 배포 (0) | 2022.10.18 |
Comments