※ 목차
▶ IAC
▶ Terraform
들어가기전에..
IT산업에 종사하면서 도구의 사용법을 익히는 것도 중요하지만,
그 뒷 배경 또한 중요합니다.
오늘은 IAC의 배경부터 관련 도구는 무엇이 있으며,
어떻게 동작하는 지에 대해 알아보는 시간을 가지겠습니다.
▶ Iac
1. 가상화 기술의 발전
- VM ware, Hyper-v와 같은 기술을 통해서 여러대의 서버를 더 많이 쉽게 만들 수 있게 되었습니다. 하지만 기하급수적으로 늘어나는 서버들에 대한 프로비저닝과 운영에 대한 이슈가 발생하였습니다. 인력을 무한정으로 늘릴 수 없었기 때문에 서버 구축과 운영에 대한 자동화가 필요했습니다. 이러한 배경에서 프로그래밍 코드로 인프라를 구축/운영할 수 있는 IAC 가 생겨나게 되었습니다.
2. Iac란?
- IaC(Infrastructure as Code)는 코드로 인프라스트럭처를 관리한다는 개념으로 테라폼에서는 하시코프 설정 언어 HCL(Hashicorp Configuration Language)을 사용해 클라우드 리소스를 선언합니다.
- 쉽게 말해, 인프라를 사람이 읽을 수 있는 코드 로 만들 수 있습니다. 이를 통해 버전 관리, 공유 및 재사용이 가능합니다.
3. Iac 종류
- Iac는 영역별로 크게 두 종류로 나눌 수 있습니다.
Iac 종류 | 설명 | 종류 |
Provisioning Tool (프로비저닝 도구) |
♠ 일반적으로 운영팀의 담당자가 컴퓨터나 가상 호스트를 사용해 개발팀에서 필요한 라이브러리나 서비스를 설치 하는 것을 의미합니다. 프로비저닝 영역에서는 개발팀이 사용한 코드 버전과 동일한 버전을 사용해 네트워크, VM, DB 등을 구성합니다. | ◆ Terraform ◆ Cloudformation |
SCM Tool (구성 관리 도구) |
♠ 구성관리는 성능부터 H/W 속성과 라이프사이클 전반에 걸친 요구사항, 설계 및 운영 정보 의 일관성 등을 설정하고 유지하기 위한 시스템 프로세스 입니다. 프로비저닝이 인프라에 대한 배포 위주에 진행된다면, 구성관리는 애플리케이션의 구성 설정을 관리 하는 영역입니다. | ◆ Chef ◆ Puppet ◆ Ansible |
참조문서 : https://medium.com/cloudnativeinfra/when-to-use-which-infrastructure-as-code-tool-665af289fbde
▶ Terraform
1. Terraform 개념
- 테라폼(Terraform)은 하시코프(Hashicorp)에서 오픈소스로 개발중인 클라우드 인프라스트럭처 자동화 를 지향하는 코드로서의 인프라스트럭처(IaC)도구입니다.
- 쉽게 말해, 코드를 통해 인프라 서버를 구축/운영 할 수 있게 해주는 오픈 소스 소프트웨어입니다.
공식문서 : https://www.terraform.io/docs
2. Terraform 장점
장점 | 설명 |
자동화 | ♠ 수동으로 서버를 생성하는 게 아닌 코드로 생성하기 때문에 서버 운영 및 관리가 모두 자동화 될 수 있습니다. ♠ 예를 들어, AWS에서 새로운 서버를 생성 하기 위해서 AWS 콘솔에 로그인할 필요없이 Terraform 코드를 실행시키기기만 하면 됩니다. |
속도 & 안전 |
♠ 코드로 실행 되기 때문에 사람이 수동으로 작업하는 것 보다 훨씬 빠르며 또한 사람이 직접 할 때 생길 수 있는 실수들을 방지할 수 있습니다. |
문서화 | ♠ 모든 인프라가 코드로 기록 및 관리 되기 때문에 자동으로 문서화가 됩니다. 가장 큰 장점 중에 하나로, 많은 회사에서 인프라를 직접 구현하고 관리한 담당자를 제외하고는 전체 서버를 전부 파악하고 있는 사람이 없는 경우가 많습니다. 하지만 Terraform의 경우에는 새로 들어온 개발자라도 Terraform code를 보면 전체적인 구성을 이해 할 수 있습니다. |
형상관리 | ♠ git 을 통해 형상관리가 가능하며, 인프라의 변경 기록을 쉽게 볼 수 있습니다. |
리뷰 및 테스트 |
♠ 수동으로 서버 작업을 할 때는, 실제로 실행하기 전에 리뷰 하는 것이 굉장히 힘들수 밖에 없었습니다. 그래서 문제가 발견 되었을 때는 이미 프로덕션 애플리케이션에 영향을 주고 난 후인 경우가 많았는데, Terraform의 경우 코드 리뷰와 테스트를 통해 문제가 실제로 발생 되는 것을 어느 정도 예방할 수 있습니다. |
3. Terraform 테라폼 구성
구성은 간단하게 알아보고 자세한 내용은 다음 글에 올려드리겠습니다.
<Terraform 진행순서>
<기본 구성 개념>
구성 | 설명 |
프로비저닝 (Provisioning) |
♠ 어떤 프로세스나 서비스슬 실행하기 위한 준비 단계 ♠ 크게 네트워크나 컴퓨팅 자원을 준비하는 작업 |
프로바이더 (Provider) |
♠ 테라폼과 외부 서비스를 연결해주는 기능 ♠ 프로바이더로는 AWS, GCP, Azure와 같은 범용 클라우드 서비스를 비롯해 Github, Datadog와 같은 특정 기능을 제공하는 서비스 |
리소스 | ♠ 프로바이더가 제공해주는 조작 가능한 대상의 최소 단위 ♠ 예를 들어 AWS 프로바이더는 aws_instance 리소스 타입을 제공하고, 이 리소스 타입을 사용해 Amazon EC2의 가상 머신 리소스를 선언하고 조작하는 것이 가능 |
계획 (Plan) |
♠ 테라폼 프로젝트 디렉터리 아래의 모든 .tf 파일의 내용을 실제로 적용 가능한지 확인하는 작업 terraform plan |
적용 (apply) |
♠ 테라폼 프로젝트 디렉터리 아래의 모든 .tf파일의 내용대로 리소스를 생성, 수정, 삭제하는 일을 적용 ♠ terraform apply |
공식문서 : https://docs.microsoft.com/ko-kr/azure/governance/policy/assign-policy-terraform
4. 사용 관리 툴
도구 | 설명 |
CDKFT | ♠ Cloud Development Kit for Terraform ♠ 프로그래밍 언어를 사용하여 클라우드 애플리케이션 리소스를 모델링 및 프로비저닝할 수 있는 오픈 소스 소프트웨어 개발 프레임워크 |
VSCode | ♠ Visual Studio Code Extension ♠ Terraform 언어 서버를 사용하여 VS Code에서 편집 |
Language Server | ♠ Sublime Text, vim 등과 같이 Language Server Protocol를 사용하는 편집기에서 편집 |
Console | ♠ 복잡한 상태 데이터 및 Terraform 표현식으로 작업할 때 인프라를 개발하고 디버그 |
공식문서 : https://www.terraform.io/docs/terraform-tools
이상으로 Terraform의 개념에 대해서 알아봤습니다.
다음 주제는 Ansible의 개념에 대해서 살펴볼 예정이니 뜨거운 관심 바랍니다:)
'INFRA > Operation' 카테고리의 다른 글
Linux Terraform & Ansible 설치 방법 (0) | 2022.05.10 |
---|---|
참고 : Terraform & Ansible외의 도구 개념 및 관계 - 2 (0) | 2022.05.02 |
참고 : terraform & Ansible외의 도구 개념 및 관계 - 1 (0) | 2022.04.28 |
Terraform & Ansible 관계 (0) | 2022.04.20 |
Ansible 개념 (0) | 2022.04.14 |
댓글