AWS에서 NLB를 Terraform으로 구성하기 : 트래픽 분산

y001·2025년 3월 30일
0
post-thumbnail

시작하며

이전 글까지의 실습으로 우리는 VPC 내부에 퍼블릭/프라이빗 서브넷을 구성하고, 각각의 서브넷에 EC2 인스턴스를 배포했다. 이번 글에서는 외부 트래픽을 효율적으로 분산 처리하기 위한 로드 밸런서, ALB(Application Load Balancer)NLB(Network Load Balancer)를 Terraform으로 구성한다.

ALB와 NLB는 성격이 다르기 때문에, 실습 목적과 아키텍처 상황에 맞춰 선택적으로 구성할 수 있다. 이번 실습에서는 퍼블릭 서브넷에 위치한 EC2들을 대상으로 NLB를 구성한다.


목표 아키텍처

  • 퍼블릭 서브넷에 위치한 EC2 인스턴스 2개
  • NLB(Network Load Balancer) 1개
  • NLB Target Group에 EC2 인스턴스 등록
  • TCP 80 포트에 대한 Listener 구성


1. NLB용 Target Group 설정

resource "aws_lb_target_group" "MyNLBtargetGroup" {
  name     = "MyNLBtargetGroup"
  port     = 80
  protocol = "TCP"
  vpc_id   = aws_vpc.MyVPC07.id
}

주의: NLB는 TCP 기반이므로 protocol은 반드시 "TCP"로 설정해야 함. ALB는 HTTP 또는 HTTPS를 사용한다.


2. EC2 인스턴스를 Target Group에 등록

resource "aws_lb_target_group_attachment" "MyWeb2Attachment" {
  target_group_arn = aws_lb_target_group.MyNLBtargetGroup.arn
  target_id        = aws_instance.MyWeb2.id
}

resource "aws_lb_target_group_attachment" "MyWeb21Attachment" {
  target_group_arn = aws_lb_target_group.MyNLBtargetGroup.arn
  target_id        = aws_instance.MyWeb21.id
}

주의: target_id에는 instance.id를 사용하고, network interface ID가 아님.


3. NLB 생성

resource "aws_lb" "MyNLB" {
  name               = "MyNLB"
  internal           = false
  load_balancer_type = "network"
  subnets            = [aws_subnet.MyPublic2Subnet.id]

  enable_deletion_protection = false
}

주의: security_groups 속성은 NLB에서는 사용하지 않음. ALB에서만 사용 가능함.


4. NLB Listener 설정

resource "aws_lb_listener" "MyNLBListener" {
  load_balancer_arn = aws_lb.MyNLB.arn
  port              = 80
  protocol          = "TCP"

  default_action {
    type             = "forward"
    target_group_arn = aws_lb_target_group.MyNLBtargetGroup.arn
  }
}

테스트

로드밸런서의 DNS 이름은 Terraform output을 통해 확인할 수 있음:

output "nlb_dns_name" {
  value = aws_lb.MyNLB.dns_name
}

브라우저에서 해당 DNS에 접속하면, 각각의 EC2 인스턴스에서 띄운 웹 페이지가 라운드로빈 방식으로 반환된다.


마무리하며

이번 글에서는 퍼블릭 서브넷에 배치된 EC2 인스턴스 앞단에 NLB를 구성하고, 외부 트래픽을 분산 처리하는 실습을 진행했다. 실습 중에는 다음 사항을 유의해야 한다:

  • NLB는 TCP 기반이며, ALB처럼 Layer 7의 기능은 제공하지 않음
  • Security Group은 ALB에만 적용됨. NLB에는 적용하지 않음
  • Target Group에 EC2 등록 시 instance.id를 사용할 것

0개의 댓글