빠르게 생성한다 - 오후 5시에 업무 요청이 와도 퇴근 가능하다.
일관성 있게 생성한다 - ISMS , 전자금용거래법 점검시 대응 가능하다.
네이버 클라우드 , AWS , Google 클라우드등 다른 CSP도 코드로 같이 관리 가능하다.
1
ppt첨부
2
콘솔 로그인
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
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
서버 관리 및 설정 변경 > 관리자 비밀번호 확인
# 로키 리눅스로 사용
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
https://developer.hashicorp.com/terraform/install#Linux
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 확인사이트에서 확인
# 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
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
1
# 서버 생성해보자.
# 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
# login_key_name = ncloud_login_key.key_scn_01.key_name
}
# 참고
ncloud vserver getServerImageProductList \
--regionCode KR \
--blockStorageSize 50 \
--platformTypeCodeList LNX64 WND64
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
terraform apply -auto-approve
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
서버 접속
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
서버 확인
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
감사합니다.