brunch

1. 테라폼 실습환경-2025-08

by Master Seo

# 기업에서 가장 많이 요청하는 기술 테라폼 배워봅시다.

# 테라폼으로 네트워크 VPC 만들어보자.

# 테라폼으로 서버 생생해 보자.

# 기업에서 가장 많이 사용하는 인프라 관리 도구이다. 코드로 인프라를 관리한다.



장점

빠르게 생성한다 - 오후 5시에 업무 요청이 와도 퇴근 가능하다.

일관성 있게 생성한다 - ISMS , 전자금용거래법 점검시 대응 가능하다.

네이버 클라우드 , AWS , Google 클라우드등 다른 CSP도 코드로 같이 관리 가능하다.

테리폼1.jfif



<1> 콘솔로 명령용 서버용 네트워크와 명령 서버 1대 생성

<2> 로키 리눅스 인경우 아마존 리눅스용 테라폼 설치

<3> 우분트인 경우 테라폼 설치법 (선택)

<4> 코드 다운 로드

<5> 테라폼으로 VPC만 생성하기

<6> 테라폼으로 서버 생성하기

<7> 테라폼으로 인증키 연결 하기

<8> 테라폼으로 NACL 수정 하기

<9> 콘솔 로그인해서 생성 확인

<10> 참고 사이트










<1> 콘솔로 명령용 서버용 네트워크와 명령 서버 1대 생성




1

슬라이드1.JPG


ppt첨부





2

콘솔 로그인

https://www.ncloud.com/



2

# 콘솔로 네트워크 생성


VPC > VPC Management > VPC 생성

game-vpc

192.168.0.0/16


Subnet

pub1

192.168.0.0/24

일반




3

# 서버 생성


# 실습시 주의점

가급적 KVM(3세대)으로 VM 생성하자.

XEN 기반은 VM은 쿼터가 설정 되어 있어 생성이 안된다.



Sever > 서버 생성 > 로키 리눅스 설치

rocky-9.4-base

High-CPU

command1

새로운 공인 IP 할당

새로운 인증키 생성

인증키 이름 알아두세요. 이후, 테라폼 코드 작성할때 사용합니다.

ncp-06-23

50 인증키.png



4

# 서버 > ACG 확인만


22, 3389 디폴트로 모두 허용되어 있음.

아웃 바운드는 모두 허용 되어 있음.


# 인 바운드 ACG 디폴트 - ssh와 windows 원격접속은 디폴트로 허용 되어 있다.

TCP 0.0.0.0/0 3389

TCP 0.0.0.0/0 22



# 아웃바운드 ACG는 디폴트로 모두 나가도록 되어 있다.

ICMP 0.0.0.0/0

UDP 0.0.0.0/0 1-65535

TCP 0.0.0.0/0 1-65535




5

putty로 로그인

root

passwd


서버 관리 및 설정 변경 > 관리자 비밀번호 확인





<2> 로키 리눅스 인경우 아마존 리눅스용 테라폼 설치



# 로키 리눅스로 사용


1

Linux > Amazon Linux


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 version


Terraform v1.12.2

on linux_amd64





https://developer.hashicorp.com/terraform/install#Linux






<3> 우분트인 경우 테라폼 설치법 (선택)


https://developer.hashicorp.com/terraform/install#Linux





<4> 코드 다운 로드


1

# 샘플 파일 다운로드하기


wget https://github.com/NaverCloudPlatform/terraform-provider-ncloud/archive/refs/heads/master.zip


unzip master.zip


2

# 샘플 경로 가서 확인하기


cd /root/terraform-provider-ncloud-main/examples/vpc/scenario01/


ls

main.tf variables.tf versions.tf



3

# 참고 사이트

https://github.com/NaverCloudPlatform/terraform-provider-ncloud/tree/master/examples/vpc/scenario02





4

# 파일 확인 3개


ls

main.tf

variables.tf

versions.tf


# Sample




# 기타

https://brunch.co.kr/@topasvga/4687




5

# 파일 3개 내용을 확인해보자.

# 프로바이더 확인 - 네이버 클라우드

# 버전 확인


scenario01]# more versions.tf


terraform {

required_providers {

ncloud = {

source = "navercloudplatform/ncloud"

}

}

required_version = ">= 0.13"

}




6

# 변수 확인


scenario01]# more variables.tf


variable name_scn01 {

default = "tf-scn01"

}

variable client_ip {

default = "YOUR_CLIENT_IP"

}

variable access_key {

default = "YOUR_ACCESS_KEY"

}

variable secret_key {

default = "YOUR_SECRET_KEY"

}



# 변수 파일 설명

디폴트 이름

클라이언트 ip : 내 pc의 공인 NAT IP - 웹에서 myip 확인사이트에서 확인



