[ED01-01] Terraform 시작하기
2021-04-28 수정중
Terraform 소개
Terraform 이란?
자원(Server, Storage, Network)을 프로그래밍 코드를 이용하여 필요한 인프라 환경을 구축(프로비저닝) 할 수 있는 도구를 의미합니다. 이때 사용되는 프로그래밍 코드는 HashiCorp Language(이하 표기 - HCL)를 이용합니다.
Terraform과 같이 프로그래밍 코드를 이용한 인프라 관리 방식을 Infrastructure as code(이하 표기 - IaC)라고 합니다.
즉, 프로그래밍 코드를 이용하여 가상 머신, 클라우드 자원, 보안 그룹, 네트워크 인터페이스 등을 할당하거나 관리할 수 있는 것이 바로 IaC 입니다.
현재 Terraform을 이용하여 거의 모든 인프라 환경(AWS, GCP, GitHub, Docker 등)을 관리 작업(구축, 배포, 유지보수)이 가능합니다. 우리는 이러한 Terraform을 이용하여 Docker, AWS, Azure 환경을 구성하는 실습을 다루어 보고자 합니다.
Infrastructure as Code (IaC)
프로그래밍 코드를 이용하여 인프라 환경을 관리하는 IaC 방식은 다음과 같이 다양한 장점을 내포하고 있습니다.
장점
Integrated Management
통합된 작업 영역과 인프라 세분화 및 분산한 모듈화 방식을 이용하여 작업자의 관리 운영 효율성을 향상 시킵니다.
통합된 작업영역은 특정 개발팀 또는 작업자의 작업 내용을 특정한 공간(GitHub, Terraform Enterprise 등)에 통합하여 관리하는 방식이며,
모듈화는 각 인프라를 세분화하여 모듈 형태로 구성함에 따라 기능의 분산과 단순함을 높이고, 모듈 상호간 이슈 영향도를 최소화 할 수 있습니다.
Easily Repeatable
작성한 코드 스크립트를 통하여 필요한 곳에 배포하여 재사용 가능하며, 동일한 환경을 구성 할 수 있습니다.
Easily Readable
각 인프라의 환경을 개별적으로 조사 및 확인하는 것이 아닌 코드 스크립트 내용만으로 직관적으로 구성을 파악할 수 있습니다.
Quickly Disaster Recovery
인프라 구성의 변경 및 추가된 사항을 버전 관리를 통하여 성능 문제와 버그, 이슈사항에 대하여 필요한 경우 롤백을 통하여 빠른 복원이 가능합니다.
또는 특이사항이 발생된 구성을 코드 스크립트를 수정 후, 배포를 통하여 수정사항을 빠르게 적용할 수 있습니다.
Quickly Provisioned Dev Environments
작성한 코드 스크립트를 이용하여 필요한 경우 동일한 운영환경을 개발 테스트용으로 구축이 가능합니다.
또한 재사용을 통하여 다수의 개발 테스트 환경을 구축할 수 있습니다.
위와 같은 장점으로 관리자(운영 및 개발자)의 작업 효율성을 더욱 높일 수 있습니다.
다음은 IaC의 단점을 안내합니다.
단점
Various infrastructure
관리 대상이 되는 모듈 영역 증가로 인한 관리 부담이 발생할 수 있습니다. 이는 전통적인 인프라 관리에서도 발생하는 단점입니다. 예로 멀티 클라우드 환경(AWS, GCP를 동시에 사용)을 사용하는 경우, 플랫폼의 다양화한 경우 각 영역에 대한 관리방법 및 내용을 관리자가 숙지하여야 한다는 단점이 있습니다.
이는 관리자의 업무영역을 분산하거나, 적절한 플랫폼만을 선정하여 사용하는 것으로 단점을 최소화할 수 있습니다.
Code restrictions
일반적인 프로그래밍 언어(Java, C, Go 등)과 다르게 제한된 코드 문법으로 인한 스크립트가 길어지는 단점이 있습니다.
이는 Cloud Development Kit (이하 - CDK)를 지원하는 도구를 통하여 단점을 해결할 수 있습니다.
Terraform은 개발 초기 단계이나 CDK를 지원하고 있으며, 이를 통하여 AWS CDK와 유사한 사용자 경험을 제공하고자 지원 계획 및 개발하고 있습니다.
Terraform Workflow (작업 절차)
Terraform을 설치 및 사용하기 전에 실제 작업 시 이루어지는 Workflow 단계를 알아 보겠습니다.
아래는 배포 작업에 대한 간단한 Workflow 단계를 안내 합니다.
Workflow
ⓐ Scope
주어진 프로젝트에 대해 요구사항을 확인하고 각 자원 할당 계획을 수립합니다.
ⓑ Author
수립한 계획에 따라 HCL을 이용하여 인프라 구성을 위한 코드 스크립트(구성파일)를 작성합니다.
ⓒ Initialize
작성한 코드 스크립트를 프로젝트 디렉토리에 배포하고, 해당 디렉토리 내에서 terraform init 명령어를 이용하여 Terraform 구성 플러그인 및 환경을 초기화 합니다.
* 실제 코드 스크립트를 통하여 인프라 환경을 적용하는 것은 아닙니다. 적용하기 위한 사전 환경을 조성하는 작업입니다.
ⓓ Plan & Apply
구성파일을 이용하여 사전에 적용될 인프라 환경 및 세부사항, 정상여부를 확인하는 것으로 Plan 단계가 있습니다.
이를 통해 배포할 사항을 비교 및 적합여부를 판단할 수 있습니다. Plan 단계 명령어는 terraform plan 명령어를 이용합니다.
이후 구성파일을 이용하여 실제 인프라 구성사항을 배포하고 적용하는 Apply 단계가 있습니다.
해당 단계가 실시되면 인프라 구성 상태파일, Log, 실제 리소스가 생성됩니다. Apply 단계 명령어는 terraform apply 명령어를 이용합니다.
정리하며
본 장에서 Terraform에 대하여 간략히 정리하였습니다.
해당 내용은 이전에 공부하여 OneNote에 저장한 것을 옮긴 것으로 수정사항이 있을 경우 추가 업데이트 할 예정
다음 장에서는 Terraform의 설치방법에 대하여 정리되어 있습니다.