반응형
Terraform을 활용한 Ncloud 인프라 구축하기
이번 글에서는 Terraform을 활용하여 네이버 클라우드(Ncloud) 환경에서 VPC, 서브넷, NAT 게이트웨이 등을 구성하는 법을 공부했다
1. Terraform 초기 설정 (01_init.tf)
Terraform의 ncloud 프로바이더를 설정하는 부분
terraform {
required_providers {
ncloud = {
source = "NaverCloudPlatform/ncloud"
}
}
required_version = ">= 0.13"
}
# Naver Cloud Provider 설정: 인증 정보 및 리전 등 기본 정보를 입력
provider "ncloud" {
access_key = var.access_key # 액세스 키
secret_key = var.secret_key # 시크릿 키
region = var.region # 리전 설정
site = var.site # 사이트 정보
support_vpc = var.support_vpc # VPC 지원 여부
}
2. VPC 생성 (02_vpc.tf)
Ncloud에서의 가상 네트워크 환경(VPC)을 생성
# VPC 생성 (main-vpc)
resource "ncloud_vpc" "main-vpc" {
name = "main-vpc" # VPC 이름
ipv4_cidr_block = var.cidr # VPC CIDR 블록 (예: 10.0.0.0/16)
}
3. 서브넷 생성
VPC 안에 퍼블릭 서브넷을 생성
# 퍼블릭 Subnet (기본) 생성 (main-bas)
resource "ncloud_subnet" "main-bas" {
vpc_no = ncloud_vpc.main-vpc.id # 연결할 VPC ID
subnet = "10.0.0.0/24" # 서브넷 CIDR
zone = "KR-1" # 가용 영역
network_acl_no = ncloud_vpc.main-vpc.default_network_acl_no # 기본 네트워크 ACL 번호
subnet_type = "PUBLIC" # 서브넷 유형: PUBLIC
name = "main-bas" # 서브넷 이름
usage_type = "GEN" # 용도: 일반
}
# 퍼블릭 Subnet (NAT 게이트웨이용) 생성 (main-nat)
resource "ncloud_subnet" "main-nat" {
vpc_no = ncloud_vpc.main-vpc.id
subnet = "10.0.2.0/24"
zone = "KR-1"
network_acl_no = ncloud_vpc.main-vpc.default_network_acl_no
subnet_type = "PUBLIC"
name = "main-nat"
usage_type = "NATGW" # 용도: NAT 게이트웨이
}
# 프라이빗 Subnet (웹 서버용 1) 생성 (main-web1)
resource "ncloud_subnet" "main-web1" {
vpc_no = ncloud_vpc.main-vpc.id
subnet = "10.0.3.0/24"
zone = "KR-1"
network_acl_no = ncloud_vpc.main-vpc.default_network_acl_no
subnet_type = "PRIVATE" # 프라이빗 서브넷
name = "main-web1"
usage_type = "GEN"
}
# 프라이빗 Subnet (웹 서버용 2) 생성 (main-web2)
resource "ncloud_subnet" "main-web2" {
vpc_no = ncloud_vpc.main-vpc.id
subnet = "10.0.4.0/24"
zone = "KR-1"
network_acl_no = ncloud_vpc.main-vpc.default_network_acl_no
subnet_type = "PRIVATE"
name = "main-web2"
usage_type = "GEN"
}
# 프라이빗 Subnet (DB 서버용) 생성 (main-db)
resource "ncloud_subnet" "main-db" {
vpc_no = ncloud_vpc.main-vpc.id
subnet = "10.0.5.0/24"
zone = "KR-1"
network_acl_no = ncloud_vpc.main-vpc.default_network_acl_no
subnet_type = "PRIVATE"
name = "main-db"
usage_type = "GEN"
}
4. 라우트 테이블 생성 및 연결
라우트 테이블을 구성하여 서브넷의 트래픽을 관리
# 퍼블릭 라우트 테이블 생성 (main-rt)
resource "ncloud_route_table" "main-rt" {
vpc_no = ncloud_vpc.main-vpc.id
supported_subnet_type = "PUBLIC"
name = "main-rt"
}
# 프라이빗 (NAT) 라우트 테이블 생성 (main-natrt)
resource "ncloud_route_table" "main-natrt" {
vpc_no = ncloud_vpc.main-vpc.id
supported_subnet_type = "PRIVATE"
name = "main-natrt"
}
# 라우트 테이블 연결: 퍼블릭 서브넷 (main-bas) → 라우트 테이블 (main-rt)
resource "ncloud_route_table_association" "main-rtasso" {
route_table_no = ncloud_route_table.main-rt.id
subnet_no = ncloud_subnet.main-bas.id
}
# 라우트 테이블 연결: NAT 서브넷 (main-nat) → 라우트 테이블 (main-rt)
resource "ncloud_route_table_association" "main-rtasso2" {
route_table_no = ncloud_route_table.main-rt.id
subnet_no = ncloud_subnet.main-nat.id
}
# 라우트 테이블 연결: 로드밸런서 서브넷 (main-load) → 라우트 테이블 (main-rt)
resource "ncloud_route_table_association" "main-rtasso3" {
route_table_no = ncloud_route_table.main-rt.id
subnet_no = ncloud_subnet.main-load.id
}
6. NAT 게이트웨이 생성
프라이빗 서브넷에서 인터넷으로 통신할 수 있게 하는 NAT 게이트웨이를 설정
# NAT 게이트웨이 생성 (main-natgw)
resource "ncloud_nat_gateway" "main-natgw" {
vpc_no = ncloud_vpc.main-vpc.id
subnet_no = ncloud_subnet.main-nat.id
name = "main-natgw"
zone = "KR-1"
description = "main-natgw" # NAT 게이트웨이 설명
}
7. NAT 게이트웨이 라우팅 설정 및 연결
프라이빗 서브넷이 NAT 게이트웨이를 통해 인터넷과 통신하도록 설정합니다.
# NAT 라우트 생성: 프라이빗 라우트 테이블에 기본 게이트웨이 경로 추가 (main-natgwrt)
resource "ncloud_route" "main-natgwrt" {
route_table_no = ncloud_route_table.main-natrt.id
destination_cidr_block = "0.0.0.0/0"
target_type = "NATGW"
target_name = ncloud_nat_gateway.main-natgw.name
target_no = ncloud_nat_gateway.main-natgw.id
}
resource "ncloud_route_table_association" "ysjang-natrtasso" {
route_table_no = ncloud_route_table.ysjang-natrt.id
subnet_no = ncloud_subnet.ysjang-web1.id
}
resource "ncloud_route_table_association" "ysjang-natrtasso2" {
route_table_no = ncloud_route_table.ysjang-natrt.id
subnet_no = ncloud_subnet.ysjang-web2.id
}
resource "ncloud_route_table_association" "ysjang-natrtasso3" {
route_table_no = ncloud_route_table.ysjang-natrt.id
subnet_no = ncloud_subnet.ysjang-db.id
}
8. 변수 정의
필요한 변수들을 별도의 파일로 정의하여 관리한다
variable "region" { default = "KR" }
variable "site" { default = "public" }
variable "support_vpc" { default = true }
variable "cidr" { default = "10.0.0.0/16" }
variable "access_key" { default = "YOUR_ACCESS_KEY" }
variable "secret_key" { default = "YOUR_SECRET_KEY" }
이 예제를 통해 Ncloud 환경에서도 Terraform을 이용하여 효과적인 인프라 관리를 할 수 있다
반응형