본문 바로가기
개발/Terraform on NaverCloud

Terraform으로 NAVER Cloud Server 만들기

by 컴쏘 2023. 7. 25.

총 3개의 파일을 만들었다.

provider.tf, variable.tf, vpc.tf

 

1) provider.tf

# Terraform init variable 
terraform{
    required_providers {
        ncloud = {
            source = "navercloudplatform/ncloud"
        }
    }
}

# provider : 인프라의 종류 
provider "ncloud" {
    access_key = var.access_key
    secret_key = var.secret_key
    region = "KR"
    site = "public"
    support_vpc = true
}

 

2) variable.tf

variable "access_key" {
    default = "{ACCESS_KEY}"
}

variable "secret_key" {
    default = "{SECRET_KEY}"
}

 

3) vpc.tf (이 코드의 일부는 뒤에서 수정된다.)

# Resource : VPC 
resource "ncloud_vpc" "main" {
    name = "vpc-tf"
    ipv4_cidr_block = "10.0.0.0/16"
}

# Resource : Subnet(Public) 
resource "ncloud_subnet" "public" {
    name = "sbn-tf-public"
    vpc_no = ncloud_vpc.main.id 
    subnet = cidrsubnet(ncloud_vpc.main.ipv4_cidr_block, 8, 0)
    zone = "KR-1"
    network_acl_no = ncloud_vpc.main.default_network_acl_no
    subnet_type = "PUBLIC"
}

# Resource : Subnet(Private)
resource "ncloud_subnet" "private" {
    name = "sbn-tf-private"
    vpc_no = ncloud_vpc.main.id
    subnet = cidrsubnet(ncloud_vpc.main.ipv4_cidr_block, 8, 1)
    zone = "KR-1"
    network_acl_no = ncloud_vpc.main.default_network_acl_no
    subnet_type = "PRIVATE"
}

# Resource : NAT Gateway
resource "ncloud_nat_gateway" "nat_gateway" {
    vpc_no = ncloud_vpc.main.id 
    zone = "KR-1"
    // below fields is optional
    name = "nat-gw-tf"
    description = "NAT Gateway with Terraform"
}

# Resource : Public Route Table & Association 
resource "ncloud_route_table" "route_table_public" {
    vpc_no = ncloud_vpc.main.id 
    name = "tf-rt-public"
    description = "Public Route Table with Terraform"
    supported_subnet_type = "PUBLIC" 
}

# Resource : Private Route Table & Association 
resource "ncloud_route_table" "route_table_private" {
    vpc_no = ncloud_vpc.main.id 
    name = "tf-rt-private"
    description = "Private Route Table with Terraform" 
    supported_subnet_type = "PRIVATE" 
}

# Resource : Public Route Table Association 
resource "ncloud_route_table_association" "rt_subnet_association_public" {
    route_table_no = ncloud_route_table.route_table_public.id 
    subnet_no = ncloud_subnet.public.id 
}

# Resource : Private Route Table Association 
resource "ncloud_route_table_association" "rt_subnet_association_private" {
    route_table_no = ncloud_route_table.route_table_private.id 
    subnet_no = ncloud_subnet.private.id 
}

# Resource : Route Rule Configuration 
resource "ncloud_route" "private_nat" {
    route_table_no = ncloud_route_table.route_table_private.id 
    destination_cidr_block = "0.0.0.0/0" 
    target_type = "NATGW" 
    target_name = ncloud_nat_gateway.nat_gateway.name 
    target_no = ncloud_nat_gateway.nat_gateway.id 
}

 

terraform init

우선 terraform init으로 초기화를 해주자.

terraform init

명령어를 입력하면 다음과 같은 메시지들이 뜨면서 성공적으로 initialized 된다.

 

파일 리스트는 다음과 같다.

파일 리스트

 

terraform plan

terraform plan 결과
terraform plan 결과

terraform plan으로 배포할 리소스들을 확인한다.

추가되는 리소스들은 +로 표시된다.

 

terraform apply

terraform apply 결과

terraform apply를 하면 terraform plan과 비슷한 메시지가 출력되다가,

밑에서 처럼 Do you want to perform these actions? 라는 메시지가 출력되었을 때,

yes를 입력하면 Creating이 시작된다.

terraform apply 결과

오류 : vpc.tf의 line 28에 resource "ncloud_nat_gateway" "nat_gateway” 내부에 subnet_no를 입력하지 않아서 생긴 오류이다.

subnet_no 추가

이렇게 subnet_no를 추가해주고 다시 apply를 해봤다.

오류 발생...

이번에는 public으로 할당을 해보았다.

이번에는 public으로 시도
같은 오류...

역시나 같은 오류가 발생했다.

 

뭔가 이상해서 자료를 찾아보니, 콘솔로 nat_gateway를 생성할 때 subnet_no를 입력하는 곳이 없는 것을 발견했다..! 업데이트 된 것이다.

New version
NATGW용 subnet 추가

NATGW용 subnet 만들기

 

다시 apply 하기

성공적으로 apply됨

성공적이다.

 

이제 console을 봐보자.

잘 생성됨

Resource에 가보면 생성된 것들이 보인다.

 

terraform destroy

vpc.tf의 모든 코드들을 주석처리하고 [terraform plan] - [terraform apply] 순서대로 진행해보자.

(Tip. 윈도우 기준 vsCode에서 주석처리 단축키 : [ctrl + /])

 

terraform plan

주석 처리 후 terraform plan 실행

 

terraform apply

terraform apply

잘 삭제되었다.

 

이제 마찬가지로 console을 봐보자.

콘솔에서 확인

잘 삭제가 되었다.


OSSCA Terraform on NAVER Cloud
"장창환 멘토님"의 Terraform 구조 설명 및 사용법 가이드 세미나와
"이원철 멘토님"의 Terraform 프로바이더 개발 세미나 내용을
직접 실습을 통해 정리한 글입니다.