총 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으로 초기화를 해주자.
명령어를 입력하면 다음과 같은 메시지들이 뜨면서 성공적으로 initialized 된다.
파일 리스트는 다음과 같다.
terraform plan
terraform plan으로 배포할 리소스들을 확인한다.
추가되는 리소스들은 +로 표시된다.
terraform apply
terraform apply를 하면 terraform plan과 비슷한 메시지가 출력되다가,
밑에서 처럼 Do you want to perform these actions? 라는 메시지가 출력되었을 때,
yes를 입력하면 Creating이 시작된다.
오류 : vpc.tf의 line 28에 resource "ncloud_nat_gateway" "nat_gateway” 내부에 subnet_no를 입력하지 않아서 생긴 오류이다.
이렇게 subnet_no를 추가해주고 다시 apply를 해봤다.
이번에는 public으로 할당을 해보았다.
역시나 같은 오류가 발생했다.
뭔가 이상해서 자료를 찾아보니, 콘솔로 nat_gateway를 생성할 때 subnet_no를 입력하는 곳이 없는 것을 발견했다..! 업데이트 된 것이다.
NATGW용 subnet 만들기
다시 apply 하기
성공적이다.
이제 console을 봐보자.
Resource에 가보면 생성된 것들이 보인다.
terraform destroy
vpc.tf의 모든 코드들을 주석처리하고 [terraform plan] - [terraform apply] 순서대로 진행해보자.
(Tip. 윈도우 기준 vsCode에서 주석처리 단축키 : [ctrl + /])
terraform plan
terraform apply
잘 삭제되었다.
이제 마찬가지로 console을 봐보자.
잘 삭제가 되었다.
OSSCA Terraform on NAVER Cloud
"장창환 멘토님"의 Terraform 구조 설명 및 사용법 가이드 세미나와
"이원철 멘토님"의 Terraform 프로바이더 개발 세미나 내용을
직접 실습을 통해 정리한 글입니다.
'개발 > Terraform on NaverCloud' 카테고리의 다른 글
오픈 소스 기여하기 : panic 원인 파악하기 (0) | 2023.08.01 |
---|---|
오픈 소스 기여하기 : terraform-provider-ncloud 이슈 선정 (0) | 2023.08.01 |
Terraform 프로바이더 개발 세미나 2 (0) | 2023.07.22 |
Terraform 프로바이더 개발 세미나 1 (0) | 2023.07.19 |
Terraform 구조 및 사용 방법 이해 (0) | 2023.07.17 |