https://www.whatismyip.com/


# Access-Key, Secret-key 확인 입력.


계정 관리 > 인증 번호 전송

인증키 관리 > 신규 API 인증키 생

access_key , secret_key 복사해 놓는다.




# vi variables.tf


variable name_scn01 {

default = "tf-scn01"

}


variable client_ip {

default = "210.2.2.2" # 내 pc ip = ssh로 원격 접속할 때 허용하는 ip

}


variable access_key {

default = "sQqP" # access_key 입력

}


variable secret_key {

default = "iOFMFRfO" # secret_key 입력

}






7

# main.tf 파일을 backup 디렉토리에 백업하기

# main.tf에 네트워크와 서버 생성 테라폼 코드가 같이 있다.

# 서버 부분은 우선 삭제하고, 네트워크만 생성해보자.


mkdir backup

cp main.tf backup/



vi main.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

}


# 라소스는 생성하는 부분이다.

# 로그인키는 생성하지 않고 기존의 키를 사용할 것이다.

# 아래 3줄 삭제


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"

}


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)

}


# 아래 서버 부분 삭제

# 네트워크 부분만 우선 만들어 보자, 서버 부분은 2차에 만들자.


resource "ncloud_server" "server_scn_01" {

subnet_no = ncloud_subnet.subnet_scn_01.id

name = var.name_scn01

server_image_product_code = "SW.VSVR.OS.LNX64.CNTOS.0703.B050"

login_key_name = ncloud_login_key.key_scn_01.key_name

}ㅇㅇㅇㅇㅇ

resource "ncloud_public_ip" "public_ip_scn_01" {

server_instance_no = ncloud_server.server_scn_01.id

description = "for ${var.name_scn01}"

}


# NACL 부분


locals {

scn01_inbound = [

[1, "TCP", "0.0.0.0/0", "80", "ALLOW"],

[2, "TCP", "0.0.0.0/0", "443", "ALLOW"],

[3, "TCP", "${var.client_ip}/32", "22", "ALLOW"],

[4, "TCP", "${var.client_ip}/32", "3389", "ALLOW"],

[5, "TCP", "0.0.0.0/0", "32768-65535", "ALLOW"],

[197, "TCP", "0.0.0.0/0", "1-65535", "DROP"],

[198, "UDP", "0.0.0.0/0", "1-65535", "DROP"],

[199, "ICMP", "0.0.0.0/0", null, "DROP"],

]


scn01_outbound = [

[1, "TCP", "0.0.0.0/0", "80", "ALLOW"],

[2, "TCP", "0.0.0.0/0", "443", "ALLOW"],

[3, "TCP", "${var.client_ip}/32", "1000-65535", "ALLOW"],

[197, "TCP", "0.0.0.0/0", "1-65535", "DROP"],

[198, "UDP", "0.0.0.0/0", "1-65535", "DROP"],

[199, "ICMP", "0.0.0.0/0", null, "DROP"]

]

}


resource "ncloud_network_acl_rule" "network_acl_01_rule" {

network_acl_no = ncloud_vpc.vpc_scn_01.default_network_acl_no

dynamic "inbound" {

for_each = local.scn01_inbound

content {

priority = inbound.value[0]

protocol = inbound.value[1]

ip_block = inbound.value[2]

port_range = inbound.value[3]

rule_action = inbound.value[4]

description = "for ${var.name_scn01}"

}

}


dynamic "outbound" {

for_each = local.scn01_outbound

content {

priority = outbound.value[0]

protocol = outbound.value[1]

ip_block = outbound.value[2]

port_range = outbound.value[3]

rule_action = outbound.value[4]

description = "for ${var.name_scn01}"

}

}

}




# 설명 , CIDR 서브넷

https://www.terraform.io/language/functions/cidrsubnet



subnet = cidrsubnet(ncloud_vpc.vpc_scn_01.ipv4_cidr_block, 8, 1)

/16에 + 8 = /24

10.0.1.0/24이다.


# 참고 - Cidr subnet 기능

https://www.terraform.io/docs/language/functions/cidrsubnet.html






<5> 테라폼으로 VPC 생성하기


1

cd /root/terraform-provider-ncloud-main/examples/vpc/scenario01/


2

terraform init

terraform plan

terraform apply -auto-approve



또는


terraform apply

Enter a value:

yes



3

결과?

vpc , 서브넷이 만들어진다.

콘솔로 확인하자~


ipv4_cidr_block = "10.0.0.0/16"


subnet = cidrsubnet(ncloud_vpc.vpc_scn_01.ipv4_cidr_block, 8, 1)

/16에 + 8 = /24

10.0.1.0/24 이다.



4

# zone 을 KR-2 에서 KR-1 으로 변경해보자.


vi main.tf

terraform apply -auto-approve




