IaC/Terraform

[Terraform] Ncloud Server 생성하기

graph-dev 2024. 11. 15. 18:30
728x90

 

terraform 로고

Terraform 설치

Rocky Linux는 테라폼 홈페이지에서, 아마존 리눅스로 설치합니다.

Install | Terraform | HashiCorp Developer

 

Install | Terraform | HashiCorp Developer

Explore Terraform product documentation, tutorials, and examples.

developer.hashicorp.com

sudo yum install -y yum-utils shadow-utils
sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/AmazonLinux/hashicorp.repo
sudo yum -y install terraform

 

 

 

terraform -v
Terraform v1.9.8
on linux_amd64

 

테라폼 버전은 1.9.8입니다. 이제 잘 사용이 됩니다.

 

 

예시 네이버클라우드 provider 설치

 

네이버클라우드 제공 provider를 사용합니다.

 

프로바이더 다운로드

 

압축을 해제합니다.

 

압축해제 후 폴더

 

폴더 이름이 terraform-provider-ncloud-main 입니다. 이 디렉토리로 들어갑니다.

terraform 폴더 내부

 

이 파일이 예시용 파일이다보니, examples 내부에 멋진 스크립트 파일이 있습니다.

 

세 개의 tf 파일

 

테라폼 파일 세가지가 있습니다. 하나씩 살펴보겠습니다.

 

VPC

VPC 설정은 다음과 같습니다. 액세스키와 시크릿키는 각자의 것을 variables.tf 파일에 넣어주어야 합니다.

# VPC > User scenario > Scenario 1. Single Public Subnet
# https://docs.ncloud.com/ko/networking/vpc/vpc_userscenario1.html

provider "ncloud" {
  support_vpc = true
  region      = "KR"
  access_key  = var.access_key
  secret_key  = var.secret_key
}

resource "ncloud_login_key" "key_scn_01" {
  key_name = var.name_scn01
}

resource "ncloud_vpc" "vpc_scn_01" {
  name            = var.name_scn01
  ipv4_cidr_block = "10.0.0.0/16"
}

 

여기서 또 봐야할 것이 subnet의 CIDR 이라는 것의 계산법입니다.

resource "ncloud_vpc" "vpc_scn_01" {
  name            = var.name_scn01
  ipv4_cidr_block = "10.0.0.0/16"
}

resource "ncloud_subnet" "subnet_scn_01" {
  name           = var.name_scn01
  vpc_no         = ncloud_vpc.vpc_scn_01.id
  subnet         = cidrsubnet(ncloud_vpc.vpc_scn_01.ipv4_cidr_block, 8, 1)
  // 10.0.1.0/24
  zone           = "KR-2"
  network_acl_no = ncloud_vpc.vpc_scn_01.default_network_acl_no
  subnet_type    = "PUBLIC"
  // PUBLIC(Public) | PRIVATE(Private)
}

 

원문을 살펴보면 다음과 같습니다.

cidrsubnet - Functions - Configuration Language | Terraform | HashiCorp Developer

 

cidrsubnet - Functions - Configuration Language | Terraform | HashiCorp Developer

The cidrsubnet function calculates a subnet address within a given IP network address prefix.

developer.hashicorp.com

 

cidrsubnet(prefix, newbits, netnum)
  • prefix: The network address prefix in CIDR notation (e.g., "10.1.2.0/24").
  • newbits: The number of additional bits to extend the prefix. For example, if the prefix ends in /16 and newbits is 4, the resulting subnet address will have a length of /20.
  subnet         = cidrsubnet(ncloud_vpc.vpc_scn_01.ipv4_cidr_block, 8, 1)
  // 10.0.1.0/24

 

이 예시에서, ipv4_cidr_block은 "10.0.0.0/16"입니다. newbits는 8, netnum은 1입니다.

 

계산 과정은 기본 CIDR 블록 (10.0.0.0/16)은 16비트의 네트워크 부분을 가집니다. 여기에 8비트를 추가하여 (16 + 8 = 24) 새로운 서브넷의 prefix 길이를 24로 만듭니다. netnum 1은 두 번째 서브넷을 의미합니다 (0부터 시작). 

그러면 결과적으로 "10.0.1.0/24" 서브넷이 생성됩니다.

 

 

variables.tf 일부를 살펴봅니다. client ip, access key, secret key에 각각 본인의 IP와 인증키 정보를 입력합니다.

variable name_scn01 {
  default = "tf-graph01"
}

variable client_ip {
  default = "YOUR_CLIENT_IP"
}

variable access_key {
  default = "YOUR_ACCESS_KEY"
}

variable secret_key {
  default = "YOUR_SECRET_KEY"
}

 

 

versions.tf 파일은 이 네이버클라우드 프로바이더의 버전을 명시해주었네요.

terraform {
  required_providers {
    ncloud = {
      source = "navercloudplatform/ncloud"
    }
  }
  required_version = ">= 0.13"
}

 

 

이것을 모아서 이제 terraform 명령어를 사용해보겠습니다.

terraform init
terraform plan
terraform apply

 

terraform 초기화

 

terraform plan에서 에러가 바랭합니다.

 

에러

 

공공계정은 안되는 것이에요! 민간계정으로 하면 아래와 같습니다.

 

 

plan

 

기존의 vpc를 활용하는 코드

 

다시 terraform plan 후 모습

 

 

 

terraform apply yes

 

 

ncloud_server 서버 생성중 모습

 

쉽지는 않은데, 일단 가능하다는 것을 확인했습니다.

생성 완료

 

 

반납 완료

 

 

서브넷 반납이 됩니다.

서브넷 반납중

 

 

문제는 10.0.0.192/26 이렇게 나오는게 신기하네요.

서브넷 확인

 

 

이렇게 subnet, server를 생성해보고 다시 삭제도 해보았습니다. 인프라 자동화에 terraform이 상당히 편리하게 작용할 것으로 보입니다.

 

다음에는 Ansible도 활용해보고 NKS 구축까지 해보겠습니다.