수작업을 자동화해서 오류와 작업시간을 줄여 봅시다.
작업 순서는?
명령 내릴 서버를 1대 만들자.
명령 서버에 테라폼을 설치하고, 테라폼으로 VPC 1개 만들어보자.
1
네이버 클라우드로 로그온 한다.
콘솔로 로그온해 작업용 서버를 1대를 만들어보자.
서버를 만들기 위해 VPC를 하나 만들어야 한다.
디폴트 VPC가 없다.
VPC 1개를 만들자.
VPC 1개와 퍼블릭 서브넷 1개를 만든다.
VPC 생성
// 네이버 클라우드는 디폴트 VPC가 없다.
VPC는 무조건 만들어야 서버 생성이 가능하다.
KR1
public subnet 1개도 생성
2
이후 서버 생성
Server > Server > +서버 생성 > 로키 리눅스나 우분트 생성해보자.
추가
공인 IP : 새로운 공인 IP 할당
다음
새로운 인증키 생성
agame-command1
서버 생성
3
서버 로그인
passwd
g1!
1
https://www.terraform.io/downloads.html
우분트 가능
로키 리눅스는 아마존 리눅스 테라폼 설치
2
centos 경우
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
sudo yum -y install terraform
3
terraform -v
[root@s180 d9 ec005 f ~]# terraform -v
Terraform v1.1.9
on linux_amd64
1
리눅스 서버 로그인
2
sample 위치
https://github.com/NaverCloudPlatform/terraform-provider-ncloud/tree/master/examples
3
다운로드
wget https://github.com/NaverCloudPlatform/terraform-provider-ncloud/archive/refs/heads/master.zip
unzip master.zip
1
cd /root/terraform-provider-ncloud-main/examples/vpc/scenario01
# ls
main.tf variables.tf versions.tf
2
포털 > 마이페이지 > 계정 관리 > 인증키 관리에서 키 확인에서
access_key와 secret_key를 확인해 복사해 놓는다.
3
테라폼 파일 내용 확인
# ls
main.tf variables.tf versions.tf
# more *.tf
::::::::::::::
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
}
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)
}
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.B100"
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}"
}
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}"
}
}
}
::::::::::::::
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"
}
::::::::::::::
versions.tf
::::::::::::::
terraform {
required_providers {
ncloud = {
source = "navercloudplatform/ncloud"
}
}
required_version = ">= 0.13"
}
4
curl ifconfig.io
5
참고
CIDR 서브넷
https://www.terraform.io/language/functions/cidrsubnet
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 이다.
6
terraform init
terraform plan
terraform apply -auto-approve
삭제
terraform destroy --auto-approve
8
콘솔에서 확인
https://brunch.co.kr/@topasvga/2450
감사합니다.