코드형 인프라 (Infrastructure as Code, IaC)
https://woogieonxon.tistory.com/entry/%EC%BD%94%EB%93%9C%ED%98%95-%EC%9D%B8%ED%94%84%EB%9D%BCInfrastructure-as-Code-IaC%EB%9E%80
가상화 기술의 발전
VMware, Hyper-V와 같은 기술을 통해 여러대의 서버를 더 많이 쉽게 만들 수 있게 되었다.
하지만 기하급수적으로 늘어나는 서버들에 대한 프로비저닝과 운영에 대한 이슈가 발생하였다.
인력을 무한정으로 늘릴 수 없었기 때문에 서버 구축과 운영에 대한 자동화가 필요했다.
이러한 배경에서 프로그래밍 코드로 인프라를 구축/운영할 수 있는 IaC가 생겨나게 되었다.
IaC란?
IaC(Infrastructure as Code)는 코드로 인프라스트럭처를 관리한다는 개념
테라폼에서는 하시코프 설정 언어 HCL(Hashicorp Configuration Language)을 사용해 클라우드 리소스를 선언한다.
쉽게 말해, 인프라를 사람이 읽을 수 있는 코드로 만들 수 있다.
이를 통해 버전 관리, 공유 및 재사용이 가능하다.
IaC 종류
IaC는 영역별로 크게 두 종류로 나눌 수 있다.
Provisioning Tool (프로비저닝 도구)
일반적으로 운영팀의 담당자가 컴퓨터나 가상 호스트를 사용해 개발팀에서
필요한 라이브러리나 서비스를 설치 하는 것을 의미
프로비저닝 영역에서는 개발팀이 사용한 코드 버전과 동일한 버전을 사용해 네트워크, VM, DB 등을 구성
종류 : Terraform, Cloudformation
SCM Tool (구성 관리 도구)
구성관리는 성능부터 H/W 속성과 라이프사이클 전반에 걸친
요구사항, 설계 및 운영 정보의 일관성 등을 설정하고 유지하기 위한 시스템 프로세스
프로비저닝이 인프라에 대한 배포 위주에 진행된다면, 구성관리는 애플리케이션의 구성 설정을 관리하는 영역
종류 : Chef, Puppet, Ansible
Terraform
개념
테라폼(Terraform)은 하시코프(Hashicorp)에서 오픈소스로 개발중인
클라우드 인프라 스트럭처 자동화를 지향하는 코드로서의 인프라 스트럭처(IaC)도구이다.
쉽게말해, 코드를 통해 인프라 서버를 구축/운영할 수 있게 해주는 오픈 소스 소프트웨어이다.
공식문서 : https://www.terraform.io/docs
장점
자동화
수동으로 서버를 생성하는게 아닌 코드로 생성하기 때문에 서버 운영 및 관리가 모두 자동화 될 수 있다.
예를 들어, AWS에서 새로운 서버를 생성하기 위해서 AWS 콘솔에 로그인 할 필요없이
Terraform 코드를 실행 시키기만 하면 된다.
속도 & 안전
코드로 실행되기 때문에 사람이 수동으로 작업하는 것보다 훨씬 빠르며
또한 사람이 직접할 때 생길 수 있는 실수(Human Error)들을 방지할 수 있다.
문서화
모든 인프라가 코드로 기록 및 관리 되기 때문에 자동으로 문서화가 된다.
가장 큰 장점 중에 하나로, 많은 회사에서 인프라를 직접 구현하고 관리한 담당자를 제외하고는
전체 서버를 전부 파악하고 있는 사람이 없는 경우가 많다.
하지만 Terraform의 경우에는 새로 들어온 개발자라도 Terraform code를 보면 전체적인 구성을 이해할 수 있다.
형상관리
git을 통해 형상관리가 가능하며, 인프라의 변경 기록을 쉽게 볼 수 있다.
리뷰 및 테스트
수동으로 서버 작업을 할 때는, 실제로 실행하기 전에 리뷰 하는 것이 굉장히 힘들수 밖에 없었다.
그래서 문제가 발견 되었을 때는 이미 프로덕션 애플리케이션에 영향을 주고 난 후인 경우가 많았는데,
Terraform의 경우 코드 리뷰와 테스트를 통해 문제가 실제로 발생 되는 것을 어느 정도 예방할 수 있다.
구성
진행 순서
기본 구성 개념
공식문서 : https://learn.microsoft.com/ko-kr/azure/governance/policy/assign-policy-terraform
프로비저닝 (Provisioning)
어떤 프로세스나 서비스슬 실행하기 위한 준비 단계
크게 네트워크나 컴퓨팅 자원을 준비하는 작업
프로바이더 (Provider)
테라폼과 외부 서비스를 연결해주는 기능
프로바이더로는 AWS, GCP, Azure와 같은 범용 클라우드 서비스를 비롯해
Github, Datadog와 같은 특정 기능을 제공하는 서비스
리소스
프로바이더가 제공해주는 조작 가능한 대상의 최소 단위
예를 들어 AWS 프로바이더는 aws_instance 리소스 타입을 제공하고,
이 리소스 타입을 사용해 Amazon EC2의 가상 머신 리소스를 선언하고 조작하는 것이 가능
계획 (Plan)
terraform plan
테라폼 프로젝트 디렉터리 아래의 모든 .tf 파일의 내용을 실제로 적용 가능한지 확인하는 작업
적용 (apply)
terraform apply
테라폼 프로젝트 디렉터리 아래의 모든 .tf파일의 내용대로 리소스를 생성, 수정, 삭제하는 일을 적용
사용 관리 툴 (도구)
공식문서 : https://developer.hashicorp.com/terraform/docs/terraform-tools
CDKFT
Cloud Development Kit for Terraform
프로그래밍 언어를 사용하여 클라우드 애플리케이션 리소스를 모델링 및 프로비저닝할 수 있는
오픈 소스 소프트웨어 개발 프레임워크
VS Code
Visual Studio Code Extension
Terraform 언어 서버를 사용하여 VS Code에서 편집
Language Server
Sublime Text, vim 등과 같이 Language Server Protocol를 사용하는 편집기에서 편집
Console
복잡한 상태 데이터 및 Terraform 표현식으로 작업할 때 인프라를 개발하고 디버그
📋 참고 : https://btcd.tistory.com/20