☁️ Tencent Cloud/☁️ IaC on Tencent cloud

[Terraform] CVM instance group 생성하기

just in here

 

 

CVM instance

IaC를 도입한 프로젝트에서 가장 많이 작성하게 되는 건 아무래도 가상머신 프로비저닝에 관한 코드일 것입니다. 프로젝트의 규모가 클 수록 많은 tfstate 파일과 configuration tf 파일을 관리하는 일도 쉬운 일은 아니지만 이러한 반복작업을 클라우드 콘솔에서 진행하는 것에 비하면 훨씬 생산적입니다. 이 글에서는 기본적인 스펙의 Tencent Cloud CVM을 생성하는 간단한 IaC 예제를 소개합니다.

 

 

목표 및 준비물

 

 위 그림과 같이 1개의 VPC에 2개의 서로 다른 가용영역을 구성하고, 가용영역 내에 각각 CVM 1대 씩을 배치한 뒤 첫 번째 서브넷의 인스턴스에만 Public IP를 부여하여 Public subnet의 역할을 하게 합니다. 실무에서의 구성과는 거리가 있지만 코드 내에서 다양한 argument를 사용해 보기 위해 이와 같이 구성합니다.

 

 리소스 프로비저닝을 위한 CAM 계정 생성 및 정책 구성과 SecretId, SecretKey 의 환경변수 설정과 같은 기본적인 내용은 생략합니다. 필요 시에는 Tencent Cloud 공식 홈페이지 문서나 블로그 내에 다른 글들을 참고할 수 있습니다.

 

main.tf

이번에는 Demo 코드를 참조하지 않고 테라폼의 공식문서에 있는 CVM instance 관련 항목으로 목표 아키텍쳐의 필요한 부분만을 따서 main.tf 파일을 작성합니다. 기본 security group이 아니거나 자세한 기타 설정(요금제, 인스턴스 수명주기 조정, 라우팅 테이블 수정 등이 필요한 경우에도 공식문서의 Argument reference를 참고할 수 있습니다.)

terraform {
  required_providers {
    tencentcloud = {
      source = "tencentcloudstack/tencentcloud"
    }
  }
}

provider "tencentcloud" {
  region = "ap-seoul"

  secret_id  = var.SECRET_ID
  secret_key = var.SECRET_KEY

}

resource "tencentcloud_vpc" "my_vpc" {
  name       = "NewVPC"
  cidr_block = "10.0.0.0/16"
  is_multicast = false
}

resource "tencentcloud_subnet" "subnet_s1" {
  vpc_id            = tencentcloud_vpc.my_vpc.id
  name              = "SubnetS1"
  cidr_block        = "10.0.1.0/24"
  availability_zone = "ap-seoul-1"
  is_multicast      = false
}

resource "tencentcloud_subnet" "subnet_s2" {
  vpc_id            = tencentcloud_vpc.my_vpc.id
  name              = "SubnetS2"
  cidr_block        = "10.0.2.0/24"
  availability_zone = "ap-seoul-2"
  is_multicast      = false
}

resource "tencentcloud_instance" "instance_s1" {
  instance_name  = "InstanceS1"
  availability_zone = "ap-seoul-1"
  image_id       = "img-1u6l2XXX"  
  instance_type  = "S5.LARGE8"
  system_disk_type = "CLOUD_PREMIUM"
  system_disk_size = 50
  allocate_public_ip = true
  subnet_id  = tencentcloud_subnet.subnet_s1.id
  internet_max_bandwidth_out = 10
}

resource "tencentcloud_instance" "instance_s2" {
  instance_name  = "InstanceS2"
  availability_zone = "ap-seoul-2"
  image_id       = "img-1u6l2XXX"  
  instance_type  = "S5.LARGE8"
  system_disk_type = "CLOUD_PREMIUM"
  system_disk_size = 50
  subnet_id  = tencentcloud_subnet.subnet_s2.id
}

 

Plan & apply

작성 configuration file을 기준으로 배포합니다.

terraform plan

 

그런데 위 코드를 기준으로 하면 apply 시 아래와 같은 에러가 발생할 수 있습니다. 

 

apply를 하면 테라폼은 VPC → 서브넷 → 인스턴스 순서로 프로비저닝을 진행하는데, 서브넷 생성 후 해당 서브넷 ID가 'subnet_id'에 할당되기 전에 인스턴스 생성을 시도해서 생기는 오류입니다. apply 커맨드에 다음과 같은 옵션을 추가하여 해결할 수 있습니다.

terraform apply -auto-approve

 

Apply complete !

 

결과물 확인

 

Tencent Cloud 콘솔이나 TCCLI에서 아래 커맨드를 입력하여 terraform state와 동일한 리소스가 프로비저닝 되었는 지 확인합니다.

 

tccli configure
// confidential 정보 입력
tccli cvm DescribeInstances

 

 

이처럼 이 글에서 작성한 예시코드와 공식문서를 참조하여 프로젝트의 구성에 맞게 Tencent Cloud Terraform 코드를 작성하여 리소스를 편리하게 관리할 수 있습니다.