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
'DevOps > Terraform' 카테고리의 다른 글
[NCP] Terraform - time_sleep(sleep걸기) 사용 (0) | 2022.07.14 |
---|---|
[NCP] Terraform을 활용한 NCP(VPC) - Server(2), LB(1), Auto scaling Group(1), NAS(1) 구성 (0) | 2021.08.31 |
[NCP] Terraform에서 apply 할 시, Status: 500 Internal Server Error 오류 (1) | 2021.08.30 |
Terraform의 provisioner(프로비저너)란? (1) | 2021.08.30 |
Terraform 이란 (프로비저닝 도구와 코드형 인프라)? (1) | 2021.08.30 |