brunch

You can make anything
by writing

C.S.Lewis

by Master Seo Oct 26. 2021

40. 테라폼-네이버 클라우드 VPC 생성하기


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


<1>  작업용 서버 1대 설치

<2>  테라폼 설치

<3>  코드 다운 로드

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

<5>  참고 사이트



<1>  작업용 서버 1대 설치


1

Sever >  서버 생성 >  centos 7.8 >  새로운 공인 IP 할당으로 변경 >  새로운 인증키 생성

teraform1   >    teraform1.pem


2

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


3

서버 > ACG에서  ssh 허용

아웃  바운드 허용 필요

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


4

putty로 로그인

root




<2> 테라폼 설치


1

다운로드 사이트

https://www.terraform.io/downloads.html


wget https://releases.hashicorp.com/terraform/1.0.9/terraform_1.0.9_linux_amd64.zip


2

unzip terraform_1.0.9_linux_amd64.zip && mv terraform /usr/bin


[root@s17 cb6 b02653 ~]# terraform version

Terraform v1.0.9




<3>  코드 다운 로드


사이트

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


1

샘플 파일 다운로드하기

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

unzip master.zip



2

샘플 경로 가서 확인하기


[root@s17 cb6 b02653 scenario01]# pwd

/root/terraform-provider-ncloud-master/examples/vpc/scenario01



3

파일 확인 3개

[root@s17 cb6 b02653 scenario01]# ls

main.tf  variables.tf  versions.tf



4

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

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



5

[root@s17 cb6 b02653 scenario01]# ls

main.tf  terraform.tfstate  variables.tf  versions.tf

[root@s17 cb6 b02653 scenario01]#

[root@s17 cb6 b02653 scenario01]# more versions.tf

terraform {

  required_providers {

    ncloud = {

      source = "navercloudplatform/ncloud"

    }

  }

  required_version = ">= 1.0.9"

}


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



6

[root@s17 cb6 b02653 scenario01]# more variables.tf

variable name_scn01 {

  default = "tf-scn01"

}


variable client_ip {

  default = "210.1.1.1"

}


variable access_key {

  default = "sQqP"

}


variable secret_key {

  default = "iOFMFRfO"

}


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

//  access_key 입력

// secret_key 입력



7

[root@s17 cb6 b02653 scenario01]# 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}"

    }

  }

}



// vpc 설정하는 내용들

resource "ncloud_vpc" "vpc_scn_01" {

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


참고

Cidr subnet 기능

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




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


terraform init

terraform plan

terraform apply


Enter a value:

yes


// 서버 이미지가 없어 안된다고 에러 나온다.   해당 부분은 main.tf에서 삭제 후 재 실행

// vpc는 만들어진다.

// 이미지는 나중에 수정하면 서버도 만들어질 거 같다.





<5> 확인



콘솔 로그인해서 확인



1

VPC = tf-scn01


2

subnet = tf-scn01



3

Public route table

0.0.0.0/0 IGW



4

private route table

없음




<6> 참고 사이트


참고

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


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



테라폼으로 AWS VPC생성 하기

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





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



감사합니다.

작품 선택

키워드 선택 0 / 3 0

댓글여부

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