La foret rouge
Published on

Ansible과 Terraform 비교

Authors
  • avatar
    Name
    신주용

Ansible, Terraform 비교

AnsibleTerraform은 IT 인프라 구성과 자동화 분야에서 많이 사용되는 오픈소스 도구입니다. 이 두 가지가 어떤 점이 다른지 간단하게 비교해보았습니다1234.

AnsibleTerraform
주요 사용 목적
  • 구성 관리 및 배포
  • IT 시스템 상태 관리, 소프트웨어 설치 및 설정 자동화
  • IaC(Infrastructure as Code) 프로비저닝 및 관리
  • 클라우드 인프라의 생성 및 관리, 인프라 상태 유지
언어 및 실행 방식
  • 원하는 상태에 도달하는 단계를 정의하는 절차적 접근
    • (어떤 모듈은 선언적으로 작동하기도 함)
  • YAML문법으로 Inventory, Playbook 작성
  • CLI 기반이나, 웹 UI도 있음
  • 원하는 상태를 정의하는 선언적 접근
  • HCL(HashiCorp Configuration Language) 사용해 정의
  • 현재 상태가 원하는 상태와 일치하는지 비교
  • CLI 기반이나, 웹 UI도 있음
프로비저닝 및 구성 관리
  • Agentless 방식
  • SSH를 통해 원격으로 명령 실행 (참고)
  • 클라우드 공급자 API를 사용해 인프라 생성 및 관리
사용 사례
  • 설정값 관리: 패키지 리포지토리, 계정, 네트워크 설정 등
  • CI/CD: playbook에 최신 코드 fetch , 서비스 재시작 등 필요한 단계 정의
  • 네트워크: 네트워크 자동화를 위해 설계된 ansible 모듈 활용
  • 보안: 방화벽 구성, 사용자 및 권한 관리, 침입 탐지 시스템 배포 등
  • DR: 백업 예약, 백업 파일 보존, 복구 절차 오케스트레이션 등
  • IaC
    • 클라우드 배포: 단일 클라우드, 멀티 클라우드
    • K8s 배포 관리: EKS(aws), AKS(Azure) 등
    • HA/DR 구성
  • 환경별 구성 편의: 위 구성 시 변수를 사용하고 환경별로 값을 다르게 넣어서 프로비저닝
설치 환경
  • Control Node는 Linux, macOS 또는 WSL(Windows 직접 설치 불가)
  • Managed Node는 SSH 연결, Python 실행 가능해야 함.
  • Terraform을 실행할 호스트의 운영체제 제약 없음

Ansible과 Terraform에 사용되는 파일 비교

Ansible과 Terraform에서 사용하는 파일 내용도 그 특성을 잘 보여줍니다. 우선 Ansible을 사용하려면 Ansible이 관리할 대상(호스트) 목록을 정의하는 inventory와 그 대상 호스트에서 실행할 작업 절차를 정의하는 playbook 파일을 작성해야 합니다. 해당 파일 예시는 아래와 같습니다.

ansible files

특히 Ansible playbook은 bash 스크립트 파일을 YAML 문법으로 적은 것 같습니다. 내가 원하는 어떤 일을 하기 위해 무슨 무슨 명령어를 순서대로 실행하는지를 그대로 적은 느낌입니다.

반면 Terraform은 기본적으로는 main.tf 파일 하나에 다 작성해도 되고(일반적으로는 용도별로 파일을 분리) 여기에는 각 리소스의 '원하는 상태'를 정의합니다. Terraform main.tf 파일의 예시는 아래와 같습니다.

terraform files

Ansible 파일과는 달리 과정보다는 "Azure에서는 가상 네트워크, 서브넷, ..., 가상머신이 필요한데, 가상 머신은 어떤 크기, 어떤 OS 디스크, 어떤 운영체제를 사용해야 해"를 정해두는 방식입니다.

마무리

Ansible과 Terraform 비교 부분의 '주요 사용 목적' 행과 실제 파일 비교에서 보신 것과 같이 Ansible은 구성 관리, 소프트웨어 설치 및 설정 자동화에 더 특화되어 있고, Terraform은 클라우드 또는 VM 가상화 환경에서 인프라 생성 및 관리에 더 특화된 툴입니다.

따라서 이 둘은 어느 한 쪽이 더 좋고 그것만 써야되는 것이 아니라 병행해서 사용하는 경우가 많은 것 같습니다. 예를 들어 Terraform을 사용해 클라우드에 필요한 인프라를 프로비저닝하고 그 다음 Ansible로 프로비저닝 된 네트워크 장비의 설정값을 변경하거나 서버를 구성하고 애플리케이션을 배포하는 식으로 말이죠. (이 시나리오로 간단하게 테스트 중인데, GitHub repo 링크에서 확인하실 수 있습니다.)

Ansible이나 Terraform 같은 자동화 도구는 특히 비슷한 작업을 반복적으로 수행할 때 유용합니다. 비슷한 구성의 리소스를 여러 개 생성해야 할 때 클라우드 웹 포털에서 마우스를 옮겨가며 똑같은 가상 머신을 여러 대 만들 필요 없이 Terraform으로 count=n 옵션을 주면 손쉽게 동일 구성의 n개의 리소스를 만들 수 있습니다. 그리고 그 여러 대 장비에서 똑같은 스크립트를 실행시켜 필요한 설정과 서비스를 구성해야 할 때도 Ansible을 활용하면 Control node 한 대에서 playbook을 실행하는 명령어 한 번만 입력하면 됩니다. 이와 같은 자동화 도구를 잘 익혀 편하게 일할 수 있길 바랍니다.

참고: 이 글에서 언급되었으나 깊게 설명하지 않은 내용입니다.

  • IaC(Infrastructure as Code)
  • Automation

Footnotes

  1. Red Hat. "Ansible과 Terraform 비교 설명." www.redhat.com. https://www.redhat.com/ko/topics/automation/ansible-vs-terraform (accessed Aug. 18, 2024).

  2. zero. “Terraform Cloud와 Terraform API를 활용 한 Self Provisioning 구현 하기.” DEVOCEAN. https://devocean.sk.com/blog/techBoardDetail.do?ID=164401 (accessed Aug. 21, 2024).

  3. Ioannis Moustakis. “7 Ansible Use Cases - Management & Automation Examples.” spacelift. https://spacelift.io/blog/ansible-use-cases (accessed Aug. 21, 2024).

  4. Flavius Dinu. “9 Terraform Use Cases for Your Infrastructure as Code.” spacelift. https://spacelift.io/blog/terraform-use-cases (accessed Aug. 21, 2024).