<6> 테라폼으로 서버 생성하기


1

# 서버 생성해보자.


# backup 폴더에 백업해둔 main.tf 파일을 현재 폴더에 복사해보자.


cp backup/main.tf .



2

# 테라폼으로 서버를 만들기 위한 유틸 설치


# 네이버 클라우드 cli 다운로드 하기


cd

wget https://www.ncloud.com/api/support/download/files/cli/CLI_1.1.23_20241121.zip

unzip CLI_1.1.23_20241121.zip

cd CLI_1.1.23_20241121/

cd cli_linux/

cp ncloud /usr/bin/

ncloud help



# 설정하기


ncloud configure



# 서버 이미지 리스트 확인하기


ncloud vserver getServerImageProductList --regionCode KR


ncloud vserver getServerImageProductList --regionCode KR --platformTypeCodeList LNX64


SW.VSVR.OS.LNX64.ROCKY.0808.B050

SW.VSVR.OS.LNX64.ROCKY.0810.B050



cd /root/terraform-provider-ncloud-main/examples/vpc/scenario01/


vi main.tf


resource "ncloud_server" "server_scn_01" {

subnet_no = ncloud_subnet.subnet_scn_01.id

name = var.name_scn01

server_image_product_code = "SW.VSVR.OS.LNX64.CNTOS.0703.B050"

# login_key_name = ncloud_login_key.key_scn_01.key_name

}






# 참고

ncloud vserver getServerImageProductList \

--regionCode KR \

--blockStorageSize 50 \

--platformTypeCodeList LNX64 WND64







<7> 테라폼으로 인증키 연결 하기


1

# 기존 키 사용하도록 변경하기

이미 콘솔에서 만든 키를 Terraform에 등록하지 않고 존재하는 키를 서버에 연결만 할 수도 있습니다. 이 경우:


1) ncloud_login_key 리소스를 삭제


2) server 리소스에서 login_key_name을 하드코딩:


resource "ncloud_server" "server_scn_01" {

...

login_key_name = "terraform-login-key" # 기존에 있는 키 이름

}

Terraform은 키 생성을 생략하고 해당 이름의 키를 사용하는 방식입니다.



# 인증키 생성 부분 삭제


vi main.tf


resource "ncloud_login_key" "key_scn_01" {

key_name = var.name_scn01

}



# 32 번째 줄 수정


# login_key_name = ncloud_login_key.key_scn_01.key_name

login_key_name = "ncp-06-23)



terraform apply -auto-approve






<8> 테라폼으로 NACL 수정 하기



1

NACL 수정


scn01_inbound = [

[1, "TCP", "0.0.0.0/0", "80", "ALLOW"],

[2, "TCP", "0.0.0.0/0", "443", "ALLOW"],

[3, "TCP", "${var.client_ip}/32", "22", "ALLOW"],

[4, "TCP", "${var.client_ip}/32", "3389", "ALLOW"],

[5, "TCP", "0.0.0.0/0", "32768-65535", "ALLOW"],

[197, "TCP", "0.0.0.0/0", "1-65535", "ALLOW"],

[198, "UDP", "0.0.0.0/0", "1-65535", "ALLOW"],

[199, "ICMP", "0.0.0.0/0", null, "ALLOW"],

]

scn01_outbound = [

[1, "TCP", "0.0.0.0/0", "80", "ALLOW"],

[2, "TCP", "0.0.0.0/0", "443", "ALLOW"],

[3, "TCP", "${var.client_ip}/32", "1000-65535", "ALLOW"],

[197, "TCP", "0.0.0.0/0", "1-65535", "ALLOW"],

[198, "UDP", "0.0.0.0/0", "1-65535", "ALLOW"],

[199, "ICMP", "0.0.0.0/0", null, "ALLOW"]

]

}



terraform apply -auto-approve



2

서버 접속






<9> 콘솔 로그인해서 생성 확인


1

VPC = tf-scn01


2

subnet

10.0.1.0/24 이다.


3

Public route table

0.0.0.0/0 IGW


4

private route table

없음


5

서버 확인





<10> 참고 사이트


1

https://blog.naver.com/n_cloudplatform/222189643849



2

https://registry.terraform.io/providers/NaverCloudPlatform/ncloud/latest/docs




3

https://brunch.co.kr/@topasvga/2420




4

Windows PC 환경에서 테라폼 사용하기


# Windows PC를 명령서버로 사용하기


https://brunch.co.kr/@topasvga/2446




5

참고

https://brunch.co.kr/@topasvga/3828


cd /root/terraform-provider-ncloud-main/examples/vpc/scenario01/



6


다음


테라폼으로 네이버 클라우드 쿠버네티스 생성하기


https://brunch.co.kr/@topasvga/4688



감사합니다.

keyword