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 인증키 생성
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 : 해당 전역변수의 값