-
01. 왜 테라폼인가24년 11월 이전/Terraform Up and Running 2021. 5. 17. 22:17반응형
이 문서는 책 "테라폼 설치에서 운영까지"을 읽고 작성되었습니다. 최대한 요약해서 책 내용을 최소로 하는데 목표를 두고 있어서, 더 친절하고 정확한 내용을 원하신다면 책을 구매하시는 것을 추천드립니다. => 책 링크
Devops란 무엇인가
Devops
의 목적은 소프트웨어를 전달하기 위한 절차와 방법을 훨씬 더 효율적으로 만드는 것이다. 잘 적용된Devops
는 서비스 개발/운영/배포에 걸리는 소요 시간과 비용을 매우 크게 절감할 수 있다.Devops
의 핵심 가치는 크게 4가지가 있다.- 문화
- 자동화
- 측정
- 공유
이 책에서는
자동화
에 대한 기술에 초점을 맞춘다.IaC란 무엇인가
IaC(Infrastructure as Code)
란 코드 형태로 인프라를 작성, 정의, 배포, 업데이트하는 것을 의미한다. 인프라를 관리하는 모든 것을 코드 형태로 관리하는 것이다.IaC
의 종류는 크게 다음의 4가지가 있다.- 애드 훅 스크립트
- 구성 관리 도구
- 서버 템플릿 도구
- 서버 프로비전 도구
애드 훅 스크립트는
Python
,Ruby
,Bash
등의 스크립트 언어로, 인프라를 관리하는 것이다. 모든IaC
의 기본이라고 보면 된다. 매우 큰 장점은 도입하기가 쉽다는 것이다. 반면에 개발자/운영자 역량에 따라 코드 품질, 구조가 매우 상이하다는 단점이 있다.구성 관리 도구에는
Ansible
,Puppet
,Chef
등의 기술들이 있다. 서버에 소프트웨어를 설치/관리하는 목적으로 사용한다. 최근에는 마스터만 있어도 운영 가능한Ansible
이 가장 핫하다. 이들이 애드 훅 스크립트보다 좋은 점은 다음과 같다.- 명확하고 동일한 코딩 규칙
- 멱등성
- 분산형 구조
간단하게 말하면 애드 훅 스크립트는 소규모, 단발성에 좋고 구성 관리 도구는 대규모 분산 환경에 알맞은 기술이라고 보면 된다.
서버 템플릿 도구에는
Docker
,Packer
,Vargrant
등의 기술이 있다. 쉽게 설명하면, 설치 구성품이 저장된 서버의 스냅샷을 이미지로 만들어서 서버 생성 시에 이 이미지를 이용하는 것이다. 서버의 이미지는 크게 가상 머신과 컨테이너로 구분할 수 있다. 서버 템플릿 도구는Immutable Infrastrucutre
를 만드는데 필수 불가결한 기술이며, 함수형 프로그래밍처럼 가변적인 변수를 제거하여 항상 값을 불변으로 유지하는 것이 큰 특징이다.서버 템플릿 도구만으로는 구성 관리 도구를 모두 대체할 수 없다. 서버 프로비전 도구와 함께여야 비로소 대체가 가능하다. 서버 프로비전 도구는 서버 자체를 구성하기 위한 도구로써
Terraform
,CloudFormation
등의 기술이 있다. 인스턴스는 물론, 데이터베이스, 네트워크, 서브넷 등 여러 인프라 요소들을 구성할 수 있다.이것은 지극히 나의 생각인데 자신의 회사가
AWS
종속적인 회사라면,AWS
에서 제공하는 서버 템플릿 도구인Image Builder
, 서버 프로비전 도구인CloudFormation
을 통해서Immutable Infrastrucutre
를 구성하는 것이 좋다. 반면 여러 인프라 기술이 혼합된 경우, 하이브리드 형태라면 서버 템플릿 도구는Packer
, 서버 프로비전 도구는Terraform
조합으로 인프라스트럭처를 구성하는 것이 좋다.이젠
IaC
의 장점을 알아보자. 책에 나온 장점은 다음과 같다.- 셀프 서비스
- 속도와 안정성
- 문서화
- 버전 관리
- 확인 및 검사
- 재사용성
IaC
로 배포 작업을 자동화하게 되면 개발자가 원하는 시점에 배포할 수 있으며, 컴퓨팅 리소스가 배포하기 때문에 수작업보다 빠르고 안전하게 배포가 가능하다. 또한 코드이기 떄문에 그 자체로 문서화가 된다고 볼 수 있으며, 변경 사항과 커밋 이력이 남기 때문에 버전 관리도 할 수 있다. 코드 리뷰를 통해서 변경되는 인프라스트럭처를 확인할 수 있고 모듈 형태로 재사용할 수가 있다. 개인적으로IaC
는 그냥 코드가 갖는 장점을 모두 가져간다라고 보면 될 것 같다.Terraform의 장점
다른
IaC
도구 특히,Ansible
과 같은 설정 관리 도구에 비해서Terraform
이 갖는 장점은 다음과 같다.- 선언형 언어이다.
- 마스터/에이전트가 아니다.
요즘은 정말 많은 곳에서
MSA
를 도입하고 있다.MSA
에 적절한 인프라스트럭처는 바로Immutable Infrastructure
이다. 이에 적절한 언어는 바로 선언형 언어이다.Ansible
과 같은 구성 관리 도구는 보통 절차형 언어라고 보면 된다. 처음 인프라스트럭처를 구성할 때는 구성 관리 도구와 서버 프로비전 도구는 동일한 결과를 나타낸다. 하지만 그 다음부터가 복잡하다. 이 예를 한 번 살펴보자. 만약 인프라스트럭처의 10대의 서버가 필요하다고 해보자.Ansible
의 경우는 다음 코드로 그 구성을 할 수 있다.- ec2: count: 10 image: ami-40d28157 instance_type: t2.micro
Terraform
은 다음과 같이 구성할 수 있다.resource "aws_instance" "example" { count = 10 ami = "ami-40d28157" instance_type = "t2.micro" }
근데 5대를 추가해야 한다고 해보자
Ansible
은 다음과 같이 코드를 업데이트 해야 한다.- ec2: count: 5 # 이미 10대가 있으니까 나머지 5대 image: ami-40d28157 instance_type: t2.micro
Terraform
은 다음과 같이 코드를 업데이트한다.resource "aws_instance" "example" { count = 15 ami = "ami-40d28157" instance_type = "t2.micro" }
여기서 중요한 점은
Terraform
은 구성될 인프라스트럭처의 "최종 결과"를 선언한다는 것이다.Ansible
의 경우에는 변경 이력을 모두 알고 있어야 원하는 인프라스트럭처 구성을 할 수 있다. 만약 자신은 10대라고 생각하고 5대를 추가했는데 이미 누군가 2대를 추가하면 어떨 것 같은가? 이러한 변경 이력을 모르면 결국 리소스 낭비가 이루어진다는 것이다. 이런 점에서Terraform
은 매우 큰 장점을 가지고 있다.또한 마스터/에이전트 구조가 아니다. 따라서 서버를 나눌 필요도 없으며 모든 서버에 설치할 필요도 없다. 일반적으로는 (
Terraform
을 설치해서 인프라스트럭처를 관리하는 용도의 서버를 1대 두는 듯 하다.) 구성 관리 도구는Ansible
을 제외한 나머지 기술들은 모두 마스터 서버와 각 서버들에 에이전트를 설치해야 한다. 이는 운영하는데 복잡도를 높이는 한 요인이 된다.Terraform
은 운영 면에서도 구성 관리 도구에 비해 쉽다는 장점을 갖게 된다.뭐 매우 큰 커뮤니티라는 장점이 있긴 한데
IaC
기술 중에서는 비교적 가장 최신의 기술이기 때문에(아직 1.x도 안됐다..) 덜 성숙했다는 단점이 더 커서 이는 생략한다.728x90'레거시 > Terraform Up and Running' 카테고리의 다른 글
06. 테라폼을 팀에서 사용하기 (0) 2021.06.16 05. 테라폼 팁과 요령: 반복문, 조건문, 배포 및 주의사항 (1) 2021.06.14 04. 테라폼 모듈 (0) 2021.06.11 03. 테라폼 상태 관리 (0) 2021.06.02 02. 테라폼 시작하기 (0) 2021.05.26