[NCP] Terraform을 활용한 NCP (Classic) - Server (2), LB(1) 구성
DevOps/Terraform

[NCP] Terraform을 활용한 NCP (Classic) - Server (2), LB(1) 구성

728x90
반응형

개요

Terraform을 활용해 NCP의 Server, LB를 생성하고 Server에는 Apache를 설치하는 코드입니다. 아키텍처는 다음과 같습니다.

[main.tf]

provider "ncloud" {
  access_key = var.access_key
  secret_key = var.secret_key
  region     = var.region
}

resource "random_id" "id" {
  byte_length = 4
}


resource "ncloud_login_key" "key" {
  key_name = var.login_key_name
}

data "ncloud_root_password" "rootpwd" {
  count                     = "2"
  server_instance_no        = ncloud_server.server[count.index].id
  private_key               = ncloud_login_key.key.private_key
}

data "ncloud_port_forwarding_rules" "rules" {
  count                    = "2"
  zone                     = ncloud_server.server[count.index].zone
}


resource "ncloud_server" "server" {
  count                       = "2"     
  name                        = "ncloud-terraform-test-vm-${count.index+1}"
  server_image_product_code   = var.server_image_product_code
  server_product_code         = var.server_product_code
  description                 = "ncloud-terraform-test-vm-${count.index+1} is best tip!!"
  login_key_name              = ncloud_login_key.key.key_name
  access_control_group_configuration_no_list    = ["333376"]
  zone                                          = var.zones
 
}


resource "null_resource" "ssh" {
 count = "2"
 connection {
    type     = "ssh"
    host     = ncloud_port_forwarding_rule.forwarding[count.index].port_forwarding_public_ip 
    user     = "root"
    port     = var.port_forwarding_external_port[count.index]
    password = data.ncloud_root_password.rootpwd[count.index].root_password
  }

  provisioner "remote-exec" {
    script = "./httpd_install.sh"
  }
}


resource "ncloud_port_forwarding_rule" "forwarding" {
  count                            = "2"
  port_forwarding_configuration_no = data.ncloud_port_forwarding_rules.rules[count.index].id
  server_instance_no               = ncloud_server.server[count.index].id
  port_forwarding_external_port    = var.port_forwarding_external_port[count.index]
  port_forwarding_internal_port    = "22"
}

resource "ncloud_load_balancer" "lb" {
  name                             = "jslee-LB"
  algorithm_type                   = "RR"
  description                      = "ncloud-terraform-test-lb is best!!"

  rule_list {
    protocol_type        = "HTTP"
    load_balancer_port   = 80
    server_port          = 80
    l7_health_check_path = "/"
  }

  server_instance_no_list = [ncloud_server.server[0].id, ncloud_server.server[1].id]
  internet_line_type      = "PUBLC"
  network_usage_type      = "PBLIP"
  region                  = "KR"
}

 

 

[variables.tf]

variable "access_key" { # export TF_VAR_access_key=...
  default = ""
}

variable "secret_key" { # export TF_VAR_secret_key=...
  default = ""
}

variable "region" {
  default = "KR"
}

variable "zones" {
  default =  "KR-2"
}

variable "server_image_product_code" { # centos-7.3-64
  default = "SPSW0LINUX000046"
}

variable "server_product_code" { # vCPU 2EA, Memory 2GB, Disk 50GB
  default = "SPSVRSTAND000003" 
}
variable "login_key_name" {
  default = "terra-key"
}

variable "port_forwarding_external_port" {
  type = list
  default = ["1290", "2290"]
}

 

[version.tf]

terraform {
  required_version = ">= 0.13"
  required_providers {
    ncloud = {
      source = "terraform-providers/ncloud"
    }
    null = {
      source = "hashicorp/null"
    }
    random = {
      source = "hashicorp/random"
    }
  }
}

 

[httpd_install.sh]

#!/bin/bash

yum -y install httpd
systemctl start httpd
systemctl enable httpd
echo $HOSTNAME >> /var/www/html/index.html

아래 docs를 참고하면서 계속 해보면 어떤식으로 terraform 코드를 짜면 될지 감이 온다.

오류를 만나면 docs에 안내대로 제대로 코드구성을 했는지 확인을 해보고, 필수요인을 빼먹지 않았는지 확인해보자.

그럼에도 이유를 모르겠고 API 문제 같다 싶을 때 NCP에 문의하면 된다.

 

*2021/08/31 기준으로 포트포워딩 동시 설정시 still creating 만 뜨고 create 되지않는 이슈가 있음 추후에 해결예정이라함!

 

*참고

https://github.com/NaverCloudPlatform/terraform-provider-ncloud/tree/master/docs

 

GitHub - NaverCloudPlatform/terraform-provider-ncloud: Terraform NaverCloud provider

Terraform NaverCloud provider. Contribute to NaverCloudPlatform/terraform-provider-ncloud development by creating an account on GitHub.

github.com

 

 

728x90
728x90