개요
Ansible®과 Hashicorp Terraform은 IT 환경 자동화에 대해 코드형 인프라(Infrastructure as Code, IaC) 접근 방식을 수용하는 두 가지 오픈소스 툴입니다. 두 가지 툴 모두 인프라를 관리하는 데 매우 중요하지만 자동화 라이프사이클 내에서 각기 다른 전문적 역할을 수행합니다.
Terraform은 인프라를 안전하고 반복 가능한 방식으로 구축, 변경, 관리하기 위해 설계된 전용 IaC 툴입니다. Ansible은 서버, 네트워크 장치, 보안 툴, 하이브리드 환경 등에서 시스템을 구성하고 소프트웨어를 배포하며 복잡한 태스크를 오케스트레이션하기 위해 개발된 다목적 IT 자동화 엔진입니다. 가장 효과적인 현대적 자동화 전략에서는 통합 인프라 라이프사이클 관리를 위해 Terraform과 Ansible을 함께 사용합니다.
대규모 조직은 종종 핵심 오픈소스 Ansible에서 Red Hat® Ansible Automation Platform으로 이전하여 자동화 작업을 관리하고 확장합니다. Ansible Automation Platform은 중앙화된 거버넌스, Automation Analytics, 공식 지원과 같은 엔터프라이즈 기능을 추가합니다. Terraform의 인프라 프로비저닝 역할과 Ansible의 구성 기능, 그리고 Ansible Automation Platform의 자동화 확장 기능을 이해함으로써 팀은 엔드 투 엔드 자동화 전략을 개발할 수 있습니다.
코드형 인프라(Infrastructure as Code)란?
새로운 IT 환경의 프로비저닝은 많은 시간과 비용이 소요되고 수동적인 작업이었습니다. 가상화, 컨테이너, 클라우드 컴퓨팅 등으로 인해 더 많은 인프라가 더욱 빈번하게 변경됨에 따라 수동 프로세스에 대한 의존은 더 이상 감당할 수 없는 일이 되었습니다.
이러한 배경에서 IaC가 등장했습니다.
IaC는 수동 구성이나 하드웨어 조작 대신 기계가 읽을 수 있는 코드를 통해 IT 인프라를 관리하고 프로비저닝하는 프로세스입니다.
IaC의 도입은 개발자와 운영 팀의 관계를 근본적으로 전환합니다. 클라우드 콘솔에서 버튼을 클릭하거나 임시 스크립트에 의존할 필요 없이 완전한 인프라 사양이 포함된 구성 파일을 생성할 수 있습니다. 이는 배포, 스테이징, 프로덕션 등 어느 단계로 배포하든지 동일한 환경을 언제나 일관되게 프로비저닝하는 데 도움이 됩니다. IaC는 인프라를 편집, 배포 및 버전 관리가 가능한 파일로 코드화하고 기록함으로써 오류를 없애고, 배포를 가속화하고, 구성 드리프트를 유발하는 문서화되지 않은 변경 사항을 방지하는 데 도움이 됩니다.
IaC는 현대적인 DevOps와 클라우드 전략의 기반입니다. 이 방법론은 자동으로 실행되는 코드를 통해 인프라를 정의하기 때문에 해당 파일을 실제 작동하는 인프라로 전환할 수 있는 전문 툴이 필요합니다. Ansible, Red Hat Ansible Automation Platform, Terraform을 사용하면 IaC를 가속화하고 그 효과를 극대화할 수 있습니다. Terraform은 IaC 인프라 생성을 전문으로 하고, Ansible은 IaC 인프라 내부에서 실행되는 요소를 구성하는 데 특화되어 있습니다.
Red Hat 리소스
Ansible과 Terraform의 유사성
Terraform와 Ansible은 자동화 라이프사이클에서 담당하는 부분이 서로 다르지만 각 툴의 성공을 결정짓는 부분에 있어 핵심적인 공통점이 존재합니다.
에이전트리스(agentless) 설계
Ansible과 Terraform의 아키텍처는 모두 기존 자동화 시스템보다 실행하기가 더 쉽게 현대화되고 간소화되었습니다. 두 가지 툴 모두 에이전트리스이므로 각자 관리하는 서버나 리소스에 특수 소프트웨어나 지속적 에이전트를 설치할 필요가 없습니다. Terraform은 기본적으로 클라우드 공급업체 애플리케이션 프로그래밍 인터페이스(API)를 통해 통신하는 반면, Ansible은 보안 셸(SSH), API와 같은 표준 프로토콜을 통해 관리형 노드와 통신하여 태스크를 실행합니다.
오픈소스와 커뮤니티 에코시스템
Ansible과 Terraform은 모두 대규모 활성 사용자 기반을 갖춘 기본 오픈소스 프로젝트입니다. 이 커뮤니티 에코시스템에서는 즉시 사용 가능한 콘텐츠들로 구성된 광범위한 라이브러리를 제공합니다. Terraform의 경우 공급업체가 수천 개에 이르므로 거의 모든 퍼블릭 클라우드 및 플랫폼과 연동할 수 있습니다. 마찬가지로 Ansible 역시 거의 모든 구성 태스크를 위한 모듈과 플레이북을 제공합니다. 따라서 두 가지 툴 중 하나를 사용하는 팀은 솔루션과 동종 업계 지원을 빠르게 찾을 수 있습니다.
보완적 자동화 원리
마지막으로, Terraform과 Ansible은 인프라 자동화의 목표가 같습니다. 이 두 가지 툴은 특화된 분야가 서로 다르지만 기능적으로 중복되는 부분도 있습니다. 예를 들어 Ansible이 프로비저닝을 수행하고 Terraform이 기본 구성 스크립트를 실행하기도 합니다. 즉, 두 툴 모두 오류가 발생하기 쉬운 수동 IT 프로세스를 반복 가능하고 일관된 코드로 전환한다는 동일한 목적을 추구합니다. 이렇게 목적이 동일하기 때문에 Ansible과 Terraform을 결합하여 전체 워크플로우를 자동화할 수 있습니다.
Ansible과 Terraform을 통한 애플리케이션 배포 자동화, 인프라 최적화, 지속적 업데이트 및 트러블슈팅 지원. 재생 시간: 2분 46초
Ansible과 Terraform의 차이점
두 가지 툴 모두 IaC의 유형들이지만 서로 다른 방식으로 개발되어 각각의 주요 임무를 수행합니다. 이러한 차이점을 이해하면 태스크에 적합한 툴을 선택하거나 이 툴들을 통합하는 방법을 결정하는 데 도움이 됩니다.
선언적 vs. 절차적
가장 기본적인 차이점은 각 툴에 태스크를 지시하는 방식에 있습니다.
- Terraform에서는 선언적 구성 언어인 HCL(HashiCorp Configuration Language)을 사용합니다. 선언적이라는 것은 인프라의 최종 상태를 어떻게 원하는지를 정의한다는 뜻입니다. 최종 상태가 정의되면 Terraform의 엔진이 해당 상태에 도달하는 데 필요한 단계를 자동으로 결정하며, 모든 종속성을 대신 관리해 줍니다.
- 반면 Ansible은 자동화에 대해 대부분 절차적(또는 명령형) 접근 방식을 취합니다. 이 툴은 사람이 읽을 수 있는 YAML 형식으로 작성된 플레이북을 사용합니다. 절차적 접근 방식에서는 사용자가 원하는 결과를 달성하는 방법을 명시적인 단계적 지침으로 정의합니다. 이러한 태스크 기반의 접근 방식을 사용하면 실행 순서가 명확하기 때문에 트러블슈팅을 정확하게 제어하고 간소화할 수 있습니다. 그러나 많은 기본 Ansible 모듈이 선언적으로도 동작하며, 목표 시스템에서 원하는 구성 상태가 아닌 경우에만 변경 사항을 적용합니다.
스테이트풀 vs. 스테이트리스
스테이트풀이냐 스테이트리스냐에 따라 시간이 지나면서 각 툴에서 인프라를 확인하고 트래킹하는 방식이 달라집니다.
- Terraform은 스테이트풀입니다. 단일 진실 공급원으로 동작하는 상태 파일을 유지하며, 프로비저닝한 모든 인프라 리소스와 현재 구성을 트래킹합니다. 상태 파일은 Terraform이 리소스의 전체 라이프사이클을 관리하여 리소스를 안정적으로 프로비저닝하거나, 확장하거나, 더 이상 필요 없을 때는 사용 종료하도록 해주므로 반드시 필요합니다.
- Ansible은 대부분 스테이트리스입니다. 전체 인프라를 트래킹하는 영구적 상태 파일을 유지하지 않습니다. 그 대신, 동일한 태스크를 여러 번 실행하면 불필요한 변경 없이도 동일한 결과를 보장한다는 멱등성에 의존합니다. Ansible은 변경 사항을 적용하기 전에 목표 시스템에 대해 직접 쿼리하여 원하는 구성을 달성합니다.
변경 불가능 vs. 변경 가능
Ansible과 Terraform은 인프라 업데이트를 다루는 원리가 서로 다릅니다.
- Terraform은 변경 불가능한 인프라를 선호합니다. 상당한 규모의 변경이나 업데이트가 필요할 경우 Terraform은 종종 기존 리소스를 삭제하고 정확하게 구성된 새로운 리소스로 대체하는 방식을 선호합니다. 이러한 전략은 시간이 경과함에 따라 높아질 수 있는 복잡한 구성 오류의 위험성을 줄여줍니다.
- Ansible은 변경 가능한 인프라를 위해 개발되었습니다. 따라서 실행 중인 기존 시스템에 인플레이스 방식의 변경을 적용하는 데 탁월합니다. 이는 보안 패치 적용, 운영 체제 업데이트 실행 또는 쉽게 교체될 수 없는 서버의 방화벽 설정 조정과 같은 Day 1 및 Day 2 태스크에 필요합니다.
구성 드리프트
구성 드리프트란 프로덕션 환경에서 실행되는 인프라가 소스 코드에 정의된 내용에서 벗어나는 경우를 말합니다. Ansible과 Terraform 모두 구성 드리프트를 다루지만 방식은 다릅니다.
- Terraform은 영구적인 상태 파일을 사용하여 드리프트를 적극적으로 감지합니다. 이 툴은 현재 실행 중인 인프라를 상태 파일과 비교하여 불일치가 있는 경우 즉시 플래그를 지정할 수 있습니다.
- Ansible은 일반적으로 멱등성 태스크를 지속적으로 실행하고 활용함으로써 항상 원하는 구성을 적용해 드리프트를 완화합니다. 이를 통해 시스템이 원하는 상태에서 지나치게 벗어나는 것을 방지할 수 있습니다.
Ansible과 Terraform을 함께 사용하는 방법
Terraform과 Ansible 비교의 가장 핵심적인 결론은 둘 중 하나를 선택하는 것보다 둘을 함께 사용하는 것이 가장 효과적이라는 것입니다. 조직이 각 툴의 장점을 활용하면 인프라가 프로비저닝되는 순간부터 애플리케이션의 지속적인 배포 및 구성까지 완전한 엔드 투 엔드 자동화를 실현하는 데 도움이 됩니다.
라이프사이클 관리
가장 널리 받아들여지는 사례는 두 툴 간에 이루어지는 간편하고 순차적인 핸드오프 방식입니다. 먼저 Terraform이 서버, 네트워크 등과 같은 클라우드 인프라를 생성하는 Day 0 프로비저닝을 맡습니다. 인프라가 성공적으로 프로비저닝되면 Ansible이 인계를 받아 Day 1 구성을 담당하여 보안 정책을 적용하고 필요한 소프트웨어를 설치하며 새로운 리소스 내에서 애플리케이션 코드를 배포합니다. Ansible은 패치, 업데이트, 구성 변경 등과 같은 Day 2 오퍼레이션도 담당합니다.
Ansible을 이용한 오케스트레이션
복잡한 워크플로우의 경우 Ansible Automation Platform이 중앙 오케스트레이터 역할을 수행하여 광범위한 Terraform 실행을 자동화 프로세스 내에 포함시킬 수 있습니다. Ansible Automation Platform은 사전 프로비저닝 태스크를 실행하고 Terraform 배포를 트리거하여 인프라를 구축할 수 있습니다. 또한 애플리케이션 구성과 같은 사후 프로비저닝 태스크를 실행하는 동시에 트래킹을 목적으로 ServiceNow와 같은 IT 서비스 관리(ITSM) 툴과 통합할 수 있습니다.
Terraform과 Ansible Automation Platform 통합
Red Hat은 Ansible을 위한 인증된 Terraform 콘텐츠 컬렉션을 제공합니다. 컬렉션에는 HashiCorp Terraform을 사용하여 IaC를 관리하고 프로비저닝할 수 있는 모듈(HCP Terraform, Terraform Enterprise)이 포함됩니다. 이 컬렉션은 AWS CloudFormation, Azure Resource Manager, Helm 등 기타 Ansible용 클라우드 프로비저닝 툴과 유사한 자동화 기능을 지원합니다.
또한 Hashicorp는 Ansible과 상호작용할 수 있는 Terraform 프로바이더를 제공합니다. Terraform 프로바이더는 Terraform이 관리할 수 있는 리소스와 데이터 소스를 추가하는 플러그인입니다. 프로바이더는 Terraform이 설치하고 사용할 수 있도록 Terraform 구성에 선언되어야 합니다. Terraform용 Ansible 프로바이더를 사용하면 Terraform이 Ansible 인벤토리를 직접 관리할 수 있습니다. 이 프로바이더는 별도의 인벤토리 플러그인에게 새로 프로비저닝된 인프라에 대한 정보를 수동으로 수집하여 Ansible에 전달할 것을 요구하지 않고 인계 과정을 자동화합니다. 사용자는 Terraform 구성 내에서 직접 Ansible 인벤토리의 사용을 정의할 수 있으며, 이를 통해 Ansible Playbook이 새로운 호스트가 생성되는 즉시 해당 호스트에 대해 구성 태스크를 실행하도록 할 수 있습니다.
Red Hat Ansible Automation Platform을 사용해야 하는 이유
오픈소스 툴인 Terraform과 Ansible은 IaC의 기반을 제공합니다. 그러나 이러한 통합 워크플로우를 대규모 조직 전반에서 확장하고 관리할 경우 상당한 보안 및 일관성 문제가 발생할 수 있습니다. Red Hat Ansible Automation Platform은 이러한 복잡성을 줄여주며, 커뮤니티 자동화를 전략적 엔터프라이즈 솔루션으로 전환합니다. 이 플랫폼은 Terraform 프로비저닝과 지속적인 Ansible 구성을 모두 아우르는 복잡한 자동화 프로세스를 관리하는 데 필요한 중앙화된 제어 기능을 제공합니다.
오픈소스를 핵심으로 하는 Ansible Automation Platform은 조직에 전체 라이프사이클 지원을 제공하는 신뢰할 수 있는 서브스크립션 제품입니다. 커뮤니티 Ansible을 기반으로 하며, 수천 명의 글로벌 기여자들의 경험과 인텔리전스를 활용합니다. Ansible Automation Platform은 조직이 자동화 워크로드를 생성, 관리, 확장할 수 있도록 지원합니다. 하이브리드 클라우드, 엣지 위치, 네트워크, 보안, 인프라 및 기타 다양한 활용 사례를 포함하여 엔드 투 엔드 자동화를 배포하기 위한 유연하고 안정적이며 보안 중심적인 기반을 제공합니다.
Red Hat Ansible Automation Platform을 통한 CI/CD 간소화
Red Hat Ansible Automation Platform이 복잡한 IT 환경을 효율적으로 관리하고, 보안 운영을 자동화하고, 배포 시간을 가속화하는 데 어떻게 도움이 되는지 알아보세요.