Terraform을 활용하여 네이버클라우드플랫폼 인프라 생성 및 관리하는 방안에 대해 소개합니다. | Introduce how to create and manage an infrastructure for Naver Cloud Platform by utilizing Terraform.
2. 코드 형태의 인프라 및 도구
코드 형태 인프라의 이해
Infrastructure as code (IAC)는 코드 버전 관리와 같은 소프트웨어 개발 기술을 사용하
여 명시적인 코드 형태로 인프라를 프로비저닝하고 관리하는 방식이며, 또한 인프라가 코
드를 통해 정의되므로 인프라와 서버를 표준화된 패턴을 사용하여 배포하고, 최신 패치와
버전으로 업데이트하거나, 복제를 통해 다양한 환경에 동일한 인프라 구성 매칭이 가능하
다.
N A V E R CLOUD PLA TFORM – Terra fo rm2/
*.tf
3. 코드 형태 인프라의 이점
IAC로 인프라 리소스 구성을 자동화 하였을때 self-service 형태로 인프라를 서비스화 가
능하며, 빠르고 안전하게 리소스를 증설 및 복구가 가능하다. 또한 명시적인 코드 형태 관
리를 통해 문서화와 버전 관리가 손쉬워 변경 이력 및 서비스 영향도에 대해 명확하게 파
악 가능하다.
N A V E R CLOUD PLA TFORM – Terra fo rm3/
출처 : 2017 state of devops report
4. 코드 형태의 인프라 구성 도구
클라우드 플랫폼 별 IAC 도구 존재하며, 각 클라우드 API를 통해 Mashup 인터페이스 형
태로 제공하는 Terraform도 존재
도구 특성
AWS CloudFormation
AWS 리소스 생성을 위한 IAC 도구, 템플릿은 YAML, JSON 포맷
사용, Rollback Triggers 제공
Google Cloud Deployment Manager
GCP 리소스 생성을 위한 IAC 도구, 템플릿은 YAML, Python,
Jinja2 포맷 지원
Terraform
멀티클라우드 환경에서 동일한 인터페이스 형태(Terraform api)
로 각 플랫폼 별 리소스 생성 IAC 도구, 템플릿은 HCL(.tf), Json
포맷 지원
N A V E R CLOUD PLA TFORM – Terra fo rm4/
5. N A V E R CLOUD PLA TFORM – Terra fo rm5/
Hashicorp Terraform
특정 클라우드 플랫폼에 종속되지 않고 멀티 클라우드 환경에서 사용가능하며, 인프라를
코드화 하여 관리 및 버저닝 가능하다. 그리고 실 환경에 적용 전 테스트 기능(plan)을 제
공하며 서비스 영향도를 사전에 확인 가능하다.
6. N A V E R CLOUD PLA TFORM – S erver I ma ge Bui lder6/
Terraform 특성
Infrastructure as Code
Execution Plans
Resource Graph
Change Automation
8. Terraform Workflow
N A V E R CLOUD PLA TFORM – Terra fo rm8/
Plan Apply
*.tfstate.*
Configure Cloud Provider
Define Infrastructure
HCL
9. Terraform graph
프로바이더 별 리소스 간 종속성 있음
리소스 간 종속성은 Terraform 자체 파악 후 리소스 생성
Dependency graph 확인 : terraform graph
DOT을 이미지로 변환 하기 위해 다양한 툴 존재 : Graphviz /Graphviz Online
N A V E R CLOUD PLA TFORM – Terra fo rm9/
10. Demo Architecture
NAVER CLOUD PLATFORM
KR-2
RR
Web Servers
KR-1
NAS
HTTP 80
HTTP 80
Public LoadBalancer
”tf_webinar_lb"
N A V E R CLOUD PLA TFORM – Terra fo rm10/
11. Terraform 설치 in NAVER Cloud Platform
OS 맞는 Terraform 패키지 다운로드
NCP용 프로바이더(바이너리 파일) 다운로드
설치 확인
$wget https://releases.hashicorp.com/terraform/0.11.8/terraform_0.11.8_linux_amd64.zip 1903
$unzip terraform_0.11.8_linux_amd64.zip && mv terraform /usr/bin/
$wget https://github.com/NaverCloudPlatform/terraform-provider-ncloud/releases/download/v1.3.1/terraform-
provider-ncloud_linux_amd64_1.3.1.zip
$unzip terraform-provider-ncloud_linux_amd64_1.0.0.zip && mv terraform-provider-ncloud /usr/bin/
N A V E R CLOUD PLA TFORM – Terra fo rm11/
21. destroy
N A V E R CLOUD PLA TFORM – Terra fo rm21/
parallel
22. Demo
N A V E R C L O U D P L A T F O RM - C l o u d T r a n s f o rm a ti o n2 2 /
23. Plan & .tf.state & apply
*.tf
Desired State
.tfstate
Current State
N A V E R CLOUD PLA TFORM – Terra fo rm23/
• plan & apply 실행 전 real 인프라 환경과 .tfstate 파일 비교(refreshing)
• plan 실행 시 .tfstate 파일 베이스로 생성, 삭제, 변경되는 리소스를 visualizing
• apply 실행 후 .tfstate 파일을 업데이트
• 버저닝과 오류 발생시 rollback, 보안을 위해 .tfstate 파일은 원격지에 보관을 권장
NAVER CLOUD PLATFORM
KR-2
RR
Web
Servers
KR-1
NAS
HTTP 80
HTTP 80
Public
LoadBalancer
24. Terraform in NAVER Cloud Platform 의 한계
제어 가능한 Resources 제약
ACG의 경우 이미 생성된 것을 하드코딩해서만 사용 가능
N A V E R CLOUD PLA TFORM – Terra fo rm24/
25. 참고 URL
NCP Terraform github
NCP 프로바이더 다운로드 페이지
GraphvizOnline
N A V E R CLOUD PLA TFORM – Terra fo rm25/
26. Quiz
N A V E R C L O U D P L A T F O RM - C l o u d T r a n s f o rm a ti o n2 6 /
27. N A V E R C L O U D P L A T F O RM - C l o u d T r a n s f o rm a ti o n2 7 /
Thank you