![[OSSCA] Terraform으로 NCP 사용하기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbPxvyi%2FbtsIJsFVG0z%2FbjRFkFbgzkdVTXvTbog6ZK%2Fimg.webp)
3주차에는 기존에 만들었던 NCP 인프라를 Terraform으로 마이그레이션 하는 과정을 수행해 볼 것이다.
실습 아키텍처
기존에 실습을 진행했던 아키텍처와 DB를 진행하고 동일하다. 해당 아키텍처에 대해 Terraform으로 마이그레이션을 진행해보고자 한다.
Terraform 설치하기
우분투로 사용할 예정이기에 다음과 같은 명령어를 사용하였다.
wget -O- <https://apt.releases.hashicorp.com/gpg> | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] <https://apt.releases.hashicorp.com> $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
sudo apt update && sudo apt install terraform
기본 설정(Terraform & Provider)
Terraform 설정 파일은 terraform 블록과 provider 블록으로 위와 같이 구성해야 한다. 각각이 어떤 역할을 하는지에 대해 살펴보도록 하자.
terraform{
required_providers {
ncloud = {
source = "NaverCloudPlatform/ncloud"
version = ">= 2.1.2"
}
}
required_version = ">= 0.13"
}
테라폼 블록
required_providers
required_providers는 Terraform이 사용하는 프로바이더의 소스와 버전을 지정하는 부분이다. 프로바이더는 Terraform이 특정 클라우드 서비스와 통신할 수 있게 해주는 플러그인 역할을 한다. 여기서는 Naver Cloud Platform(NCP) 프로바이더를 사용하는 것을 볼 수 있다.
- source: NCP 프로바이더의 소스는 "NaverCloudPlatform/ncloud"로 지정한다. 이는 Terraform 레지스트리에서 NCP 프로바이더를 가져오도록 지시하는 것과 같다.
- version: ">= 2.1.2"는 프로바이더의 최소 버전을 지정한다.. 이 설정을 통해 최소한 2.1.2 버전 이상의 프로바이더가 사용되도록 보장한다. 최신 버전을 사용하면 새로운 기능과 버그 수정 사항을 활용할 수 있다.
required_version
required_version은 Terraform 자체의 최소 버전을 지정한다. ">= 0.13"은 Terraform 0.13 버전 이상이 필요함을 의미한다. Terraform의 버전 관리 규칙에 따라, 특정 기능이나 구문이 새로운 버전에서 추가되기 때문에 이 설정을 통해 코드가 특정 버전 이상에서만 동작하도록 보장한다. 이는 개발 환경의 일관성을 유지하고, 버전 간 호환성 문제를 방지하기 위함이다.
프로바이더 블록
provider "ncloud" {
support_vpc = true
region = "KR"
}
provider "ncloud"
provider 블록은 Terraform이 특정 클라우드 프로바이더와 상호 작용하기 위한 설정을 지정한다. 여기서는 NCP와의 통신을 설정하는 부분이다.
- support_vpc: true로 설정함으로써 NCP의 VPC 기능을 사용할 수 있게 한다. VPC는 가상 네트워크를 구성하여 보안 및 네트워크 관리에 유용하다.
- region: "KR"로 설정하여 Terraform이 한국 리전에 리소스를 배포하도록 지정한다. 이는 물리적으로 가까운 리전에 리소스를 배포하여 지연 시간을 최소화하고, 해당 리전의 서비스 특성을 활용하기 위함이다.
VPC 생성하기
#VPC
resource "ncloud_vpc" "ossca_vpc" {
name = "ossca-vpc"
ipv4_cidr_block = "10.0.0.0/16"
}
- name: VPC의 이름을 "ossca-vpc"로 지정하여 다른 VPC와 구분한다.
- ipv4_cidr_block: "10.0.0.0/16" 블록을 사용하여 IP 주소 범위를 지정한다. /16 블록은 65536개의 IP 주소를 제공하여 충분한 주소 공간을 확보할 수 있다. 이는 향후 확장성을 고려한 선택이다.
Subnet 생성하기
#Subnet
resource "ncloud_subnet" "public_subnet" {
vpc_no = ncloud_vpc.ossca_vpc.id
subnet = "10.0.1.0/24"
zone = "KR-1"
network_acl_no = ncloud_vpc.ossca_vpc.default_network_acl_no
subnet_type = "PUBLIC"
name = "tf-public-1"
usage_type = "GEN"
}
resource "ncloud_subnet" "private_subnet_kr1" {
vpc_no = ncloud_vpc.ossca_vpc.id
subnet = "10.0.2.0/24"
zone = "KR-1"
network_acl_no = ncloud_vpc.ossca_vpc.default_network_acl_no
subnet_type = "PRIVATE"
name = "tf-private-1"
usage_type = "GEN"
}
resource "ncloud_subnet" "private_subnet_kr2" {
vpc_no = ncloud_vpc.ossca_vpc.id
subnet = "10.0.3.0/24"
zone = "KR-2"
network_acl_no = ncloud_vpc.ossca_vpc.default_network_acl_no
subnet_type = "PRIVATE"
name = "tf-private-2"
usage_type = "GEN"
}
resource "ncloud_subnet" "nat_subnet" {
vpc_no = ncloud_vpc.ossca_vpc.id
subnet = "10.0.4.0/24"
zone = "KR-1"
network_acl_no = ncloud_vpc.ossca_vpc.default_network_acl_no
subnet_type = "PUBLIC"
usage_type = "NATGW"
}
resource "ncloud_subnet" "lb_subnet" {
vpc_no = ncloud_vpc.ossca_vpc.id
subnet = "10.0.5.0/24"
zone = "KR-1"
network_acl_no = ncloud_vpc.ossca_vpc.default_network_acl_no
subnet_type = "PUBLIC" // PUBLIC(Public) | PRIVATE(Private)
usage_type = "LOADB" // GEN(General) | LOADB(For load balancer)
}
- vpc_no: 각 서브넷이 속한 VPC를 지정한다. 이는 VPC와 서브넷을 연결하는 필수 요소이다.
- subnet: 서브넷의 IP 주소 범위를 지정한다. /24 블록은 256개의 IP 주소를 제공하여 각 서브넷에 충분한 주소 공간을 확보할 수 있다.
- zone: 서브넷이 위치할 가용 영역을 지정한다. 이를 통해 리소스를 물리적으로 분산시켜 가용성을 높인다.
- network_acl_no: 기본 네트워크 ACL을 지정하여 서브넷의 보안 설정을 자동으로 적용한다.
- subnet_type: 서브넷 유형을 지정하여 퍼블릭 및 프라이빗 트래픽을 분리한다. 퍼블릭 서브넷은 외부와의 통신이 필요한 리소스에, 프라이빗 서브넷은 내부 리소스에 적합하다.
- name: 서브넷의 이름을 지정하여 관리 및 식별을 용이하게 한다.
- usage_type: 서브넷의 사용 목적을 지정하여 네트워크 트래픽을 관리한다. 예를 들어, NATGW는 NAT 게이트웨이를 위해, LOADB는 로드밸런서를 위해 사용된다.
Gateway 만들기
# NAT GateWay
resource "ncloud_nat_gateway" "nat_gateway" {
vpc_no = ncloud_vpc.ossca_vpc.id
subnet_no = ncloud_subnet.nat_subnet.id
zone = "KR-1"
}
- vpc_no: NAT 게이트웨이가 속할 VPC를 지정한다.
- subnet_no: NAT 게이트웨이가 위치할 서브넷을 지정한다. 이는 퍼블릭 서브넷에 위치해야 한다.
- zone: NAT 게이트웨이가 위치할 가용 영역을 지정하여 리소스를 물리적으로 분산시킨다
route table 연결하기
resource "ncloud_route_table" "route_table" {
vpc_no = ncloud_vpc.ossca_vpc.id
supported_subnet_type = "PRIVATE"
}
resource "ncloud_route_table_association" "route_table_as" {
route_table_no = ncloud_route_table.route_table.id
subnet_no = ncloud_subnet.private_subnet_kr1.id
}
resource "ncloud_route" "route" {
route_table_no = ncloud_route_table.route_table.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
}
- vpc_no: 라우트 테이블이 속할 VPC를 지정한다.
- supported_subnet_type: 라우트 테이블이 지원할 서브넷 유형을 지정한다. 여기서는 프라이빗 서브넷을 지원하도록 한다.
- route_table_no: 라우트 테이블을 특정 서브넷과 연결하여 트래픽을 관리한다.
- subnet_no: 라우트 테이블이 적용될 서브넷을 지정한다.
- destination_cidr_block: "0.0.0.0/0"을 사용하여 모든 트래픽을 대상으로 한다.
- target_type: NAT 게이트웨이를 대상으로 지정하여 프라이빗 서브넷의 트래픽이 외부로 나갈 수 있게 한다.
- target_name: NAT 게이트웨이의 이름을 지정하여 트래픽을 관리한다.
- target_no: NAT 게이트웨이의 ID를 지정하여 트래픽을 관리한다.
로드밸런서 생성하기
로드밸런서
resource "ncloud_lb" "lb" {
name = "tf-lb-test"
network_type = "PUBLIC"
type = "APPLICATION"
subnet_no_list = [ ncloud_subnet.lb_subnet.subnet_no ]
}
- name: 로드밸런서의 이름을 지정하여 식별을 용이하게 한다.
- network_type: 퍼블릭 네트워크 타입을 지정하여 외부 트래픽을 처리하도록 한다.
- type: 애플리케이션 로드밸런서 타입을 사용하여 HTTP/HTTPS 트래픽을 처리한다.
- subnet_no_list: 로드밸런서가 속할 서브넷을 지정한다.
로드밸런서 타겟 그룹 설정
resource "ncloud_lb_target_group" "ossca_tg" {
vpc_no = ncloud_vpc.ossca_vpc.vpc_no
protocol = "HTTP"
target_type = "VSVR"
port = 8080
description = "for test"
health_check {
protocol = "HTTP"
http_method = "GET"
port = 80
url_path = "/"
cycle = 30
up_threshold = 2
down_threshold = 2
}
algorithm_type = "RR"
}
- vpc_no: 타겟 그룹이 속할 VPC를 지정한다.
- protocol: HTTP 프로토콜을 사용하여 트래픽을 처리한다.
- target_type: VSVR(Virtual Server)을 타겟으로 지정하여 트래픽을 분산시킨다.
- port: 로드밸런서가 수신할 포트를 지정한다.
- health_check: 헬스 체크 설정을 통해 로드밸런서가 타겟 서버의 상태를 모니터링한다. 헬스 체크 주기와 임계값을 설정하여 안정적인 서비스 운영을 보장한다.
- algorithm_type: 라운드 로빈(RR) 알고리즘을 사용하여 트래픽을 균등하게 분산시킨다.
타겟 그룹 attachment
resource "ncloud_lb_target_group_attachment" "test" {
target_group_no = ncloud_lb_target_group.ossca_tg.target_group_no
target_no_list = [ncloud_server.private_server1.instance_no,ncloud_server.private_server2.instance_no]
}
- target_group_no: attachment를 수행한 targetgroup 번호를 지정한다.
- target_no_list: 타겟 그룹으로 설정할 인스턴스 리스트를 지정한다.
서버 생성하기
퍼블릭 서버
resource "ncloud_server" "public_server1" {
subnet_no = ncloud_subnet.public_subnet.id
name = "ossca-pubserver"
server_image_product_code = data.ncloud_server_image.server_image.product_code
login_key_name = ncloud_login_key.loginkey.id
}
프라이빗 서버(KR-1)
resource "ncloud_server" "private_server1" {
subnet_no = ncloud_subnet.private_subnet_kr1.id
name = "ossca-priv1server"
server_image_product_code = data.ncloud_server_image.server_image.product_code
login_key_name = ncloud_login_key.loginkey.id
}
프라이빗 서버(KR-2)
resource "ncloud_server" "private_server2" {
subnet_no = ncloud_subnet.private_subnet_kr2.id
name = "ossca-priv2server"
server_image_product_code = data.ncloud_server_image.server_image.product_code
login_key_name = ncloud_login_key.loginkey.id
}
- subnet_no: 서버가 속할 서브넷을 지정하여 네트워크 구성을 설정한다.
- name: 서버의 이름을 지정하여 관리와 식별을 용이하게 한다.
- server_image_product_code: 서버 이미지 제품 코드를 지정하여 원하는 OS와 설정을 가진 서버를 생성한다.
- login_key_name: 로그인 키를 지정하여 SSH를 통해 서버에 접근할 수 있게 한다.
로그인 키 설정하기
resource "ncloud_login_key" "loginkey" {
key_name = "osscakey"
}
- key_name: 로그인 키의 이름을 지정하여 SSH 접속 시 사용할 키를 관리하고 식별한다.
퍼블릭 인스턴스에 ip 할당하기
resource "ncloud_public_ip" "public_ip" {
server_instance_no = ncloud_server.public_server1.id
}
- server_instance_no: 퍼블릭 IP를 할당할 서버 인스턴스를 지정하여 외부에서 접근할 수 있도록 한다. 퍼블릭 IP는 외부와의 통신을 필요로 하는 리소스에 필수적이다.
Trouble Shooting
환경변수 사용하기
provider "ncloud" {
support_vpc = true
region = "KR"
access_key = '${var.NCP_ACCESS_KEY}'
secret_key = '${var.NCP_SECRET_KEY}'
}
- TF_VAR_사용하려는 환경변수 → 해당 형식으로 export 해서 사용하자
이때, var을 사용할 때에는 variable 이라는 블록을 사용해주어야 한다. 환경변수면 사용하지 않는줄 알았다가 애먹었다 ㅠㅠ
최종 결과
{
"version": 4,
"terraform_version": "1.8.1",
"serial": 92,
"lineage": "db110ac3-cc96-c4bb-496d-4d12aba1201b",
"outputs": {},
"resources": [
{
"mode": "data",
"type": "ncloud_server_image",
"name": "server_image",
"provider": "provider[\"registry.terraform.io/navercloudplatform/ncloud\"]",
"instances": [
{
"schema_version": 0,
"attributes": {
"base_block_storage_size": "50GB",
"exclusion_product_code": null,
"filter": [
{
"name": "product_name",
"regex": false,
"values": [
"Rocky Linux 8.8"
]
}
],
"id": "SW.VSVR.OS.LNX64.ROCKY.0808.B050",
"infra_resource_detail_type_code": null,
"infra_resource_type": "SW",
"os_information": "Rocky Linux 8.8",
"platform_type": "LNX64",
"platform_type_code_list": null,
"product_code": "SW.VSVR.OS.LNX64.ROCKY.0808.B050",
"product_description": "Rocky Linux 8.8",
"product_name": "Rocky Linux 8.8",
"product_name_regex": null,
"product_type": "LINUX"
},
"sensitive_attributes": []
}
]
},
{
"mode": "managed",
"type": "ncloud_lb",
"name": "lb",
"provider": "provider[\"registry.terraform.io/navercloudplatform/ncloud\"]",
"instances": [
{
"schema_version": 0,
"attributes": {
"description": null,
"domain": "tf-lb-test-23743510-2be92e35bf02.kr.lb.naverncp.com",
"id": "23743510",
"idle_timeout": 60,
"ip_list": [
"223.130.153.68"
],
"listener_no_list": [],
"load_balancer_no": "23743510",
"name": "tf-lb-test",
"network_type": "PUBLIC",
"subnet_no_list": [
"145856"
],
"throughput_type": "SMALL",
"timeouts": null,
"type": "APPLICATION",
"vpc_no": "61298"
},
"sensitive_attributes": [],
"private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjozNjAwMDAwMDAwMDAwLCJkZWxldGUiOjMwMDAwMDAwMDAwMCwidXBkYXRlIjo2MDAwMDAwMDAwMDB9fQ==",
"dependencies": [
"ncloud_subnet.lb_subnet",
"ncloud_vpc.ossca_vpc"
]
}
]
},
{
"mode": "managed",
"type": "ncloud_lb_target_group",
"name": "ossca_tg",
"provider": "provider[\"registry.terraform.io/navercloudplatform/ncloud\"]",
"instances": [
{
"schema_version": 0,
"attributes": {
"algorithm_type": "RR",
"description": "for test",
"health_check": [
{
"cycle": 30,
"down_threshold": 2,
"http_method": "GET",
"port": 80,
"protocol": "HTTP",
"up_threshold": 2,
"url_path": "/"
}
],
"id": "1489953",
"load_balancer_instance_no": "",
"name": "tg18f137da939",
"port": 8080,
"protocol": "HTTP",
"target_group_no": "1489953",
"target_no_list": [],
"target_type": "VSVR",
"use_proxy_protocol": false,
"use_sticky_session": false,
"vpc_no": "61298"
},
"sensitive_attributes": [],
"private": "bnVsbA==",
"dependencies": [
"ncloud_vpc.ossca_vpc"
]
}
]
},
{
"mode": "managed",
"type": "ncloud_lb_target_group_attachment",
"name": "test",
"provider": "provider[\"registry.terraform.io/navercloudplatform/ncloud\"]",
"instances": [
{
"schema_version": 0,
"attributes": {
"id": "2024-04-25 04:22:33.801627357 +0000 UTC",
"target_group_no": "1489953",
"target_no_list": [
"23780374",
"23780380"
],
"timeouts": null
},
"sensitive_attributes": [],
"private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjozNjAwMDAwMDAwMDAwLCJkZWxldGUiOjMwMDAwMDAwMDAwMH19",
"dependencies": [
"data.ncloud_server_image.server_image",
"ncloud_lb_target_group.ossca_tg",
"ncloud_login_key.loginkey",
"ncloud_server.private_server1",
"ncloud_server.private_server2",
"ncloud_subnet.private_subnet_kr1",
"ncloud_subnet.private_subnet_kr2",
"ncloud_vpc.ossca_vpc"
]
}
]
},
{
"mode": "managed",
"type": "ncloud_login_key",
"name": "loginkey",
"provider": "provider[\"registry.terraform.io/navercloudplatform/ncloud\"]",
"instances": [
{
"schema_version": 0,
"attributes": {
"fingerprint": "6a:65:09:fb:ca:38:8a:9f:c5:69:ec:8f:76:d7:3b:5b",
"id": "osscakey",
"key_name": "osscakey",
"private_key": "-----BEGIN RSA PRIVATE KEY-----\nMIIEowIBAAKCAQEAslmTFcZ1WlAAKnD91DVxZunqKzYFXV6Rrb0L1DpIysKfla5R\nSizExrvducJTqVX6Bc6THTGl61aFWtAL2vr+4VFzaAGiRCOYTDkFIUrhNKaKxb9N\nR7lqnz5bR3hnM5zZwCdFUwFTHbC0V6rF7dnn2QwwCLNRSRuTpHrPabvT3+TikJAz\nQ2EQXaKC2iIZPziRyQbWfhgtRimFI3IC6/FyuwYc5cEoXw81rfAfDUHmml99WlzX\n3smHah7/4KiNy8AQoUX3A0RrfMC4C0e5rOrsTC/KuZzSVJdbm11+is82wmO00zCJ\nnWLwnVABTQElhFF1EBAYT1hPuTQhY56Al+PyXwIDAQABAoIBAFoXN15LhqIdQUgv\nFXkpmeQjit9TBXi5uZrqoNwOqRCLKXPBv1xZqvi8k28vQ3WJcaeXRub7WlW7udc6\nupJeMXv92e8SzDXhSSBPuVCs83/WFMl5Lf9qIPrZ0+ARaQhAVhpje/hG9gZMaXzT\nTfItHZmdN3JdqlTksjrmsnk1oPw6V5JgjU7t6nl3ZGwxtunmeaLNAgUi6hCLtOCU\n6KSFMdW0UKh9//CA5Zkr2zxAWVR9cIcVNPkHeOluhhNjFubSbtK37SQPPe1qPveq\ncwG+zngh+lmcrG49EeZGcWAXqEXCCIi2aPT4QjwLrQxKne6IaXTeYz/T8AXh7mQf\nz/5uV1kCgYEA9Bd7NfV3b7/p2ZkL2cpbMP/tk8dmvYRkh43fY62AH5OkpGpryrL5\n7RqGPTqvwSZB7aebS5sDNI3+9/tIjOUHW2kf1ny8yT1Y/qNkwPQRDY+5ETI+SoGa\nIbmVWvC2Y2NwnnIx9lKwWqGsz/EXIOkuxnXfLP3nGUgIuqzK1EgS8YsCgYEAuw0H\nOiq13BpW1QqhWQRW2+B4cHvmXATQ7U/WpbKX2QUjU19rim0/DGms3Knv9U02ciWD\n8FvGPy4hQad8nP/rsbEiGWlJ2uzerXWEQMDRRPN5AJEotXEQDA2/soa7vbciTXxq\nfdRxfvGvkpQE+TDjuGPcRfBsRb879o/9g+mxNP0CgYANRx23sLOfi5P/9zhSz5Qo\nVTOqP0WSd5o0WX5WYMDAdvqUywk0DIpV4IR+3itjWV5qvBxRf4wsFrFQ8gVfTLIa\nwdwugbiPRdwKdf7sFBq9Xx0VF2OWD/i/buX1/XQecfFVXSbknFjlhTfuU9ILQ0P9\nHbpXKzSgBnAbH30lEQqewwKBgFsBtbh5O05BimnQ6Du1PsVv62le/u9acIRlyduI\njxTJySwxStNo37ocWDxsehFxZcIXup/hJw1qVkfpQ1nnsjccJakTbxmTEax3dsdC\niQ7xHrhF5/aPce1Lay9jGkjtp0Tn+bALAsVutautVNYhEUqPW4azuRoeNwB5gjEC\nLHPJAoGBALqHHN6xFmvnNMgFyXZbuzDALmBKo2AJFOrIbAQopKePzvADosMSIIsI\n8eYOVrjUMyFpw3XoOPj9AfkxZjanuGwDYGxj624Na7nFU8xGDZR5rGkBHlshUKek\nfDOpNhGiKKkM/JMe+wSElTqN5lq7C5s4dubkaqIOXIzDvGupEvOj\n-----END RSA PRIVATE KEY-----"
},
"sensitive_attributes": [
[
{
"type": "get_attr",
"value": "private_key"
}
]
]
}
]
},
{
"mode": "managed",
"type": "ncloud_nat_gateway",
"name": "nat_gateway",
"provider": "provider[\"registry.terraform.io/navercloudplatform/ncloud\"]",
"instances": [
{
"schema_version": 0,
"attributes": {
"description": null,
"id": "23743493",
"name": "ng18f1372df9c",
"nat_gateway_no": "23743493",
"private_ip": "10.0.4.6",
"public_ip": "223.130.153.149",
"public_ip_no": "23743511",
"subnet_name": "sn18f1372b0d0",
"subnet_no": "145859",
"vpc_no": "61298",
"zone": "KR-1"
},
"sensitive_attributes": [],
"dependencies": [
"ncloud_subnet.nat_subnet",
"ncloud_vpc.ossca_vpc"
]
}
]
},
{
"mode": "managed",
"type": "ncloud_public_ip",
"name": "public_ip",
"provider": "provider[\"registry.terraform.io/navercloudplatform/ncloud\"]",
"instances": [
{
"schema_version": 0,
"attributes": {
"description": "",
"id": "23743576",
"instance_no": "23743576",
"internet_line_type": null,
"kind_type": null,
"public_ip": "101.79.10.78",
"public_ip_no": "23743576",
"server_instance_no": "23780377",
"zone": null
},
"sensitive_attributes": [],
"private": "bnVsbA==",
"dependencies": [
"data.ncloud_server_image.server_image",
"ncloud_login_key.loginkey",
"ncloud_server.public_server1",
"ncloud_subnet.public_subnet",
"ncloud_vpc.ossca_vpc"
]
}
]
},
{
"mode": "managed",
"type": "ncloud_route",
"name": "route",
"provider": "provider[\"registry.terraform.io/navercloudplatform/ncloud\"]",
"instances": [
{
"schema_version": 0,
"attributes": {
"destination_cidr_block": "0.0.0.0/0",
"id": "route-2827765935",
"is_default": false,
"route_table_no": "130035",
"target_name": "ng18f1372df9c",
"target_no": "23743493",
"target_type": "NATGW",
"vpc_no": "61298"
},
"sensitive_attributes": [],
"private": "bnVsbA==",
"dependencies": [
"ncloud_nat_gateway.nat_gateway",
"ncloud_route_table.route_table",
"ncloud_subnet.nat_subnet",
"ncloud_vpc.ossca_vpc"
]
}
]
},
{
"mode": "managed",
"type": "ncloud_route_table",
"name": "route_table",
"provider": "provider[\"registry.terraform.io/navercloudplatform/ncloud\"]",
"instances": [
{
"schema_version": 0,
"attributes": {
"description": "",
"id": "130035",
"is_default": false,
"name": "rt18f1372b0a7",
"route_table_no": "130035",
"supported_subnet_type": "PRIVATE",
"vpc_no": "61298"
},
"sensitive_attributes": [],
"private": "bnVsbA==",
"dependencies": [
"ncloud_vpc.ossca_vpc"
]
}
]
},
{
"mode": "managed",
"type": "ncloud_route_table_association",
"name": "route_table_as",
"provider": "provider[\"registry.terraform.io/navercloudplatform/ncloud\"]",
"instances": [
{
"schema_version": 0,
"attributes": {
"id": "130035:145855",
"route_table_no": "130035",
"subnet_no": "145855"
},
"sensitive_attributes": [],
"private": "bnVsbA==",
"dependencies": [
"ncloud_route_table.route_table",
"ncloud_subnet.private_subnet_kr1",
"ncloud_vpc.ossca_vpc"
]
}
]
},
{
"mode": "managed",
"type": "ncloud_server",
"name": "private_server1",
"provider": "provider[\"registry.terraform.io/navercloudplatform/ncloud\"]",
"instances": [
{
"schema_version": 0,
"attributes": {
"access_control_group_configuration_no_list": null,
"base_block_storage_disk_detail_type": "SSD",
"base_block_storage_disk_type": "NET",
"base_block_storage_size": null,
"cpu_count": 2,
"description": "",
"fee_system_type_code": null,
"id": "23780374",
"init_script_no": "",
"instance_no": "23780374",
"internet_line_type": null,
"is_encrypted_base_block_storage_volume": null,
"is_fee_charging_monitoring": null,
"is_protect_server_termination": false,
"login_key_name": "osscakey",
"member_server_image_no": null,
"memory_size": 4294967296,
"name": "ossca-priv1server",
"network_interface": [
{
"network_interface_no": "3974532",
"order": 0,
"private_ip": "10.0.2.6",
"subnet_no": "145855"
}
],
"placement_group_no": "",
"platform_type": "LNX64",
"port_forwarding_external_port": null,
"port_forwarding_internal_port": null,
"port_forwarding_public_ip": null,
"private_ip": null,
"public_ip": "",
"raid_type_name": null,
"region": null,
"server_image_name": null,
"server_image_product_code": "SW.VSVR.OS.LNX64.ROCKY.0808.B050",
"server_product_code": "SVR.VSVR.HICPU.C002.M004.NET.SSD.B050.G002",
"subnet_no": "145855",
"tag_list": [],
"timeouts": null,
"user_data": null,
"vpc_no": "61298",
"zone": "KR-1"
},
"sensitive_attributes": [],
"private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjozNjAwMDAwMDAwMDAwLCJkZWxldGUiOjMwMDAwMDAwMDAwMH19",
"dependencies": [
"data.ncloud_server_image.server_image",
"ncloud_login_key.loginkey",
"ncloud_subnet.private_subnet_kr1",
"ncloud_vpc.ossca_vpc"
]
}
]
},
{
"mode": "managed",
"type": "ncloud_server",
"name": "private_server2",
"provider": "provider[\"registry.terraform.io/navercloudplatform/ncloud\"]",
"instances": [
{
"schema_version": 0,
"attributes": {
"access_control_group_configuration_no_list": null,
"base_block_storage_disk_detail_type": "SSD",
"base_block_storage_disk_type": "NET",
"base_block_storage_size": null,
"cpu_count": 2,
"description": "",
"fee_system_type_code": null,
"id": "23780380",
"init_script_no": "",
"instance_no": "23780380",
"internet_line_type": null,
"is_encrypted_base_block_storage_volume": null,
"is_fee_charging_monitoring": null,
"is_protect_server_termination": false,
"login_key_name": "osscakey",
"member_server_image_no": null,
"memory_size": 4294967296,
"name": "ossca-priv2server",
"network_interface": [
{
"network_interface_no": "3974534",
"order": 0,
"private_ip": "10.0.3.6",
"subnet_no": "145857"
}
],
"placement_group_no": "",
"platform_type": "LNX64",
"port_forwarding_external_port": null,
"port_forwarding_internal_port": null,
"port_forwarding_public_ip": null,
"private_ip": null,
"public_ip": "",
"raid_type_name": null,
"region": null,
"server_image_name": null,
"server_image_product_code": "SW.VSVR.OS.LNX64.ROCKY.0808.B050",
"server_product_code": "SVR.VSVR.HICPU.C002.M004.NET.SSD.B050.G002",
"subnet_no": "145857",
"tag_list": [],
"timeouts": null,
"user_data": null,
"vpc_no": "61298",
"zone": "KR-2"
},
"sensitive_attributes": [],
"private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjozNjAwMDAwMDAwMDAwLCJkZWxldGUiOjMwMDAwMDAwMDAwMH19",
"dependencies": [
"data.ncloud_server_image.server_image",
"ncloud_login_key.loginkey",
"ncloud_subnet.private_subnet_kr2",
"ncloud_vpc.ossca_vpc"
]
}
]
},
{
"mode": "managed",
"type": "ncloud_server",
"name": "public_server1",
"provider": "provider[\"registry.terraform.io/navercloudplatform/ncloud\"]",
"instances": [
{
"schema_version": 0,
"attributes": {
"access_control_group_configuration_no_list": null,
"base_block_storage_disk_detail_type": "SSD",
"base_block_storage_disk_type": "NET",
"base_block_storage_size": null,
"cpu_count": 2,
"description": "",
"fee_system_type_code": null,
"id": "23780377",
"init_script_no": "",
"instance_no": "23780377",
"internet_line_type": null,
"is_encrypted_base_block_storage_volume": null,
"is_fee_charging_monitoring": null,
"is_protect_server_termination": false,
"login_key_name": "osscakey",
"member_server_image_no": null,
"memory_size": 4294967296,
"name": "ossca-pubserver",
"network_interface": [
{
"network_interface_no": "3974533",
"order": 0,
"private_ip": "10.0.1.6",
"subnet_no": "145858"
}
],
"placement_group_no": "",
"platform_type": "LNX64",
"port_forwarding_external_port": null,
"port_forwarding_internal_port": null,
"port_forwarding_public_ip": null,
"private_ip": null,
"public_ip": "101.79.10.78",
"raid_type_name": null,
"region": null,
"server_image_name": null,
"server_image_product_code": "SW.VSVR.OS.LNX64.ROCKY.0808.B050",
"server_product_code": "SVR.VSVR.HICPU.C002.M004.NET.SSD.B050.G002",
"subnet_no": "145858",
"tag_list": [],
"timeouts": null,
"user_data": null,
"vpc_no": "61298",
"zone": "KR-1"
},
"sensitive_attributes": [],
"private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjozNjAwMDAwMDAwMDAwLCJkZWxldGUiOjMwMDAwMDAwMDAwMH19",
"dependencies": [
"data.ncloud_server_image.server_image",
"ncloud_login_key.loginkey",
"ncloud_subnet.public_subnet",
"ncloud_vpc.ossca_vpc"
]
}
]
},
{
"mode": "managed",
"type": "ncloud_subnet",
"name": "lb_subnet",
"provider": "provider[\"registry.terraform.io/navercloudplatform/ncloud\"]",
"instances": [
{
"schema_version": 0,
"attributes": {
"id": "145856",
"name": "sn18f1372b0c2",
"network_acl_no": "92652",
"subnet": "10.0.5.0/24",
"subnet_no": "145856",
"subnet_type": "PUBLIC",
"usage_type": "LOADB",
"vpc_no": "61298",
"zone": "KR-1"
},
"sensitive_attributes": [],
"dependencies": [
"ncloud_vpc.ossca_vpc"
]
}
]
},
{
"mode": "managed",
"type": "ncloud_subnet",
"name": "nat_subnet",
"provider": "provider[\"registry.terraform.io/navercloudplatform/ncloud\"]",
"instances": [
{
"schema_version": 0,
"attributes": {
"id": "145859",
"name": "sn18f1372b0d0",
"network_acl_no": "92652",
"subnet": "10.0.4.0/24",
"subnet_no": "145859",
"subnet_type": "PUBLIC",
"usage_type": "NATGW",
"vpc_no": "61298",
"zone": "KR-1"
},
"sensitive_attributes": [],
"dependencies": [
"ncloud_vpc.ossca_vpc"
]
}
]
},
{
"mode": "managed",
"type": "ncloud_subnet",
"name": "private_subnet_kr1",
"provider": "provider[\"registry.terraform.io/navercloudplatform/ncloud\"]",
"instances": [
{
"schema_version": 0,
"attributes": {
"id": "145855",
"name": "tf-private-1",
"network_acl_no": "92652",
"subnet": "10.0.2.0/24",
"subnet_no": "145855",
"subnet_type": "PRIVATE",
"usage_type": "GEN",
"vpc_no": "61298",
"zone": "KR-1"
},
"sensitive_attributes": [],
"dependencies": [
"ncloud_vpc.ossca_vpc"
]
}
]
},
{
"mode": "managed",
"type": "ncloud_subnet",
"name": "private_subnet_kr2",
"provider": "provider[\"registry.terraform.io/navercloudplatform/ncloud\"]",
"instances": [
{
"schema_version": 0,
"attributes": {
"id": "145857",
"name": "tf-private-2",
"network_acl_no": "92652",
"subnet": "10.0.3.0/24",
"subnet_no": "145857",
"subnet_type": "PRIVATE",
"usage_type": "GEN",
"vpc_no": "61298",
"zone": "KR-2"
},
"sensitive_attributes": [],
"dependencies": [
"ncloud_vpc.ossca_vpc"
]
}
]
},
{
"mode": "managed",
"type": "ncloud_subnet",
"name": "public_subnet",
"provider": "provider[\"registry.terraform.io/navercloudplatform/ncloud\"]",
"instances": [
{
"schema_version": 0,
"attributes": {
"id": "145858",
"name": "tf-public-1",
"network_acl_no": "92652",
"subnet": "10.0.1.0/24",
"subnet_no": "145858",
"subnet_type": "PUBLIC",
"usage_type": "GEN",
"vpc_no": "61298",
"zone": "KR-1"
},
"sensitive_attributes": [],
"dependencies": [
"ncloud_vpc.ossca_vpc"
]
}
]
},
{
"mode": "managed",
"type": "ncloud_vpc",
"name": "ossca_vpc",
"provider": "provider[\"registry.terraform.io/navercloudplatform/ncloud\"]",
"instances": [
{
"schema_version": 0,
"attributes": {
"default_access_control_group_no": "172647",
"default_network_acl_no": "92652",
"default_private_route_table_no": "130034",
"default_public_route_table_no": "130033",
"id": "61298",
"ipv4_cidr_block": "10.0.0.0/16",
"name": "ossca-vpc",
"vpc_no": "61298"
},
"sensitive_attributes": []
}
]
}
],
"check_results": null
}
다음과 같이 Terraform state 파일이 생성되는 것을 볼 수 있다.
'Infra > Terraform' 카테고리의 다른 글
[OSSCA] Terraform Provider 개발(1) - Go API 분석하기 (0) | 2024.07.29 |
---|---|
[OSSCA] Terraform Provider SDK 와 Framework 버전 차이를 알아보자 (1) | 2024.07.24 |
[OSSCA] Terraform Provider 살펴보기 (2) | 2024.07.23 |
[OSSCA] NCP를 이용하여 인프라 설정하기 (0) | 2024.07.22 |
[OSSCA] Terraform 이란? (0) | 2024.07.22 |
보안 전공 개발자지만 대학로에서 살고 싶어요
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!