지난번 작성했던 글처럼, 이제는 Terraform 으로도 KVM 서버 및 NKS 생성이 가능해졌다.
이번 글에서는 간단하게 bastion 서버를 Terraform으로 만드는 code를 공유하고자 한다.
실제로 현재 나는 Hypervisor의 제약 없이 Server, NKS 등의 자원을 IaC로 생성하고 있는데, 확실히.. 편하다..
provider.tf
terraform {
required_providers {
ncloud = {
source = "NaverCloudPlatform/ncloud"
version = ">= 2.3.19"
}
}
}
provider "ncloud" {
region = var.region
site = var.site
support_vpc = "true"
access_key = var.ncloud_access_key
secret_key = var.ncloud_secret_key
}
vpc.tf
# VPC 설정
resource "ncloud_vpc" "vpc" {
name = "${var.service_name}-vpc"
ipv4_cidr_block = var.vpc_cidr
}
# 서브넷 설정
## 이번 포스팅에서는 bastion server를 생성하는 것이기 때문에, public subnet 1개만 생성함
resource "ncloud_subnet" "pub_dmz_subnet" {
vpc_no = ncloud_vpc.vpc.id
subnet = var.pub_dmz_subnet_cidr
zone = var.zone
network_acl_no = ncloud_vpc.vpc.default_network_acl_no
subnet_type = "PUBLIC"
name = "${var.service_name}-pub-dmz-sub"
usage_type = "GEN"
}
security.tf
# PEM키 생성
resource "ncloud_login_key" "loginkey" {
key_name = "${var.service_name}"
}
resource "local_file" "ssh_key" {
filename = "./${ncloud_login_key.loginkey.key_name}.pem"
content = ncloud_login_key.loginkey.private_key
}
server.tf
# Bastion 서버 설정
# bastion server spec
data "ncloud_server_image_numbers" "kvm-image" {
server_image_name = "ubuntu-22.04-base" # 원하는 image 이름으로 변경 가능
filter {
name = "hypervisor_type"
values = ["KVM"]
}
}
data "ncloud_server_specs" "kvm-spec" {
filter {
name = "server_spec_code"
values = ["c2-g3"] # 2core 4mem
}
}
## 사용하는 init script가 있다면 해당 부분 주석 해제하여 사용
# resource "ncloud_init_script" "init_script" {
# name = "${var.service_name}-init-script"
# content = file(var.bastion_init_script_path)
# }
resource "ncloud_server" "bastion" {
name = "${var.service_name}-bastion"
subnet_no = ncloud_subnet.pub_dmz_subnet.id
zone = var.zone
login_key_name = ncloud_login_key.loginkey.key_name
is_protect_server_termination = false
server_image_number = data.ncloud_server_image_numbers.kvm-image.image_number_list.0.server_image_number
server_spec_code = data.ncloud_server_specs.kvm-spec.server_spec_list.0.server_spec_code
# init_script_no = ncloud_init_script.init_script.id
}
resource "ncloud_public_ip" "pub_ip" {
server_instance_no = ncloud_server.bastion.id
}
variables.tf
variable "ncloud_access_key" {
description = "Naver Cloud Platform Access Key"
type = string
sensitive = true # 민감 정보로 표시
}
variable "ncloud_secret_key" {
description = "Naver Cloud Platform Secret Key"
type = string
sensitive = true # 민감 정보로 표시
}
variable "region" {
description = "Region to deploy resources in Ncloud"
type = string
default = "KR" # 기본값을 설정했지만 필요에 따라 변경 가능
}
variable "site" {
description = "Ncloud Site"
type = string
default = "public" # 민간존(public) | 공공존(gov) | 금융존(fin)
}
variable "zone" {
description = "Availability zone"
type = string
default = "KR-1"
}
variable "service_name" {
description = "The name of the service for naming the resources"
type = string
}
variable "vpc_cidr" {
description = "CIDR block for the VPC"
type = string
}
# 서브넷의 CIDR을 변수로 정의
variable "pub_dmz_subnet_cidr" {
description = "CIDR block for the public DMZ subnet"
type = string
}
## 사용하는 init script가 있다면 해당 부분 주석 해제하여 사용
# variable "bastion_init_script_path" {
# description = "Path to the local init script file"
# type = string
# }
terraform.tfvars
# IAM 설정
ncloud_access_key = "<개인 access key 값 입력>"
ncloud_secret_key = "<개인 secret key 값 입력>"
site = "public"
# service 이름 설정
service_name = "tf-test"
# VPC 및 Subnet 설정
vpc_cidr = "10.0.0.0/16"
pub_dmz_subnet_cidr = "10.0.1.0/24"
# bastion 서버 설정
## init script path 설정
# bastion_init_script_path = "./sh/ubuntu-init.sh"
728x90
'Study > NCP' 카테고리의 다른 글
[NCP] Terraform : ncloud version 3.2.0 업데이트 (0) | 2024.10.25 |
---|---|
[NCP] NKS 사용을 위한 iam 인증 및 kubectl, k9s 설치 스크립트 (0) | 2024.10.23 |
[NCP] NKS 사용을 위한 bastion 설정 및 ArgoCD 배포 (1) | 2024.09.12 |
[NCP] Sub Account 로 계정 관리하기 (1) | 2024.05.09 |
[NCP] 간편한 VIP 관리를 위한 NCP CLI 스크립트 (0) | 2024.04.19 |
댓글