Terraform vs Ansible, Ansible vs Terrafom- 구글에서 자주 검색되는 질문들입니다. 그러나 이게 맞는 말일까요? Terraform과 ansible이 경쟁 관계에 있고 우리는 둘 중 하나만 사용할 수 있을까요? 아니면 사실 둘은 훌륭한 조합이고 함께 사용하거나 함께 사용해야 합니까? 이 기사는 Terraform vs Ansible에 대한 해답을 얻는 것을 목표로 합니다.

 

이 기사는 개발자의 주관적인 의견을 기반으로 합니다.

 

Terraform

Terraform 웹사이트에 따르면

 

Terraform은 infrastructure의 building, changing, and versioning을 안전하고 효과적으로 할 수 있는 툴입니다. Terraform은 기존의 인기있는 서비스 제공 업체와 맞춤형 사내 솔루션을 관리 할 수 있습니다.

 

Terraform은 Slack, Twitch(독자적인 인프라 관리 툴 Cloud Formation을 가진 아마존의 소유), Uber, Startbucks같은 회사에서 사용중 입니다. Terraform은 CloudFare, Heroku, Microsoft Azure 이나 Google Compute 엔진과 통합될 수 있습니다.

 

Ansible

Ansible은 IT infrastructure와 app을 자동화하고 구성하는 가장 간단한 방법입니다. Ansible은 당신이 기업에서 어떤 자동화 플랫폼을 사용하든 상관이 없습니다.(원문 : An enterprise automation platform for the entire IT organization, no matter where you are in your automation journey.)

 

Ansible은 9gag, Zalando 그리고 Revolut같은 회사에서 사용되고 있습니다. Ansible은 Docker, Amazon Ec2 나 쿠버네티스와 같이 사용될 수 있습니다.

 

Who's the best?

우선, 어느 것이 더 좋은지 명확히 결정하기는 어렵습니다. 왜냐하면 둘은 비슷하지만 다른 목적으로 만들어 졌기 때문입니다.

 

Terrform은 orchestration tool이고 Ansible은 configuration management tool이지만 중복되는 몇몇 기능들이 있습니다. 하지만 그런 기능들은 제외되지않고 같이 사용할 수 있습니다.

저는 이 부분을  '음악가들의 오케스트레이션'에 비유해 설명 해보겠습니다. 여기서 terraform은 올바른 수의 악기들이 연주되고 소리가 올바르게 나는지 보장하는 지휘자입니다.

문제가 있을 경우 지휘자는 문제가 있는 악기를 교체합니다. 오케스트레이션 도구는 최종 결과에 중점을 두고 환경이 특정 상태로 유지되도록 할 수 있습니다. 따라서 Terraform은 환경을 정상인 상태로 유지시켜주는데 탁월한 기능을 제공합니다.

 

Ansible은 상황에 따라 다르게 동작하는 configuration management tool입니다. Ansible은 아까와 같은 상황(악기가 고장난)에서 악기를 교체하는 작업 대신 악기를 수리하기 위해 동작합니다. 물론 Ansible이 orchestration 작업을 수행할 수는 있지만 Terraform이 orchestration을 위해 더 advanced 하고 더 나은 옵션을 제공합니다.

 

Terraform에는 스레드에서 리소스 세트(종속 트리 내부)를 만들 수 있는 parallel mechanisms이 있습니다. Ansible에서 동일한 결과를 얻으려면 async와 poll을 창의적으로 사용해야 하므로 대기 시간이 있는 async blocks를 사용해야 할 것입니다.

(원문 : Terraform has built-in parallel mechanisms which allow creating a set of resources (within dependency tree) in threads. To achieve the same, Ansible would require to creatively use async and poll, which would probably make you do async blocks with a wait period between them.)

 

----Asynchronous(비동기식) : system call이 완료되지 않아도 나중에 완료가 되면 그때 결과물을 가져온다.(주로 callback 함수를 통해 결과물을 가져온다)

 

절차적(Procedural) 아니면 선언적(Declarative)?

DevOps 도구로의 또 다른 관점의 분류로는 절차적(procedural)과 선언적(Declarative)로 볼 수 있습니다. 이러한 분류는 tool이 어떻게 동작하는지 설명합니다. 여기서 Terraform은 선언적 그룹에 속합니다. 이 부분이 의미하는 것은 만약 현재 정의된 환경이 변경되었다면 그것은 Terraform에 의해서 수정된 것입니다.

 

오케스트라의 비유로 돌아가서 설명하자면 Terraform은 더 많거나 적은 악기를 선언해야합니다. 따라서 만약 당신에게 5개의 악기가 있고 5개의 악기가 더 필요하다면 코드에 그것을 배치하면 됩니다. 더 적게 필요한 경우 코드에서 당신이 원하는 만큼 삭제하면 됩니다.

 

반면 Ansible은 하이브리드로 인식됩니다. Ansible은 절차적 스타일 구성이나 선언적으로 수행하는 모듈을 사용하여 두가지 스타일 모두 수행할 수 있습니다. 그래서 문서를 읽고 예상되는 동작을 이해하는 것이 매우 중요합니다.

 

즉, Terraform은 클라우드 인프라 구성에 적합하고 Ansible은 인프라 내의 서버 구성에 사용됩니다. Terraform에는 Ansible용 provisioning plugin이 없지만 많은 사람들이 Terraform으로 서버를 만들고 Ansible로 서버를 구성합니다. Terraform내에서 필요한 Ansible role들을 호출할 수도 있습니다.

 

그러나 stackshare.io의 통계를 살펴보면 Ansible은 stackoverflow의 12k이상의 점수를 기록하고 github의 41k의 star를 가진 Terraform보다 훨씬 인기가 많습니다.

 

결론

Terraform은 불변성(immutability)를 염두에 두고 설계 되었습니다. 변하지 않는 infrastructure를 기본적인 방식으로 처리하는 provisioning tool입니다. 따라서 configuration management tool들을 거부할 때 가장 좋은 선택으로 볼 수 있습니다. Terraform은 더 직관적인 infrastructure orchestration을 위해 만들어 졌으며 Terraform의 모든 업데이트는 이 직관적인 infra를 위해 전념중이기 때문입니다.

Ansible은 configuration management에 최적화 되어 있습니다. Ansible이 orchestration을 수행할 수는 있지만 주어진 환경에 가장 적합한(가장 빠른) tool을 사용하는 것이 좋습니다.

 

Terraform과 Ansible은 모두 독립적인 도구로 작용하거나 함께 작동 될수 있지만 주어진 작업에 항상 올바른 도구를 사용해야 하는 것을 기억해야합니다.

 

기사 원문:

https://selleo.com/blog/terraform-vs-ansible?fbclid=IwAR0Ip2mrSo4NUME1c2004mpPqvxvHwRS5749FYVmbY4sLZ_760MahQQ7038

'Ansible' 카테고리의 다른 글

AWS에서 ansible을 사용하여 ec2 추가하기  (0) 2020.01.11