후니의 IT인프라 사전
[T101 스터디] 네이버 클라우드 - Auto Scaling 및 LB 배포 본문
[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 : 타겟으로 지정할 인스턴스를 규정
'프로젝트&&스터디 > Terraform 스터디 [T101]' 카테고리의 다른 글
[Terraform 101] 테라폼 백엔드 (0) | 2022.12.12 |
---|---|
[T101 스터디] 네이버 클라우드 NKS 클러스터 구성하기 (0) | 2022.12.11 |
[T101 스터디] 네이버 클라우드 - VPC 환경의 단일 WebServer 배포 (0) | 2022.11.12 |
[T101 스터디] Terraform 활용해서 네이버 클라우드 다루기 - 준비 (0) | 2022.11.12 |
[T101 스터디] Terraform 개요 (0) | 2022.11.12 |