Infra

Terraform으로 NCP 구축하기(1) - Provider 및 모듈 설정

SungHoJung 2025. 4. 27. 03:57
이번 프로젝트를 진행하면서, NCP 크레딧을 지원받게 되어 NCP로 인프라를 구축해볼 기회가 생겼다. 대부분 AWS 프리티어 플랜만 사용해서 인프라를 구축하다보니, NCP에 대해서는 처음이지만, AWS와 비슷한 비슷한 맥락으로 구축하면 될 것 같아 기존에 했던 경험을 반복할 것 같아 걱정이 됐다. 따라서 이번에는 Terraform을 사용해서 인프라를 구축이라는 새로운 경험을 해보려고 한다.

Terraform으로 배포환경을 정의해놓으면, 배포 계정을 변경하더라도, 바로 동일한 환경을 구축할 수 있어 굉장히 유용하다. 

 

주의 사항

테라폼으로 인프라 서비스 생성한 리소스에 대해서, 콘솔에서 업데이트 하게되면, 테라폼 코드에도 반드시 반영해주어야 한다. 그렇지 않으면 정합성이 깨지게되어 테라폼을 통한 생성/수정/삭제에 영향을 미칠 수 있다.

 

0. 구축할 아키텍쳐

 

생성할 리소스 목록이다

  • 1 VPC
  • 1 Public Subnet
  • 1 Bastion Server + 1 Public IP
  • 1 Network interface 
  • 1 ACG : ACG는 AWS 에서의 보안그룹이라고 생각하면된다

1. 테라폼 설치

 

Install | Terraform | HashiCorp Developer

Explore Terraform product documentation, tutorials, and examples.

developer.hashicorp.com

해당 링크에서 운영체제에 맞게 설치해주면 된다

2. ACCESS KEY, SECRET KEY 생성

NCP 콘솔 로그인 > 프로필 클릭 > 계정 관리 > 마이페이지 > 인증 관리 > 신규 API 인증키 생성

API 인증키 생성 후 모습

3. Provider 설정

terraform {
  required_version = ">= 1.3.0"
  required_providers {
    ncloud = {
      source  = "NaverCloudPlatform/ncloud"
      version = ">= 3.3.1"    # 최신 Provider v3.3.1 사용 :contentReference[oaicite:1]{index=1}
    }
  }
}

provider "ncloud" {
  support_vpc = true
  region      = var.region
  access_key  = var.access_key
  secret_key  = var.secret_key
}

module "network" {
  source = "./network_module"
}

module "server" {
  source           = "./server_module"
  vpc_no           = module.network.vpc_no
  subnet_public_id = module.network.subnet_public_id
}

 

3 - 1 각 리소스 설명

terraform 

  • required_version : Terraform CLI 의 최소 실행 버전을 지정
  • required_providers : 이 프로젝트에서 사용할 외부 Provider(플러그인)를 선언
    • ncloud - source : 해당 Provider 의 registry 소스 주소를 명시
    • ncloue - version : Provider 의 버전 제약 조건을 설정

provider 

  • support_vpc : NCP 의 VPC 관련 리소스를 사용할 수 있게 활성화하는 플래그
  • region : 리소스를 생성할 NCP 리전
  • access_key : NCP API 호출을 위한 Access Key
  • secret_key : NCP API 호출을 위한 Secret Key

module 

  • source : Terraform 모듈의 실제 구현 코드가 위치한 경로(또는 원격 주소)를 가리킵니다.

4. 전역 변수 정의

variable "region" {
  description = "NCP 리전 (KR)"
  default     = "KR"
}
variable "access_key" {
    description = "NCP Access Key"
    default = "access_key"
}
variable "secret_key" {
    description = "NCP Secret Key"
    default = "secret_key"
}
variable "name_prefix" {
  description = "리소스 이름 접두사 (Resource name prefix)"
  default     = "tf-ncp"
}

 

4 - 1 각 리소스 설명

variable

  • description : 해당 전역변수에 대한 설명
  • default : 해당 전역변수의 값