Application Load Balancer를 통한 이중화 네트워크 구성 (1)

Chori·2025년 1월 1일
0
post-thumbnail

스스로 구축하는 AWS 클라우드 인프라 - 기본편을 수강하며 AWS 인프라를 Terraform으로 작성한 내용입니다.


Target group 생성

  • Load Balancer는 트래픽을 받으면 리스너를 통해 Target group으로 전달
  • Target group은 Load Balancer를 통해 들어온 트래픽을 받을 대상
  • target_group.tf 파일을 생성하고 아래와 같이 작성
# Target group
resource "aws_vpclattice_target_group" "main" {
  name = "alb-public-tf-${var.vpc_name}"
  type = "INSTANCE"

  config {
    vpc_identifier = aws_vpc.main.id

    port = 80
    protocol = "HTTP"
    protocol_version = "HTTP1"

    health_check {
      enabled = true
      health_check_interval_seconds = 30
      health_check_timeout_seconds = 5
      protocol = "HTTP"
      path = "/"
      healthy_threshold_count = 5
      unhealthy_threshold_count = 2
      matcher {
        value = "200"
      }
    }
  }

  tags = {
    Name = "alb-public-tf-${var.vpc_name}"
  }
}

# Register targets with Target group
resource "aws_vpclattice_target_group_attachment" "public_ec2" {
  count = length(var.cidr_numeral_private)
  target_group_identifier = aws_vpclattice_target_group.main.id

  target {
    id = element(aws_instance.public_ec2.*.id, count.index)
  }
}
  • 여기서 설정하는 프로토콜과 포트는 Application Load Balancer와 타겟이 되는 EC2 인스턴스 사이의 통신에 대한 것
  • EC2 인스턴스들이 지정된 프로토콜과 포트로 오는 요청만 받아들이게 됨
  • Application Load Balancer는 Health Check를 통해 타겟이 되는 인스턴스의 상태가 정상적인지 지속적으로 확인

Application Load Balancer 생성

Security group 만들기

  • Application Load Balancer가 타겟이 되는 인스턴스와 통신할 때 Security group이 사용됨
  • security_group.tf 파일에 아래 내용 추가
# Security group for ALB
resource "aws_security_group" "alb_public_sg" {
  name = "alb-public-sg"
  description = "Security group for alb"
  vpc_id = aws_vpc.main.id

  tags = {
    Name = "alb-public-sg"
  }
}

# Inbound rule allowing HTTP for ALB
resource "aws_vpc_security_group_ingress_rule" "allow_http_for_alb" {
  security_group_id = aws_security_group.alb_public_sg.id
  cidr_ipv4 = "0.0.0.0/0"
  from_port = 80
  ip_protocol = "tcp"
  to_port = 80
}

# Outbound rule allowing all traffic for ALB
resource "aws_vpc_security_group_egress_rule" "allow_all_outbound_traffic_for_alb" {
  security_group_id = aws_security_group.alb_public_sg.id
  cidr_ipv4 = "0.0.0.0/0"
  ip_protocol = "-1"
}

Application Load Balancer 만들기

resource "aws_lb" "alb_public" {
  name = "alb-public"
  load_balancer_type = "application"
  internal = false
  ip_address_type = "ipv4"
  
  # Indicate which subnet in the availability zone will receive traffic
  dynamic "subnet_mapping" {
    for_each = toset(aws_subnet.public)
    content {
      subnet_id = subnet_mapping.value.id
    }
  }

  security_groups = [aws_security_group.alb_public_sg.id]
}

resource "aws_lb_listener" "alb_public_listener" {
  load_balancer_arn = aws_lb.alb_public.arn
  port = 80
  protocol = "HTTP"
  
  default_action {
    type = "forward"
    target_group_arn = aws_lb_target_group.alb_public_tg.arn
  }

  tags = {
    Name = "alb-public"
  }
}
  • 리스너에서 설정하는 프로토콜과 포트는 외부 또는 클라이언트와 Application Load Balancer 사이의 통신에 대한 것
profile
전부인 것처럼, 전부가 아닌 것처럼

0개의 댓글