Notice
Recent Posts
Recent Comments
Link
Archives
Today
Total
관리 메뉴

카레제육 블로그

[Ncloud] 테라폼으로 시작하는 네이버클라우드 플랫폼 - 3 본문

DevOps

[Ncloud] 테라폼으로 시작하는 네이버클라우드 플랫폼 - 3

kare jeyuk 2023. 7. 24. 00:04

이전글

2023.07.18 - [DevOps] - [Ncloud] 테라폼으로 시작하는 네이버클라우드 플랫폼 - 1

2023.07.20 - [DevOps] - [Ncloud] 테라폼으로 시작하는 네이버클라우드 플랫폼 - 2

 

5. 테라폼을 사용해서 server 배포하기

네이버 클라우드 플랫폼에서 제공하는 테라폼 프로바이더를 사용하면, 콘솔에서 하는 작업을 코드화할 수 있다. 이를 통해 인프라의 형상 관리 등, IaC(Infrastructure as Code)의 여러 이점을 챙길 수 있다.

5.1 테라폼 Workshop

이번 게시글에서 사용하는 테라폼 코드는 하시코프 코리아에서 제공하는 workshop (https://docmoa.github.io/03-Public%20Cloud/NCP/09-Terraform-Workshop/01-intro_to_terraform_on_ncp/00-overview.html)을 기반으로 outdated 된 내용을 최신화하여 작성하였다. 이 docmoa 페이지는 하시코프(유형욱님 etc..)관리와 함께 ncloud 일반 유저도 기여를 통해 참여할 수 있다. (포스팅 공개 시점 최신 예제 코드를 PR하여 승인 완료)

저는 네이버 클라우드 플랫폼 구성원이 아닙니다!

5.2 실습 환경

작성자는 윈도우의 WSL을 사용한 debain 환경에서 실습을 진행하였고, 편집기로 vscode를 사용하였다.

5.1.1 실습 코드 다운로드

다음 깃허브(https://github.com/ncp-hc/workshop-oss) 코드를 클론 받아 lab02 디렉토리의 내용을 하나씩 진행해본다.

git clone <https://github.com/ncp-hc/workshop-oss.git>
cd workshop-oss/lab02
ls -l

5.1.2 각종 변수 세팅하기

terraform으로 자신의 네이버 클라우드 플랫폼에 리소스를 배포하기 위해서는 3. 테라폼 사용을 위한 자격 증명 받기에서 발급받은 자격 증명을 이용해야 한다. 코드에서 직접 넣어 작동시킬 수 있지만 이 방법은 보안상 좋지 않기 때문에 앞으로 습관화를 위하여 환경 변수를 이용하는 방법을 사용해본다.

export NCLOUD_ACCESS_KEY=xxx
export NCLOUD_SECRET_KEY=xxx
# 적용 환경 변수 확인
env | grep NCLOUD

위 명령어를 통해 자격 증명 키를 세팅하고 확인할 수 있다.

다음으로 실습 환경의 접을 제어를 위한 ip 세팅과 이번 워크샵으로 만들어지는 리소스를 구분하기 위한 prefix를 지정한다.

  • 사용자 ip 세팅하기
# 실습하는 환경의 ip를 확인한다.
curl ifconfig.me

# 실행 예시는 다음과 같다.
211.34.44.107%

# 위 ip를 variable.tf 파일을 열어 variable "client_ip" { 항목의 default 값으로 118.130.103.106를 지우고 작성한다.
# 작성 예시는 다음과 같다.

# variables.tf
# .... 중략 ...
variable "prefix" {
  description = "This prefix will be included in the name of most resources."
}

variable "client_ip" {
  description = "<https://search.naver.com/search.naver?where=nexearch&sm=top_sug.pre&fbm=1&acr=1&acq=ip&qdt=0&ie=utf8&query=ip+%EC%A3%BC%EC%86%8C+%ED%99%95%EC%9D%B8>"
  default = "211.34.44.107"  # 여기에 사용자 ip를 넣는다.
}

  • prefix 지정하기
# terraform.tfvars 파일을 연다.
# prefix에 값을 지정한다.
# 작성 예시는 다음과 같다.

# terraform.tfvars 
prefix = "seoyul"

5.3 테라폼 실행하기

5.3.1 실행 준비하기

테라폼을 실행하기 위해서 terraform init명령어를 실행하여 기본 환경을 세팅한다. 이후 terraform plan을 통해 어떤 리소스가 적용되는지 검토해본다.

terraform init

# 실행 결과는 다음과 같다.

terraform plan

# 실행 결과는 다음과 같다.

terraform plan을 통해서 main.tf에 정의되어있는 내용을 바탕으로 실행되었을 때 동작을 미리 확인해볼 수 있다. 현재 코드는 vpc를 만드는 내용만 활성화되어있으므로 (나머지는 기본적으로 주석처리 되어있다.) VPC가 create 동작함을 예상할 수 있고 미리 정의해둔 cidr과 name을 제외하고는 생성해야 정보를 알 수 있다는 걸 확인할 수 있다.

5.3.2 실행 맛보기

다음으로 테라폼을 실행해본다. 테라폼 동작을 확인하는 문구가 나오면 yes를 입력하여 수행한다.

terraform apply

# 실행 결과는 다음과 같다.

테라폼 실행을 통해 리소스가 1개 추가되었다는 걸 확인할 수 있고 실제로 생성된 내용을 비교해보자.

# 아래 명령어를 실행한다.
echo "ncloud_vpc.hashicat" | terraform console

# 결과를 바탕으로 네이버 클라우드 플랫폼 콘솔에서 비교해본다.

두 결과를 비교해보면 같은 값임을 확인할 수 있다. 특히 중요한 내용으로 네이버 클라우드 플랫폼 프로바이더는 리소스의 ID를 바탕으로 의존관계 등을 파악하고 동작하며 각종 CRUD에 사용된다는 점을 알아둬야 한다.

5.3.3 전체 실행하기

다음으로 main.tf 파일의 모든 주석을 해제하고 실행해본다. 이때, 이전에 이미 수행한 내용이 있어 바로 실행할 경우 의존성 문제로 에러가 나타나며 init을 다시 수행해준다.

# terraform apply
# 에러 발생

# terraform init -upgrade
# terraform apply
# 동작을 확인하면 yes를 입력한다.
# 결과는 다음과 같다.

결과로 나타나는 output 내용으로 생성된 server 리소스의 public_ip가 출력된다. 해당 주소로 접속해보면 지난번 콘솔을 통해 진행했던 내용과 같이 고양이 사진과 함께 Meow World 사용자 앱을 볼 수 있다.

지난 콘솔을 통한 실습부터 테라폼을 통한 리소스의 생성까지 같은 결과를 가져오는 두 가지의 방법을 진행해보았다. IaC를 통한 방법은 편리하며 세련되어 보이지만, 간단한 환경의 경우 오히려 오버엔지니어링이 발생할 수 있기 때문에 정말 IaC가 필요한지 늘 경계하는 자세가 필요하다고 생각하며 이번 워크샵을 마친다.

5.4 테라폼으로 리소스 제거하기

이번에 진행한 워크샵은 적지만 비용이 발생하는 내용이기 때문에 사용이 끝나면 반드시 자원을 정리해줘야 한다. 테라폼을 통해 생성한 자원은 간단한 명령어를 이용해 깨끗하게 제거할 수 있다. 아래 명령어를 사용한다.

terraform destroy
# 명령어 실행을 물어보면 yes를 입력한다.
# 시간이 걸리지만 결과는 다음과 같다.

6. 실습 종료

콘솔을 통해 진행한 내용은 생성했던 방법의 역순으로 제거해 나간다.

각 리소스들은 의존성이 존재하기 때문에 이를 무시하고 제거하려 한다면, 에러를 발생하며 제거할 수 없다는 팝업 알림이 뜨게 된다.

(예를 들어 콘솔에서 VPC를 생성하고 subnet을 생성하였기 때문에 VPC를 먼저 제거하려한다면 subnet이 남아있기 때문에 제거할 수 없다.)

main.tf의 리소스 설명은 이번 포스팅에서 포함하지 않았는데 이전 작업인 콘솔 과정을 수행해본 사용자라면 쉽게 이해할 수 있기 때문이다. 하지만 필요하다고 생각될 경우 4번째 게시글로 작성할 예정이다.

 

99. 사용 꿀팁

네이버 클라우드 유저 커뮤니티

교육

네이버 클라우드 플랫폼 관련 링크 모음 https://linktr.ee/navercloudplatform