Ssoon

[T101-2주차] 02 왜 Terraform 인가? - (7) 로드밸런서 배포 본문

Terraform 101 Study

[T101-2주차] 02 왜 Terraform 인가? - (7) 로드밸런서 배포

구구달스 2022. 10. 26. 01:28
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 접속 확인

Comments