brunch

You can make anything
by writing

C.S.Lewis

by Master Seo Oct 26. 2021

1. 테라폼-네이버 클라우드 VPC생성-2024-05


테라폼으로  VPC 생성해봅시다~


<1>  콘솔로 네트워크 생성과 작업용 서버 1대 생성

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

<3> 우분트인 경우 테라폼 설치법

<4>  코드 다운 로드

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

<6> 콘솔 로그인해서 확인 

<7>  참고 사이트




<1>  콘솔로 네트워크 생성과 작업용 서버 1대 생성



1

https://www.ncloud.com/



2

콘솔로 네트워크 생성


VPC > VPC Management > VPC 생성

192.168.0.0/16


Subnet

192.168.0.0/24



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

새로운 공인 IP 할당으로 변경 >  새로운 인증키 생성



3

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


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-6553




5

putty로 로그인

root

passwd





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


네이버 클라우드경우 Centos 없어짐.


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


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


2

terraform version

Terraform v1.8.4

on linux_amd64




<3> 우분트인 경우 테라폼 설치법


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



<4>  코드 다운 로드



1

사이트

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



2

샘플 파일 다운로드하기

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

unzip master.zip



3

샘플 경로 가서 확인하기


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



4

파일 확인 3개

ls

main.tf  variables.tf  versions.tf



5

콘솔 > 마이페이지 > 인증키 관리에서 키 확인에서  

access_key와 secret_key를 확인해 복사해 놓는다.



6

more versions.tf


terraform {

  required_providers {

    ncloud = {

      source = "navercloudplatform/ncloud"

    }

  }

  required_version = ">= 1.0.9"

}


//   required_version = ">= 1.0.9"  =  테라폼 버전 입력




7

vi variables.tf


variable name_scn01 {

  default = "tf-scn01"

}


variable client_ip {

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

}


variable access_key {

  default = "sQqP"  #  access_key 입력

}


variable secret_key {

  default = "iOFMFRfO"  # secret_key 입력

}





8

more 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)

}



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이다.




9

참고

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 , 서브넷이 만들어진다. 

서버도 만들어진다.  3분 20초 걸림.


  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 이다.


삭제

terraform destroy --auto-approve





<6> 콘솔 로그인해서 확인 



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

서버 확인




<7>  참고 사이트



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


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





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



감사합니다.

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari