Terraform

Terraform _ 로드밸런스

우당탕탕인생기 2023. 9. 30. 10:54

 

웹 서비스에서 중요한 부분을 차지하고 있는 로드밸런서을 terrafrom 을 통해 설정해보겠습니다.

 

시나리오는 80port로 들어오는것을 모두 443포트로 보내는 것이다.

또한 해당 도메인으로 접속할 수 있도록 설정한다.

 

대상그룹 설정

 

우선 80port의 대상그룹을 설정하고 ec2에 연결하는 작업이 필요하다.

# 대상그룹 설정
resource "aws_lb_target_group" "my80" {
    name = "my80"
    port = 80
    protocol = "HTTP"
    vpc_id = aws_vpc.my_vpc.id
}

# 로드밸런서 ec2 연결
resource "aws_lb_target_group_attachment" "attachment_ec2"{
    target_group_arn = aws_lb_target_group.my80.arn
    target_id = aws_instance.app-ec2.id
    port = 80
}

 

 

로드밸런서 그룹 생성

로드밸런서 그룹을 생성하고 서브넷과 보안그룹을 설정한다.

 

다음으로는 리스너를 추가하는데 사전에 설정한 대상그룹을 선택하고 리다이렉트로 443포트로 가게한다.

## 로드밸런서
resource "aws_alb" "my-alb"{
    name = "my-alb"
    internal = false
    load_balancer_type = "application"
    security_groups = [aws_security_group.alb-sg.id]
    subnets = [aws_subnet.my-public-subnet-a.id , aws_my.sjb-public-subnet-c.id]
}

## 리스너 추가
# 리스너 
resource "aws_lb_listener" "my-alb"{
    load_balancer_arn = aws_alb.my-alb.arn
    port = 80
    protocol = "HTTP"
    default_action {
      type = "redirect"
      redirect {
        protocol = "HTTPS"
        port = "443"
        status_code = "HTTP_301"
      }
    target_group_arn = aws_lb_target_group.my80.arn  # 사전에 설정한 80 포트 대상그룹
    }
}

 

 

로드밸런스 규칙 추가

로드밸런스 규칙을 통해 80포트로 들어오는것들은 해당 도메인으로 접속이 가능하도록 추가한다.

## 로드밸런서 규칙 추가
resource "aws_lb_listener_rule" "my-rule2" {
    listener_arn = aws_lb_listener.my-alb.arn

    action {
      type = "forward"
      target_group_arn = aws_lb_target_group.my80.arn
    }
    condition {
      host_header {
        values = ["www.mydns.link"]
      }
    }
}

 

 

이외에서 다양한 포트를 추가하고 로드밸런스를  설정하면된다.

 

로드밸런서 코드 작성은 생각보다 복잡하여 조금 더 공부가 필요해보인다!