출처: https://www.redhat.com/en/topics/automation/ansible-vs-terraform
개요
Red Hat® Ansible® Automation Platform과 HashiCorp Terraform은 모두 오픈 소스 기반 자동화 제품으로, IT 환경을 자동화하기 위한 Infrastructure as Code(IaC) 방식을 채택하고 있습니다.
귀사에 맞는 이러한 솔루션을 평가하는 것은 단순한 비교가 아닙니다. 자동화를 위한 “올바른” 방법 이나 사용할 자동화 도구가 단 하나만 있는 것이 아니듯이, 문제 해결 방법도 단 하나만 있는 것이 아니기 때문입니다. 귀사의 비즈니스에 필요한 것은 동종 업계의 다른 기업의 요구 사항과 완전히 다릅니다.
알아야 할 자동화 용어
자동화 솔루션을 조사하다 보면 제품의 주요 차이점과 기능을 설명하는 데 사용되는 다양한 용어를 접하셨을 것입니다. 가장 일반적인 용어 몇 가지를 정의하고, 이 용어들이 서로 어떻게 연관되는지, 그리고 Ansible과 Terraform과의 연관성은 어떤지 살펴보겠습니다.
오케스트레이션(Orchestration)은 여러 워크플로를 조율하여 실행하는 것을 말합니다. 각 워크플로는 하나 이상의 작업을 실행합니다. 이러한 워크플로를 함께 조율하면 복잡한 시스템, 애플리케이션 및 서비스의 구성과 관리를 자동화합니다. 이러한 조율은 일반적으로 정책에 정의된 사전 설정된 규칙을 따릅니다. 오케스트레이션은 여러 자동화 솔루션을 조율할 수도 있습니다 . 이러한 자동화 솔루션은 차례로 자동화 워크플로를 실행합니다.
Ansible과 Terraform은 특정 정책에 따라 여러 자동화 워크플로를 순차적으로 호출할 수 있으므로 오케스트레이터 역할을 할 수 있습니다. Ansible에는 Terraform을 포함한 다른 자동화 도구에 연결하고 관리할 수 있는 기본 제공 모듈이 있습니다 . 따라서 Ansible을 모든 팀의 최상위 공통 언어로 사용하여 전체 IT 자산의 자동화 접근 방식을 표준화할 수 있습니다.
프로비저닝(Provisioning)은 애플리케이션과 서비스를 위한 IT 인프라를 만들고 배포하는 프로세스입니다
Ansible과 Terraform 모두 IT 인프라를 프로비저닝(및 프로비저닝 해제)할 수 있습니다. Ansible은 앱과 서비스도 프로비저닝할 수 있습니다.
구성 관리(Configuration Management)란 인프라, 애플리케이션 및 서비스의 구성을 정의하고 유지 관리하는 프로세스입니다.
다른 많은 자동화 솔루션과 마찬가지로 Ansible과 Terraform은 모두 구성을 정의하고 다양한 인프라 대상에 적용할 수 있습니다. 그러나 구성 관리 방식은 서로 다릅니다. Terraform은 선언적 프로그래밍 방식을 사용하는데, 이는 원하는 상태를 정의하여 IT 인프라의 구성을 보존하는 방식입니다. Ansible은 절차적(또는 명령적) 프로그래밍 방식을 사용하는데, 이는 원하는 상태에 도달하는 단계를 정의하여 IT 인프라의 구성을 보존하는 방식입니다. 각 프로세스는 아래에 자세히 설명되어 있습니다.
Infrastructure as Code(IaC) 방식은 수동 프로세스 대신 자동으로 실행되는 코드를 통해 인프라를 정의하고 프로비저닝합니다. IT 인프라를 코드로 처리함으로써 조직은 관리 작업을 자동화하고, 소프트웨어 개발 모범 사례를 활용하며, 인적 오류를 줄일 수 있습니다.
Ansible과 Terraform은 모두 IaC 도구이지만, 앞서 언급했듯이 각 솔루션에서 사용하는 프로그래밍 방식은 다릅니다.
선언형 프로그래밍(Declarative programming)은 프로그램의 실행 방법을 자세히 설명하는 대신, 원하는 결과를 설명하는 코드를 작성하는 방식입니다. 목표에 도달하는 데 필요한 구체적인 명령이나 단계 대신 최종 상태에 초점을 맞춥니다.
Terraform은 Hashicorp 구성 언어(HCL)를 자동화 언어로 사용하고 선언적 프로그래밍 방식을 사용합니다. 즉, Terraform이 필요한 구성 변경을 수행하기 위해 수행해야 하는 명령 시퀀스는 최종 사용자에게 표시되지 않거나 알 수 없습니다.
절차적(Procedural) 또는 명령형(Imperative) 프로그래밍은 컴퓨터에 작업 완료를 위한 단계별 지침 목록(단계별 가이드)을 제공하는 코드를 작성하는 방법입니다. 최종 상태가 아닌 프로세스 자체에 초점을 맞춥니다. Ansible은 자동화 언어로 사람이 읽을 수 있는 데이터 직렬화 언어인 YAML을 사용합니다 . YAML 구문은 절차적 방식으로 해석되고 실행됩니다. 즉, 자동화 워크플로는 작성된 순서대로 실행됩니다.
Ansible은 선언적이거나 절차적일 수 있습니다. 많은 모듈이 선언적으로 작동하는 반면, 다른 모듈은 절차적 프로그래밍 방식을 선호합니다. 또한, 조건문이나 반복문과 같은 Ansible 언어의 일부 구문을 사용하면 사용자가 절차적 논리를 정의할 수 있습니다. 이러한 조합은 하나의 패러다임에 얽매이지 않고 필요한 작업에 집중할 수 있는 유연성을 제공합니다.
구성 불변성(Configuration immutability)은 인프라 또는 애플리케이션의 구성을 변경할 수 없음을 의미합니다. 예를 들어, 새 버전의 앱을 프로비저닝하려면 이전 버전을 수정하고 업데이트하는 대신, 삭제하고 교체해야 합니다. 리소스는 자동으로 삭제되고 재생성됩니다.
Terraform은 불변 인프라 접근 방식을 사용하므로 사용자가 리소스를 쉽게 구축하고 테스트한 후 해체할 수 있어 빠르게 시작할 수 있습니다. 하지만 인프라 규모에 따라 복잡해지고 관리가 어려워질 수 있습니다. Ansible은 구성 변경 가능성을 가정하여 설계되었지만, 일부 자동화 워크플로는 불변성 접근 방식을 채택하도록 설계될 수 있습니다.
구성 변경성(Configuration mutability)은 인프라 또는 애플리케이션의 구성을 변경할 수 있음을 의미합니다. 예를 들어, 기존 리소스를 제거하거나 교체하는 대신 업데이트하거나 수정하여 최신 버전의 애플리케이션을 프로비저닝할 수 있습니다.
Ansible은 구성 변경 가능성을 가정하여 설계되었습니다. 이 접근 방식의 장점은 자동화 워크플로를 이해하기 쉽고 문제 해결이 쉽다는 것입니다. 그러나 특정 상황에서는 작업 순서를 제대로 알지 못하면 리소스 프로비저닝을 해제하는 것이 어려울 수 있습니다.
구성 드리프트(Configuration drift)는 시간이 지남에 따라 수동, 승인되지 않은 또는 모니터링되지 않은 변경으로 인해 인프라가 변경되고 이러한 변경 사항이 체계적으로 기록되거나 추적되지 않을 때 발생합니다. 이러한 변경은 종종 비상 상황이나 과도한 복잡성으로 인해 발생하며, 이러한 요인은 직원들이 기존 프로세스를 따르지 못하게 할 수 있습니다. 결과적으로 구성 드리프트는 대규모 조직에서 빈번하게 발생합니다.
IaC 방식은 드리프트 문제에 도움이 되지만, 추가적인 드리프트 관리가 필수적입니다. Ansible은 드리프트 감지를 위해 설정할 수 있는 Ansible Playbook(자동화 워크플로)을 통해 드리프트 문제를 해결하는 데 도움을 줍니다. 드리프트가 감지되면 적절한 담당자에게 알림을 전송하여 필요한 수정 작업을 수행하고 시스템을 기준선으로 되돌립니다.
Ansible은 절차적 프로그래밍 방식을 사용하므로 개발자는 자동화 구성이 언제 어디에서 변경되는지 더 쉽게 파악할 수 있으며, 이를 통해 구성의 특정 부분을 더 빠르게 분리하고 편차를 수정할 수 있습니다. IT 인프라의 복잡성에 따라 Terraform과 같은 선언적 프로그래밍 방식을 사용하는 자동화 솔루션에서 구성 변경을 수행하는 것이 훨씬 더 어려울 수 있습니다. 따라서 IT 조직은 Terraform과 같은 솔루션으로 전체 IT 시스템을 전체적으로 재구성하는 것보다 Ansible을 사용하여 간단한 구성 변경을 수행하는 것을 선호하는 경우가 있습니다.
어떤 자동화 솔루션이 더 나은가요?
더 나은 질문은 “특정 사용 사례에 비즈니스에 필요한 것은 무엇인가?”일 수 있습니다. 구체적인 비즈니스 과제와 요구 사항을 평가하고 가장 효과적인 솔루션(들)을 선택해야 합니다. 어떤 문제는 특정 접근 방식에 더 적합하고, 어떤 문제는 다른 접근 방식으로 더 잘 해결할 수 있습니다. 그리고 때로는 여러 솔루션을 조합하는 것이 성공의 열쇠가 될 수 있습니다.
Expert perspective: Ansible vs. Terraform Demystified
Terraform과 Ansible Automation Platform은 모두 인기 있는 자동화 솔루션이자 선호하는 DevOps 도구 이지만, 두 솔루션의 기능은 매우 다릅니다. Terraform은 IT 자동화 분야의 다양한 사용 사례 중 하나인 퍼블릭 클라우드 인프라 프로비저닝에 특화되어 있으며, Ansible Automation Platform은 광범위한 자동화 사용 사례를 지원합니다. Ansible Automation Platform은 자동화에 대한 단일 접근 방식이 아닌, 다양한 문제를 해결할 수 있는 다양한 접근 방식을 제공합니다. 고객이 두 가지 자동화 솔루션을 함께 사용해야만 해결할 수 있는 특정 문제에 직면할 경우, Ansible Automation Platform은 Amazon Web Services(AWS) CloudFormation, Microsoft Azure Resource Manager, Google Cloud Platform(GCP) Cloud Deployment Manager를 비롯한 주요 클라우드 공급업체의 다른 제품뿐 아니라 Helm 및 Terraform과도 통합할 수 있습니다.
많은 고객이 여러 자동화 솔루션을 동시에 사용합니다. 예를 들어, 클라우드에 애플리케이션을 배포할 때 CloudFormation이나 Terraform을 사용하여 클라우드 인프라 프로비저닝을 시작한 다음 Ansible Automation Platform을 사용하여 애플리케이션 및 프로세스의 지속적인 구성을 수행하는 경우가 많습니다. 이러한 프로세스의 효율성을 높이기 위해 최근 Terraform용 Red Hat Ansible Certified Content Collection을 출시했습니다. Red Hat에서 지원하는 이 컬렉션은 Ansible Automation Platform 실행 환경에서 Terraform을 사용하여 IaC의 관리 및 프로비저닝을 자동화합니다.
Get the community development version from Ansible Galaxy
일부 고객은 클라우드 배포 사용 사례 그 이상의 자동화를 원하기 때문에 Ansible Automation Platform에만 투자합니다. 예를 들어, 위협 조사나 사고 대응과 같은 보안 프로세스 와 라우터 및 스위치 재구성과 같은 네트워크 프로세스까지 자동화하고자 할 수 있습니다.
이러한 고객은 투자 수익을 극대화하기 위해 모든 사용 사례에서 자동화에 대한 접근 방식을 표준화하고자 합니다.
Terraform과 Ansible Automation Platform이 어떻게 연동되어 애플리케이션 배포를 자동화하고, 인프라를 최적화하고, 지속적인 업데이트와 문제 해결을 보장하는지 확인해 보세요. 영상 길이: 2분 45초
이 대화형 랩에서 Ansible과 Terraform이 어떻게 함께 작동하는지 확인하세요.
Terraform 대 Ansible: 정말 경쟁일까요?
다양한 엔터프라이즈 자동화 솔루션이 출시됨에 따라, 기능과 역량, 그리고 무엇보다 조직의 특정 요구 사항에 가장 적합한 솔루션을 파악하는 것이 매우 중요합니다.
오픈 소스를 기반으로 하는 Red Hat Ansible Automation Platform은 기업에 대한 전체 라이프사이클 지원을 제공하는 검증되고 검증된 구독형 제품입니다. Ansible은 수천 명의 글로벌 기여자들의 경험과 인텔리전스를 활용하는 커뮤니티 Ansible을 기반으로 구축되었습니다. Ansible Automation Platform은 기업이 자동화 워크로드를 생성, 관리 및 확장할 수 있도록 설계되었습니다. 하이브리드 클라우드, 엣지 로케이션, 네트워크, 보안, 인프라 및 기타 다양한 사용 사례를 위한 자동화를 포함하여 엔드 투 엔드 자동화 솔루션을 구축할 수 있는 유연하고 안정적이며 보안에 중점을 둔 기반 을 제공 합니다 .
자동화를 위해 Red Hat을 선택하는 이유는 무엇입니까?
Terraform은 IaC(Infrastructure-Account Control) 방식을 적용한 클라우드 인프라 프로비저닝 및 프로비저닝 해제 도구로서 탁월한 성능을 발휘합니다. 특정 목적을 가진 특정 도구입니다. Ansible은 다목적 크로스 도메인 자동화 솔루션을 제공합니다. 두 솔루션 모두 활발한 오픈 소스 커뮤니티와 잘 지원되는 다운스트림 상용 제품을 보유하고 있습니다. 두 솔루션 모두 각각의 강점을 가지고 있으며, 함께 사용하면 효과적으로 연동되어 많은 기업에 효율성을 제공합니다. 간단히 말해, 자동화 솔루션을 선택할 때 항상 “둘 중 하나만 선택”하는 것은 아닙니다. 종종 “둘 중 하나만 선택”해야 하는 경우도 있습니다.