이 글에서는 Tencent Cloud EdgeOne의 애플리케이션 가속 기능을 사용하기 위해 필요한 도메인 등록 절차를 테라폼을 통해 구현하는 방법을 소개합니다.
EdgeOne with IaC
EdgeOne 리소스 프로비저닝 권한을 가진 CAM계정을 생성한 후 SecretID와 SecretKey 및 EdgeOne PlanID를 준비합니다. PlanID는 구매한 EdgeOne 요금제에 대해 해당 계정이 가지는 고유번호로, 아래와 같이 EdgeOne 콘솔에서 확인가능합니다.

EdgeOne에 등록할 도메인들을 준비합니다. 여기서는 1개의 도메인을 기준으로 하였으며 도메인의 네임서버는 Tencent Cloud의 도메인 호스팅 서비스인 DNSPod의 네임서버로 DNS설정을 하였습니다.

Demo 코드 다운로드 및 main.tf 수정
Tencent Cloud의 Terraform 공식 깃허브에서 Demo코드를 클론합니다.
git clone https://github.com/tencentcloudstack/terraform-provider-tencentcloud.git
tencentcloud-teo/main.tf 를 찾습니다. 이 tf 파일을 수정하도록 합니다.

1) Credential 설정
먼저 SecretID, SecretKey 가 하드코딩된 부분을 환경변수를 참조하도록 변경합니다.
export TF_VAR_SECRET_ID=xxxx
export TF_VAR_SECRET_KEY=xxxx
provider "tencentcloud" {
secret_id = var.SECRET_ID
secret_key = var.SECRET_KEY
}
2) 도메인 및 오리진 설정
variable "zone_name" {
default = "perfective.xyz"
}
variable "sub_domain" {
default = "www"
}
variable "zone_name" {
default = "example.com"
}
origin_info {
origin = "1XX.2X.1XX.2XX"
origin_type = "IP_DOMAIN"
}
- zone_name & sub_domain : EdgeOne 가속 도메인 정보를 입력합니다.
- origin_type : 원본서버의 아이피주소나 도메인 주소를 타겟으로 하려면 "IP_DOMAIN" 을, 기타 저장소의 엔드포인트를 타겟으로 하려면 "COS" or "AWS_S3" 를 입력합니다.
- origin : 원본서버의 아이피주소나 엔드포인트 도메인을 입력합니다.
- zone_name : 클라이언트가 접근할 실제 서비스 도메인을 입력합니다.
3) 플랜 정보
구매한 EdgeOne의 플랜 정보에 대한 설정이 필요합니다.
resource "tencentcloud_teo_zone" "zone" {
area = "overseas"
alias_zone_name = "tftest"
paused = false
plan_id = "edgeone-2rniXXXXXXXX"
tags = {
"createdBy" = "terraform"
}
type = "partial"
zone_name = var.zone_name
}
- type : 엑세스 방식이 CNAME인 경우 "partial" , NS인 경우 "full" . L4 프록시 같이 도메인 등록이 필요하지 않은 경우에는 "noDomainAccess"를 입력합니다.
- area : "noDomainAccess"를 제외한 타입의 경우에 "overseas" , "global" , "mainland" 에서 선택하여 입력할 수 있습니다. 가속 대상 지역에 대한 파라미터로 , "overseas"의 경우 중국을 제외한 글로벌 가속에 해당합니다.
Demo를 기준으로 수정한 main.tf 전체 코드는 다음과 같습니다.
terraform {
required_providers {
tencentcloud = {
source = "tencentcloudstack/tencentcloud"
}
}
}
provider "tencentcloud" {
region = "ap-seoul"
secret_id = var.SECRET_ID
secret_key = var.SECRET_KEY
}
provider "tencentcloud" {
alias = "tfdomain"
region = "ap-seoul"
secret_id = var.SECRET_ID
secret_key = var.SECRET_KEY
}
variable "zone_name" {
default = "example.com"
}
# cname
resource "tencentcloud_teo_zone" "zone" {
area = "overseas"
alias_zone_name = "tftest"
paused = false
plan_id = "edgeone-2rniXXXXXXXX"
tags = {
"createdBy" = "terraform"
}
type = "partial"
zone_name = var.zone_name
}
resource "tencentcloud_dnspod_record" "demo" {
provider = tencentcloud.tfdomain
domain = var.zone_name
record_type = tencentcloud_teo_zone.zone.ownership_verification.0.dns_verification.0.record_type
record_line = "default"
value = tencentcloud_teo_zone.zone.ownership_verification.0.dns_verification.0.record_value
sub_domain = tencentcloud_teo_zone.zone.ownership_verification.0.dns_verification.0.subdomain
}
resource "tencentcloud_teo_ownership_verify" "ownership_verify" {
domain = var.zone_name
depends_on = [tencentcloud_dnspod_record.demo]
}
variable "sub_domain" {
default = "www"
}
resource "tencentcloud_teo_acceleration_domain" "acceleration_domain" {
zone_id = tencentcloud_teo_zone.zone.id
domain_name = "${var.sub_domain}.${var.zone_name}"
origin_info {
origin = "119.XXX.XXX.XXX"
origin_type = "IP_DOMAIN"
}
depends_on = [tencentcloud_teo_ownership_verify.ownership_verify]
}
resource "tencentcloud_dnspod_record" "acceleration_domain_record" {
provider = tencentcloud.tfdomain
domain = var.zone_name
record_type = "CNAME"
record_line = "default"
value = "${tencentcloud_teo_acceleration_domain.acceleration_domain.domain_name}.eo.dnse0.com."
sub_domain = var.sub_domain
}
plan & apply
main.tf가 있는 디렉토리에서 terraform init 을 실행하고 plan 합니다.
terraform plan

Terraform에서 추가될 EdgeOne의 설정을 보여줍니다. 내용에 이상이 없다면 apply 합니다.
terraform apply

Apply complete !
EdgeOne 가속 도메인 등록결과 확인
TCCLI에서 EdgeOne 리소스를 생성한 CAM 계정의 credential 정보로 configure을 한 후 아래 커맨드를 입력하면
tccli teo DescribeZones

방금 등록했던 EdgeOne 가속도메인의 정보를 확인할 수 있으며 같은 정보를 콘솔에서도 확인이 가능합니다.

마치며
텐센트클라우드 깃헙에서 제공하는 테라폼 코드로 간단한 EdgeOne 설정을 하는 법을 소개하였습니다. 텐센트클라우드와 결합한 IaC 세팅은 복잡한 클라우드 리소스 관리 작업을 간소화하고 자동화합니다. Rule Engine 설정 등 EdgeOne의 디테일한 기능도 모두 Terraform을 통해 구현이 가능하니 IaC에 익숙한 사용자들이라면 한 번 경험해보는 것도 좋을 것 같습니다.