terraform

Terraform을 활용한 Ncloud 인프라 구축하기 -1

kkuniyo 2025. 3. 13. 16:20
반응형

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을 이용하여 효과적인 인프라 관리를 할 수 있다

반응형