Terraform & Ansible
<aside>
<img src="/icons/towel_pink.svg" alt="/icons/towel_pink.svg" width="40px" />
각각의 도구의 목적
- Terraform : 오픈소스로, Ioc 플랫폼
- Ansible : 온프소스 구성 관리 도구
</aside>
<aside>
<img src="/icons/libra_yellow.svg" alt="/icons/libra_yellow.svg" width="40px" />
유사점
- 새로운 클라우드 인프라를 프로비저닝하고 필요한 애플리케이션 구성 요소를 동일하게 구성
- Agent 없음
접속법
- Terraform
- 클라우드 공급자 API를 사용하여 인프라를 만들고 기본 구성 작업은 SSH를 사용하여 수행
- Ansible
- SSH를 사용하여 모든 구성 작업 수행
</aside>
<aside>
<img src="/icons/branch-create_purple.svg" alt="/icons/branch-create_purple.svg" width="40px" />
차이점
-
오케스트레이션 VS 구성 관리
- 오케스트레이션/프로비저닝 : 가상 머신, 네트워크, 네트워크 구성 요소, 데이터베이스 등의 인프라를 만드는 프로세스
- 구성관리 : 소프트웨어 구성 요소 설치, OS 구성 작업, 네트워크 및 방화벽 구성을 자동화하는 프로세스

- Terraform(오케스트레이션)
- 인프라 관리를 위한 포괄적인 솔루션 제공
- 클라우드 제공자 API를 사용하여 선언된 리소스를 기반으로 인프라를 프로비저닝 및 디프로비저닝
- Ansible(구성 관리)
- 클라우드 인프라를 프로비저닝할 수도 있지만 충분히 포괄적이 않음
- 주로 구성 관리에 맞춰져 있으며 애플리케이션과 종속성을 최신 상태로 유지하는 프로세스
-
선언적 VS 절차적
- Terraform
- Iac 작성에 사용
- 선언적 형식인 HCL 사용하고 코드가 작성된 순서가 중요하지 않음
- 코드는 여러 파일에 분산 가능
- Terraform은 코드를 어떻게 작성이 되어도 종속성을 식별
- 기존 인프라를 작성하거나 코드로 쉽게 변환 가능
- Ansible
- Yaml 구문을 사용하여 대상 인프라에서 수행할 절차를 정의
- Yaml script는 절차적 언어로 위 → 아래로 실행
- Ansible 스크립트를 Ansible Playbook이라 칭함
- 특정의 일련의 작업을 수행해야 하는 경우 playbook에서 동일한 작업을 정의하고 해당 작업은 작성된 순서대로 수행
- ex) root user로 가상 머신에 Apache 서버를 설치하려면 설치 작업을 정의 하기 전에 사용자 생성 단계를 작성해야함
-
변경 가능 VS 불변
- Terrafirm
- 원하는 인프라 상태를 입력으로 가져와 프로비저닝
- 변경 사항이 도입 시 변경 사항 자체의 특성에 따라 실행
- 인프라를 재부팅하거나 교체하지 않고 변경 사항을 구현할 수 없는 경우 Terraform은 인프라를 변경
- ex) AWS EC2 instance에서 instance를 교체해도 리소스가 교체되지 않지만 AMI(image)를 변경하면 리소스가 교체
- Ansible
- 인프라 상태 기본적으로 변경 X
- 최신 버전의 playbook에 따라 구성 변경 사항을 일관되게 유지하려고 관리
- 변경 사항은 기본 인프라의 “교체”에 영향을 주지않고 지정된 구성 요소의 구성만 복구하거나 수정 가능
- Ansible에서 관리하는 서버는 수행한 구성 변경 사항을 기록
- 관리가 제대로 되지 않ㅇ르 시 다른 서버가 다른 구성을 가질 수 있음
</aside>
<aside>
<img src="/icons/airplane_green.svg" alt="/icons/airplane_green.svg" width="40px" />
best?
-
Terraform은 클라우드 인프라 구성에 적합하고 Ansible은 인프라 내의 서버 구성에 사용 Terraform에는 Ansible용 provisioning plugin이 없지만 많은 사람들이 Terraform으로 서버를 만들고 Ansible로 서버를 구성합니다. Terraform내에서 필요한 Ansible role들을 호출할 수도 있음
-
Terraform은 불변성(immutability)를 염두에 두고 설계 되어있음. 변하지 않는 infrastructure를 기본적인 방식으로 처리하는 provisioning tool, 따라서 configuration management tool들을 거부할 때 가장 좋은 선택으로 볼 수 있음. Terraform은 더 직관적인 infrastructure orchestration을 위해 만들어 졌으며 Terraform의 모든 업데이트는 이 직관적인 infra를 위해 전념중이기 때문
-
Ansible은 configuration management에 최적화 되어 있음. Ansible이 orchestration을 수행할 수는 있지만 주어진 환경에 가장 적합한(가장 빠른) tool을 사용하는 것이 좋음
</aside>