두 개의 VM 인스턴스를 각각 다른 이미지로 복제후 오토스케일링 설정하는 Terraform 코드
네이버클라우드 플랫폼(NCP)에서 VPC를 생성하고, 두 개의 VM 인스턴스를 각각 다른 이미지로 생성하며, 하나의 인스턴스에 오토스케일링 설정하는 Terraform 코드를 제공해드리겠습니다. NCP의 경우 AWS와는 리소스 이름 및 설정이 다르기 때문에 이를 반영한 코드를 작성해야 합니다.
1. variables.tf
VPC 이름, 이미지 ID, 인스턴스 유형, 최소 및 최대 오토스케일링 인스턴스 수를 변수로 정의합니다.
hcl코드 복사<code>variable "vpc_name" {
description = "Name of the VPC"
type = string
}
variable "image_a_id" {
description = "Image ID for EC2A instance"
type = string
}
variable "image_b_id" {
description = "Image ID for EC2B instance"
type = string
}
variable "instance_type" {
description = "Instance type"
type = string
default = "n2.micro"
}
variable "min_size" {
description = "Minimum number of EC2A instances in Auto Scaling"
type = number
default = 1
}
variable "max_size" {
description = "Maximum number of EC2A instances in Auto Scaling"
type = number
default = 3
}
</code>
2. main.tf
NCP VPC, 서브넷, 보안 그룹, 인스턴스, 그리고 오토스케일링 그룹을 설정하는 주요 리소스를 정의합니다.
hcl코드 복사<code>provider "ncloud" {
region = "KR" # 원하는 리전을 지정하세요 (KR: Korea, JP: Japan, SG: Singapore)
}
resource "ncloud_vpc" "my_vpc" {
vpc_name = var.vpc_name
ipv4_cidr = "10.0.0.0/16"
}
resource "ncloud_subnet" "my_subnet" {
vpc_no = ncloud_vpc.my_vpc.vpc_no
ipv4_cidr = "10.0.1.0/24"
subnet_name = "${var.vpc_name}-subnet"
zone = "KR-1" # 원하는 Zone을 지정하세요.
}
resource "ncloud_access_control_group" "allow_ssh" {
name = "${var.vpc_name}-sg"
description = "Security group for SSH access"
vpc_no = ncloud_vpc.my_vpc.vpc_no
inbound {
protocol = "TCP"
source_cidr_block = "0.0.0.0/0"
port_range {
from = 22
to = 22
}
}
outbound {
protocol = "ALL"
target_cidr_block = "0.0.0.0/0"
}
}
# EC2B 인스턴스 생성
resource "ncloud_server" "ec2b" {
name = "${var.vpc_name}-ec2b"
vpc_no = ncloud_vpc.my_vpc.vpc_no
subnet_no = ncloud_subnet.my_subnet.subnet_no
member_server_image_no = var.image_b_id
server_product_code = var.instance_type
access_control_group_configuration_no_list = [ncloud_access_control_group.allow_ssh.access_control_group_no]
}
# EC2A 인스턴스를 위한 Launch Configuration
resource "ncloud_launch_configuration" "ec2a_config" {
name = "${var.vpc_name}-ec2a-config"
server_product_code = var.instance_type
member_server_image_no = var.image_a_id
access_control_group_configuration_no_list = [ncloud_access_control_group.allow_ssh.access_control_group_no]
}
# EC2A 오토스케일링 그룹 설정
resource "ncloud_auto_scaling_group" "ec2a_asg" {
name = "${var.vpc_name}-ec2a-asg"
min_size = var.min_size
max_size = var.max_size
desired_capacity = var.min_size
launch_configuration_no = ncloud_launch_configuration.ec2a_config.launch_configuration_no
zone = "KR-1" # 원하는 Zone을 지정하세요.
vpc_no = ncloud_vpc.my_vpc.vpc_no
subnet_no_list = [ncloud_subnet.my_subnet.subnet_no]
}
resource "ncloud_auto_scaling_policy" "scale_up" {
name = "${var.vpc_name}-scale-up"
adjustment_type = "CHANGE_IN_CAPACITY"
scaling_adjustment = 1
cooldown = 300
auto_scaling_group_no = ncloud_auto_scaling_group.ec2a_asg.auto_scaling_group_no
}
resource "ncloud_auto_scaling_policy" "scale_down" {
name = "${var.vpc_name}-scale-down"
adjustment_type = "CHANGE_IN_CAPACITY"
scaling_adjustment = -1
cooldown = 300
auto_scaling_group_no = ncloud_auto_scaling_group.ec2a_asg.auto_scaling_group_no
}
</code>
3. outputs.tf
생성된 리소스들의 정보를 출력합니다.
hcl코드 복사<code>output "vpc_no" {
description = "The ID of the VPC"
value = ncloud_vpc.my_vpc.vpc_no
}
output "subnet_no" {
description = "The ID of the Subnet"
value = ncloud_subnet.my_subnet.subnet_no
}
output "ec2b_server_instance_no" {
description = "The ID of the EC2B instance"
value = ncloud_server.ec2b.server_instance_no
}
output "ec2a_asg_name" {
description = "The name of the Auto Scaling Group for EC2A"
value = ncloud_auto_scaling_group.ec2a_asg.name
}
</code>
4. terraform.tfvars
변수값을 설정하는 파일입니다.
hcl코드 복사<code>vpc_name = "my-custom-vpc"
image_a_id = "6101334008" # EC2A의 이미지 ID
image_b_id = "6101334009" # EC2B의 이미지 ID
instance_type = "n2.micro"
min_size = 1
max_size = 3
</code>
사용 방법
- 위의 코드 파일들을 각각 해당 이름으로 저장합니다.
- 터미널에서 해당 디렉토리로 이동하여 Terraform 초기화 및 적용을 실행합니다.
sh 코드 복사<code>terraform init
terraform apply
</code>
- 생성된 리소스들의 ID와 정보가
terraform apply
실행 후 출력됩니다.
이 코드는 네이버클라우드 플랫폼의 환경에 맞게 작성되었습니다. 사용 시 필요한 이미지 ID와 리소스 이름 등을 환경에 맞게 조정해 사용하시면 됩니다.