CloudFormation으로 NLB(Network Load Balancer) 구성하기

y001·2025년 3월 29일
post-thumbnail

시작하면서

– EC2 인스턴스를 Target Group으로 묶어 로드밸런싱하기

앞서 우리는 VPC07에 퍼블릭 서브넷을 만들고, 그 안에 MyWeb2, MyWeb3 두 개의 EC2 인스턴스를 배치했다.
이제는 이 두 인스턴스 앞단에 NLB(Network Load Balancer) 를 붙여서,
외부에서 하나의 IP만 가지고도 자동으로 트래픽을 분산할 수 있도록 구성해보자.


NLB란?

NLB는 AWS의 3가지 로드밸런서 중 하나로, TCP 수준에서 빠르고 가벼운 로드밸런싱을 제공한다.
특히 고성능, 정적 IP, 초당 수백만 요청 처리가 필요한 환경에 적합하다.

이번 실습에서는 EC2 인스턴스 두 개를 타겟으로 등록한 뒤,
퍼블릭 서브넷에 NLB를 구성해 외부에서 하나의 IP로 접속 가능한 구조를 만든다.


전체 구성 요약

이번 글에서 구성할 리소스는 다음과 같다:

  • VPC07 (10.1.0.0/16) 내부 구성
    • EC2 인스턴스 2개 (MyWeb2, MyWeb3)
    • 퍼블릭 서브넷 (10.1.1.0/24)
    • 보안 그룹 (80, 443, 22 포트 오픈)
    • NLB + Target Group + Listener (포트 80)


1. Target Group 생성

먼저 두 개의 EC2 인스턴스를 포함할 Target Group을 만든다.
타입은 instance, 포트는 80, 프로토콜은 TCP를 사용한다.

MyNLBTargetGroup:
  Type: AWS::ElasticLoadBalancingV2::TargetGroup
  DependsOn:
    - MyWeb2
    - MyWeb3
  Properties:
    Name: MyNLBTargetGroup
    Port: 80
    Protocol: TCP
    VpcId: !Ref MyVPC07
    TargetType: instance
    Targets:
      - Id: !Ref MyWeb2
        Port: 80
      - Id: !Ref MyWeb3
        Port: 80
    Tags:
      - Key: Name
        Value: MyNLBTargetGroup

DependsOn을 설정해 인스턴스가 먼저 만들어진 후 Target Group에 등록되도록 순서를 보장한다.


2. Network Load Balancer 생성

Target Group을 만든 후, 퍼블릭 서브넷에 NLB를 만든다.
스킴은 internet-facing으로 설정해 외부 인터넷에서 접근할 수 있게 한다.

MyNLB:
  Type: AWS::ElasticLoadBalancingV2::LoadBalancer
  DependsOn: MyNLBTargetGroup
  Properties:
    Type: network
    Scheme: internet-facing
    Subnets:
      - !Ref MyPublic2Subnet
    Tags:
      - Key: Name
        Value: MyNLB

3. Listener 설정

NLB는 단독으로 동작하지 않고, 요청을 처리하기 위한 Listener가 필요하다.
이번 구성에서는 포트 80에 대해 Target Group으로 트래픽을 전달하도록 한다.

MyNLBListener:
  Type: AWS::ElasticLoadBalancingV2::Listener
  DependsOn: MyNLBTargetGroup
  Properties:
    LoadBalancerArn: !Ref MyNLB
    Port: 80
    Protocol: TCP
    DefaultActions:
      - Type: forward
        TargetGroupArn: !Ref MyNLBTargetGroup

4. 동작 확인

CloudFormation 스택이 성공적으로 생성되면, EC2 → Load Balancer 메뉴로 이동해서
NLB의 DNS 이름을 복사하고 브라우저에 접속해보자.

예: http://<NLB_DNS>

MyWeb2와 MyWeb3가 반환하는 HTML이 랜덤하게 출력되면, 로드밸런싱이 정상적으로 작동하는 것이다.

0개의 댓글