siklog
[NCP/Terraform] Terraform으로 구현하는 NCP 인프라 구성 Part1 본문
Terraform은 워낙 유명해서 많이들 알다시피 Hashicorp에서 제공하는 Infrastructure as Code, IaC 도구이다.
인프라를 빠르게 배포하는 CI/CD 자동화 코드 중 Terraform은 거의 모든 환경에서 사용이 가능하며, 때문에 가장 일반적으로 많이 쓰이는 도구 중 하나이기도하다.
국내기준 KT 클라우드에서는 아직 제공하고 있지않는 것으로 알고 있고, NHN 클라우드에서는 사용이 가능하나 오픈스택의 프로바이더를 이용하고 있기에 국내에선 유일하게 NCP가 프로바이더로 등록되어 있다고 할 수 있다.
Terraform은 고Go 프로그래밍 언어로 개발 되고 있으며, 하시코프 설정 언어HCL (Hashicorp Configuration Language)을 사용해 클라우드 리소스를 선언하고 이를 통해 클라우드에 반영하여 사용할 수 있도록 되어 있다.
따라서, Terraform은 API나 CLI와 같이 명령을 실행하는 형식의 절차적인 방식과 달리 선언적으로 리소스를 정의하여 실행한다는 점이 가장 큰 특징 중 하나라고 볼 수 있다.
AWS의 경우 자동화 리소스 배포를 위해 자체 서비스인 Cloud Formation이 있기도 하지만 NCP에서는 아직 자체 리소스 배포 서비스는 없다.
그래서 이번 포스팅에서는 Terraform으로 NCP VPC 환경 자원을 배포하는 방법에 대해 간략하게 작성해보려고 한다.
Terraform를 사용하기 전 먼저 아래 테라폼의 워크플로우를 살펴보면 테라폼은 총 6단계로 구분되어 실행되고 실제 적용시엔 계획(plan)과 적용(apply) 단계로 나누어 진행할 수 있다.
plan 단계에서는 클라우드에 적용될 변화 사항을 보여주며, 이를 통해 미리 오류가 있는지 확인해 볼 수도 있다.
apply 단계에서는 자신의 클라우드 계정에 실제로 적용이 된다.
- Terraform Workflow
- install - Terraform 을 사용하기위해 CLI를 설치하는 단계
- write – 생성할 리소스들에 대한 tf 파일을 Terraform Code로 작성하는 단계
- init – Terraform으로 리소스를 생성하기전 작업 디렉토리를 초기화하는 단계 (새로운 Terraform 구성 또는 버전이 변경된 경우 실행)
- plan – Terraform 파일의 내용을 클라우드에 반영하기 전 변경되는 점과 적용이 가능한지 확인하는 단계
- apply – Terraform 파일의 구성 내용이 실제 클라우드 계정으로 반영되는 단계
- destroy – Terraform 파일의 내용을 기준으로 현재 적용되어 있는 리소스를 삭제하는 작업
1. Terraform 설치
- 먼저 테라폼을 설치해준다.
- terraform.io/downloads.html 운영체제에 맞는 파일을 다운로드 한 뒤 직접옮겨도 되고 명령어로 다운받아도된다.
- 여기서는 로컬(windows,mac)가 아닌 테스트 VM을 따로 생성하여 리눅스환경에서 구성하였다.
$ yum install wget –y
$ yum install unzip –y
$ wget https://releases.hashicorp.com/terraform/0.14.7/terraform_0.14.7_linux_amd64.zip
> 버전 자주 바뀌니 이름 확인 할 것.
$ sudo unzip terraform_0.14.7_linux_amd64.zip
$ sudo mv terraform /usr/bin/ && sudo chmod +x
$ terraform version
2. NCP 프로바이더 정의
- 먼저 tf 파일을 하나 생성하고 프로바이더를 정의해준다.
- 여기서는 단순 사용법만 다룰 예정이라 tf 파일은 단순하게 전부 이 디렉터리 안에서 생성할 예정이다.
- 디렉터리를 좀 더 세분화하고 tf 파일도 리소스 역할 별로 더 세분화해서 모듈단위로 작성하는 것이 더 알아보기 좋고 관리 측면에서도 좋다.
$ sudo touch provider.tf
$ sudo vi provider.tf
# Provider ncloud
provider "ncloud" {
support_vpc = true
region = "KR"
access_key = "*********"
secret_key = "*********"
}
terraform {
required_providers {
ncloud = {
source = "navercloudplatform/ncloud"
}
}
required_version = ">= 0.13"
}
- VPC 환경에서 생성할 예정이라면 true로 기입
- region은 KR 한국리전
- access_key와 secret_key는 마이페이지 > 계정관리 > 인증키 에서 본인 계정의 인증키를 확인 후 기입하면 된다. (없다면 발급 후 확인)
- 테라폼의 버전은 terraform version 참조하여 확인할 수 있다. 테라폼 버전과 프로바이더 버전은 따로 관리되기 때문에 그 버전만 고정으로 쓰겠다는 명시적 표현방법 (선택사항)
3. 리소스 생성
- VPC 환경에서 인프라 리소스를 생성하려면 가장먼저 VPC 생성이 필요하므로 VPC를 생성하는 부분은 먼저 작성해주었다.
# VPC
resource "ncloud_vpc" "terraform-test-vpc" {
name = "vpc-name"
ipv4_cidr_block = "10.0.0.0/16"
}
- 다음은 리소스들이 위치할 subnet을 생성해 주어야한다.
- Network ACL도 같이 생성해준다.
$ sudo vi subnet_nacl.tf
# Subnet
resource "ncloud_subnet" "terraform-test-subnet" {
vpc_no = ncloud_vpc.terraform-test-vpc.id
subnet = "10.0.10.0/24"
zone = "KR-2"
network_acl_no = ncloud_network_acl.public_nacl.id
subnet_type = "PUBLIC" // PUBLIC(Public) | PRIVATE(Private)
// below fields is optional
name = "terraform-test-subnet"
usage_type = "GEN" // GEN(General) | LOADB(For load balancer)
}
# Network ACL
resource "ncloud_network_acl" "public_nacl" {
vpc_no = ncloud_vpc.terraform-test-vpc.id
name = "public-nacl"
}
- 서브넷을 작성했다면 이제 서버를 생성하는 부분을 작성해준다.
$ sudo vi server.tf
# Server
resource "ncloud_server" "terraform-test-server" {
subnet_no = ncloud_subnet.terraform-test-subnet.id
name = "terraform-test-server"
server_image_product_code = "SW.VSVR.OS.LNX64.CNTOS.0703.B050"
login_key_name = ncloud_login_key.loginkey.key_name
server_product_code = "SVR.VSVR.STAND.C002.M008.NET.SSD.B050.G002"
}
- 여기까지 했으면 테라폼을 사용할 준비가 완료되었다.
- 아래 명령어를 실행하여 리소스가 생성되는지 실제 확인해 볼 수 있다.
$ terraform init
$ terraform plan
$ terraform apply
'클라우드 > NCP' 카테고리의 다른 글
[NCP/Terraform] Terraform으로 구현하는 NCP 인프라 구성 Part2 (0) | 2022.10.10 |
---|---|
[NCP/Load Balancer] LB 내 바인딩된 Target VM에서 동일 LB로 재호출하는 경우 (0) | 2022.08.31 |
[NCP/Security] ACG, NACL 설정 간 유의할 사항 (0) | 2022.08.16 |
[Server/FTP] FTP Active, PassiveMode 차이점 (0) | 2022.06.19 |
[NCP/Containers] NKS 생성 및 접근 방법 (0) | 2022.05.17 |