반응형

목차

  1. 프로젝트 구조
  2. 초기 설정
  3. 네트워크 구성
  4. 서버 구성
  5. 실행 방법
  6. 주의사항

프로젝트 구조

project/
├── provider.tf      # NCP 프로바이더 설정
├── variables.tf     # 변수 정의
├── terraform.tfvars # 실제 변수값
├── vpc.tf          # VPC 및 서브넷 설정
├── security.tf     # 보안 설정
├── server.tf       # 서버 설정
└── outputs.tf      # 출력 설정

초기 설정

프로바이더 설정 (provider.tf)

terraform {
  required_providers {
    ncloud = {
      source = "NaverCloudPlatform/ncloud"
    }
  }
  required_version = ">= 0.13"
}

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

변수 설정 (variables.tf & terraform.tfvars)

# variables.tf
variable "access_key" {
  type = string
}

variable "secret_key" {
  type = string
}

variable "region" {
  type    = string
  default = "KR"
}

# terraform.tfvars
access_key = "your_access_key"
secret_key = "your_secret_key"

네트워크 구성

VPC 및 서브넷 설정 (vpc.tf)

resource "ncloud_vpc" "vpc" {
  ipv4_cidr_block = "172.16.0.0/16"
  name = "my-vpc"
}

resource "ncloud_subnet" "subnet" {
  vpc_no         = ncloud_vpc.vpc.id
  subnet         = "172.16.10.0/24"
  zone           = "KR-2"
  network_acl_no = ncloud_vpc.vpc.default_network_acl_no
  subnet_type    = "PUBLIC"
  name           = "my-subnet"
  usage_type     = "GEN"
}

보안 설정 (security.tf)

resource "ncloud_access_control_group" "acg" {
  name   = "my-acg"
  vpc_no = ncloud_vpc.vpc.id
}

resource "ncloud_access_control_group_rule" "acg-rule" {
  access_control_group_no = ncloud_access_control_group.acg.id

  inbound {
    protocol    = "TCP"
    ip_block    = "0.0.0.0/0"
    port_range  = "80"
    description = "HTTP"
  }

  inbound {
    protocol    = "TCP"
    ip_block    = "0.0.0.0/0"
    port_range  = "22"
    description = "SSH"
  }
}

서버 구성 (server.tf)

resource "ncloud_server" "server" {
  subnet_no                 = ncloud_subnet.subnet.id
  name                     = "my-server"
  server_image_product_code = "SW.VSVR.OS.LNX64.CNTOS.0708.B050"
  server_product_code      = "SVR.VSVR.HICPU.C002.M004.NET.HDD.B050.G002"
  login_key_name           = ncloud_login_key.key.key_name

  network_interface {
    network_interface_no = ncloud_network_interface.nic.id
    order               = 0
  }
}

resource "ncloud_public_ip" "public-ip" {
  server_instance_no = ncloud_server.server.id
}

실행 방법

1. 초기화

terraform init

2. 계획 확인

terraform plan

3. 인프라 생성

terraform apply

 

4. 생성된 자원 확인

terraform show

 

5. 퍼블릭 IP 확인

terraform output public_ip

주요 설정 설명

1. VPC 구성

  • CIDR: 172.16.0.0/16
  • 퍼블릭 서브넷: 172.16.10.0/24
  • 리전: KR (한국)
  • 존: KR-2

2. 보안 설정

  • HTTP(80) 포트 개방
  • SSH(22) 포트 개방
  • 모든 IP 허용 (0.0.0.0/0)

3. 서버 스펙

  • OS: CentOS
  • 타입: High CPU
  • 구성: 2vCPU, 4GB Memory

주의사항

  1. 보안 키 관리
    ```hcl

    terraform.tfvars는 .gitignore에 추가

*.tfvars

2. **리소스 삭제**
```bash
# 모든 리소스 삭제
terraform destroy
  1. 비용 관리
  • 퍼블릭 IP는 과금 대상
  • 사용하지 않는 리소스 즉시 삭제
  1. 상태 파일 관리
    # 상태 파일 백업
    terraform state pull > backup.tfstate

트러블슈팅

2. 리소스 생성 실패

# 상태 초기화
terraform init -reconfigure

# 강제 적용
terraform apply -auto-approve

마치며

이 구성은 기본적인 웹 서버 환경을 구축하는 예제입니다. 실제 운영 환경에서는 다음 사항들을 추가로 고려해야 합니다:

  1. 백업 전략
  2. 모니터링 설정
  3. 고가용성 구성
  4. 보안 강화

 

참고 자료

 

https://www.didim365.com/blog/terraform%EC%9D%84-%EC%9D%B4%EC%9A%A9%ED%95%98%EC%97%AC-%EB%84%A4%EC%9D%B4%EB%B2%84-%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C-%ED%94%8C%EB%9E%AB%ED%8F%BCncp%EC%97%90%EC%84%9C-vpc-%ED%99%98%EA%B2%BD/

 

Terraform을 이용하여 네이버 클라우드 플랫폼(NCP)에서 VPC 환경을 구성하는 방법 - 디딤365

안녕하세요, 디딤365입니다. 이번 포스팅에서는 HashiCorp사에서 Go언어로 개발한 인프라스트럭처 관리 오픈소스인 Terraform을 이용하여 네이버 클라우드 플랫폼(이하 NCP)에서 VPC 환경을 구성하는 방

www.didim365.com

 

반응형