Load Balancer 생성

이eun·2025년 1월 3일

Load Balancer는 여러 인스턴스에 트래픽을 분배해주기 위해서 반드시 필요한 리소스이다. EC2 위에 올라가 있는 대부분의 서비스는 LB 앞 단에 두는 것이 보통인데, LB의 경우에는 설정할 것이 상당히 많아 코드로 한 번 정리해놓으면 편리하게 생성/관리할 수 있다.

LB 역할을 하는 것이 Nginx 혹은 HAProxy, Apache 등 이 있었다.

Load Balancer는 ALB/NLB 선택해서 생성하면 된다.

  • ALB(Application Load Balancer): Layer7 로드밸런서로 Security Group으로 접근 제어가 가능하며, 특정 URI 별로 라우팅을 할 수 있다. Redirecting을 할 수 있고 path routing을 할 수 있는 등 다양한 기능을 제공한다.
    트래픽 한계가 있는 형태로 만들어져 있는 나만의 고유 영역을 할당받는 정도이다. 성능이 정해져 있고 ip가 고정되어 있지 않다. HAProxy와 거의 비슷한 역할을 한다.
resource "aws_lb" "test" {
  name               = "test-lb-tf"
  internal           = false
  load_balancer_type = "application"
  security_groups    = [aws_security_group.lb_sg.id]
  subnets            = [for subnet in aws_subnet.public : subnet.id]

  enable_deletion_protection = true

  access_logs {
    bucket  = aws_s3_bucket.lb_logs.id
    prefix  = "test-lb"
    enabled = true
  }

  tags = {
    Environment = "production"
  }
}
  • NLB(Network Load Balancer): Layer4 로드밸런서로, ALB보다 전송 속도는 빠르다. 성능이 크며 고정 ip를 지원한다. 대형 Pool이다.
    엄청나게 거대한 어떤 것이 할당받는 것이다. 성능상으로는 더 우위에 있다. 하지만 기능상으로는 약하다. Security Group으로 과거에는 접근제어가 되지 않았지만, 현재는 가능합니다.

    • LoadBalancer listener
    • Target Group과 ec2와 연결 필요
      • https(443) : redirect to instance
      • http(80) : redirect to 443
    • Route53 Record
      • A record for ELB
resource "aws_lb" "test" {
  name               = "test-lb-tf"
  internal           = false
  load_balancer_type = "network"
  subnets            = [for subnet in aws_subnet.public : subnet.id]

  enable_deletion_protection = true

  tags = {
    Environment = "production"
  }
}

0개의 댓글