후니의 IT인프라 사전

[T101 스터디] 네이버 클라우드 - Auto Scaling 및 LB 배포 본문

프로젝트&&스터디/Terraform 스터디 [T101]

[T101 스터디] 네이버 클라우드 - Auto Scaling 및 LB 배포

james_janghun 2022. 11. 12. 17:12

구조 파악

완성된 code는 github에서 확인할 수 있다.

 

사전 작업

이전글인 단일 웹서버 배포에서 구성했던 VPC, Subnet, ACG를 사용한다는 전제하에 작업을 진행합니다.

해당 리소스들이 규정되어있지 않다면 이전글을 참조해주기 바랍니다.

 

Auto Scaling 구성

auto scaling은 기본적으로 launch configuration을 먼저 규정하여 해당 configuration의 이미지를 통해서 scaling 작업을 진행합니다. 따라서 autoscaling.tf 파일을 구성할 내용을 작성해보겠습니다.

 

1. launch_configuration 생성

resource "ncloud_launch_configuration" "lc" {
  name = "my-lc"
  server_image_product_code = "SW.VSVR.OS.LNX64.CNTOS.0703.B050"
}

- ncloud_launch_configuration 

  name : launch configuration의 이름을 규정

  server_image_product_code : 사용할 이미지 정보 규정  (이미지 정보는 이 링크에서 자세하게 확인 가능합니다)

 

 

2. ASG(Auto Scaling Group) 생성

resource "ncloud_auto_scaling_group" "auto" {
  access_control_group_no_list = [ncloud_vpc.example.default_access_control_group_no]
  subnet_no = ncloud_subnet.vpc.subnet_no
  launch_configuration_no = ncloud_launch_configuration.lc.launch_configuration_no
  min_size = 2
  max_size = 4
}

- ncloud_auto_scaling_group

  access_control_group_no_list : 사용할 ACG 규정

  subnet_no : 위치할 subnet 규정

  launch_configuration_no : launch_configuration 설정

  min_size : 최소 인스턴스 갯수

  max_size : 최대 인스턴스 갯수

 

Load Balancer 구성

1. LB 전용 private subnet 구성

네이버 클라우드에서는 LB 전용으로 서브넷을 두도록 설정하고 있으며 해당 서브넷은 private에 위치하도록 해야합니다.

resource "ncloud_subnet" "lb" {
  vpc_no         = ncloud_vpc.vpc.id
  subnet         = "10.0.2.0/24"
  zone           = "KR-2"
  network_acl_no = ncloud_vpc.vpc.default_network_acl_no
  subnet_type    = "PRIVATE"
  name           = "subnet-02"
  usage_type     = "LOADB"
}

- ncloud_subnet

  vpc_no : 어떤 vpc의 서브넷인지 vpc를 규정

  subnet : 서브넷마스크 규정

  zone : 서브넷이 위치하는 zone을 규정 (zone은 AWS의 AZ와 동일)

  network_acl_no : 사용할 acl 규정

  subnet_type : 로드밸런서는 private에 규정해야함

  name : subnet 이름

  usage_type  : LOADB(로드밸런서) / GEN(기본)

 

 

2. ALB(Application Load Balancer) 구성

resource "ncloud_lb" "test" {
  name = "tf-lb-test"
  network_type = "PUBLIC"
  type = "APPLICATION"
  subnet_no_list = [ncloud_subnet.lb.subnet_no]
}

- ncloud_lb

  name : lb의 이름을 규정

  network_type : lb의 네트워크 타입 규정

  type : 로드밸런서 타입을 규정하며 우리는 alb를 활용하므로 application을 규정

  subnet_no_list : LB가 위치하는 서브넷 정보 규정

 

 

3. listener 설정

resource "ncloud_lb_listener" "test" {
  load_balancer_no = ncloud_lb.test.id
  protocol         = "HTTP"
  port             = 80
  target_group_no  = ncloud_lb_target_group.test.id
}

- ncloud_lb_listener

  load_balancer_no : 로드밸런서 정보

  protocol : 리스닝 프로토콜 정보

  port : 리스닝 포트 정보

  target_group_no : 타겟 설정 기입

 

 

 

4. Target Group 지정

resource "ncloud_lb_target_group" "test" {
  name        = "tf-tg-test"
  target_type = "VSVR"
  vpc_no      = ncloud_vpc.vpc.vpc_no
  protocol    = "HTTP"
  port        = 80
  health_check {
    protocol       = "HTTP"
    port           = 80
    url_path       = "/"
    http_method    = "GET"
    cycle          = 30
    up_threshold   = 2
    down_threshold = 2
  }
  algorithm_type = "RR"
}

- ncloud_lb_target_group

  name: 타겟 그룹 이름

  target_type

  vpc_no : 위치할 vpc 지정

  protocol : 타겟 프로토콜

  port : 타겟 포트

  health_check : 헬스체크 설정

  algorithm_type  : 로드밸런서 알고리즘 (# RR : Round Robin / SIPHS : Source IP Hash / LC : Least Connetion / MH : Maglev Hash)

 

 

5. Target 연결

해당 연결은 모든 구성이 완료되고 추가적으로 기입해 실행해야한다.

resource "ncloud_lb_target_group_attachment" "test" {
  for_each = toset(ncloud_auto_scaling_group.auto.server_instance_no_list)
  target_group_no = ncloud_lb_target_group.test.target_group_no
  target_no_list = [each.value]
}

 

- ncloud_lb_target_group_attachment

  target_group_no : target group을 id값으로 지정

  target_no_list : 타겟으로 지정할 인스턴스를 규정