Terraform은 IaC(Infrastucture as Code)를 위한 인프라 관리 도구입니다.
현재 Terraform은 Plumi, ARM 등 많은 IaC 관련 도구들을 제치고 가장 많은 사용자와 Reference를 가지고 있으며, 따라서 가장 대중화된 도구가 되었습니다.
이제는 단순히 Terraform을 Local에서 사용하는 것을 넘어서, 다수의 이용자와 협업하기 위해 GItOps 방식의 Workflow를 도입하는 경우도 많아지고 있는데요.
이는 Github, Gitlab 등의 Git 제품들이 제공하는 CI 도구와 Terraform을 결합해서 코드 커밋에서 시작해 인프라 배포까지 이어지는 하나의 단일한 Workflow를 이용하는 것을 말합니다.
이 같은 방식을 사용하면 Git 코드를 기반으로 단일한 소스(Single Source of Truth)를 관리해 일관성을 유지할 수 있으며, 인프라 관리 프로세스와 코드 관리 프로세스를 하나로 통합할 수 있다는 장점이 존재합니다.
그래서 위에서 말한 Terraform을 GItOps방식으로 사용하기 수월하게 해주는 각종 도구들도 시중에 많이 등장하고 있습니다.
이번 포스팅에서는 Terraform을 GitOps 방식으로 관리할 수 있는 각종 도구들을 비교해보고, 어떤 장,단점 및 특징이 존재하는지 알아보도록 하겠습니다.
1. TACOS?
서문에서 언급한 Terraform을 GitOps 방식으로 사용하게끔 보조해주는 도구들을 일컫는 단어가 존재합니다.
이른바 TACOS라고 하는, Terraform Automation and COlaboration Sofrware의 약어가 이를 일컫는 단어입니다.
단어의 풀네임이 말해주듯이, TACOS는 Terraform의 자동화와 협력을 구현하기 위한 소프트웨어를 총칭하는 단어입니다.
TACOS를 사용해 얻을 수 있는 이점들은 다음과 같습니다.
- Collaboration : Git 도구와의 통합으로 Code review, Branch, Pull Request 등의 코드 관리 방법론을 그대로 Terraform 코드 관리에 적용할 수 있습니다. 이로써 다수의 사용자 간 인프라 코드를 공유하고 사용해 협업하기 수월해집니다.
- Security : TACOS는 Colaboration, 즉 협업을 바탕으로 하는 도구이기 때문에 RBAC, Audit, Governance 등의 보안 기능들을 탑재하고 있습니다. 이를 통해 다수의 사용자가 이용함으로써 발생할 수 있는 보안 위험을 예방하거나 조치할 수 있습니다.
- Remote mode : TACOS는 Terraform 실행을 각 사용자의 Local 환경에서 실행할 필요가 없도록 Remote 환경을 제공합니다. 이 Remote 환경은 Terraform 작업을 수행하기 위한 CI 도구를 따로 사용하거나, 혹은 Terraform Binary가 설치된 Backend 자체가 될 수도 있습니다.
이번 포스팅을 통해 현재 어떤 TACOS 도구들이 존재하는지 알아보고, 각 도구들의 특징을 비교해보도록 하겠습니다.
2. TACOS 도구 비교
TACOS를 사용해 얻을 수 있는 위의 이점들을 더욱 극대화하거나, 다른 기능들을 추가한 다양한 도구들이 존재합니다.
가장 대표적인 제품으로는 Terraform의 제작사인 Hashicorp사에서 개발한 Terraform Cloud가 있습니다.
현재는 TACOS가 대중화된 만큼 다양한 제품들이 등장했는데요. 아래 비교 테이블을 통해 각 도구들이 제공하는 기능들을 확인할 수 있습니다.
Atlantis | Digger | Cloudify | Env0 | TerraKube | Scalr | SpaceLift | |
OpenSource | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ |
Github Integration | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
Policy as Code | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
Container Image | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ |
Hosting | Self-Host | Self-Host | SaaS | Saas | Self-Host (Kubernetes) |
SaaS | SaaS |
RBAC | ❌ (Github only) |
✅ | ✅ | ✅ | ❌ | ✅ | ✅ |
위와 같이 현재 많은 TACOS 도구들이 존재하고, 다양한 기능들을 가지고 있습니다.
하지만 이번 포스팅에서는 위의 도구들 중 Atlantis와 Digger를 집중적으로 비교해보고자 합니다.
많은 도구들 중 Atlantis와 Digger를 선택하기까지 적용된 기준들은 아래와 같습니다.
- Open Source 여부
제품이 Open Source라는 것은 문제를 파악하기 위해 코드를 확인할 수 있다는 것이고, 이는 Debugging을 위해 제품팀에 의존해야 하는 Closed Source에 비해 가지는 가장 큰 장점입니다.
더욱이 Open Source 제품은 대부분 무료로 제공되어 비용 면에서도 우위를 가지기 때문에 Open Source인 제품들을 선택했습니다.
이 기준을 통과한 제품은 Altantis, Digger, TerraKube입니다. - 충분한 Refernce 보유 여부
어떤 도구를 도입하기 위해서는 그 도구의 기능만큼이나 중요한 것이 충분한 Reference입니다. Refernce가 충분하다는 것은 그만큼 입증된 제품이라는 것이고, 그 제품을 사용하기 위한 Hands-on 및 TroubleShooting이 용이하다는 뜻이기도 합니다. 이 때문에 해당 제품이 충분히 많은 Reference를 보유했는지를 기준으로 삼았습니다.
이 기준에서 비교적 최근에 출시되어 사례가 부족한 TerraKube가 제외되었습니다. - Self-Hosting 가능 여부
Self-Hosting이 가능하다는 것은 사용자가 직접 구성한 환경에 제품을 구축할 수 있다는 뜻입니다. 이와 반대되는 개념인 SaaS(Software As A Service)는 클라우드 등의 외부 환경에 구성된 제품을 사용해야 함을 뜻합니다. Self-host로 제공되는 제품을 사용하면 환경을 직접 구축하고 Optimizing해야 하는 점이 불편하지만, 그만큼 나에게 최적화된 환경에서 제품을 사용할 수 있다는 장점이 존재합니다. 이 같은 장점을 이용하기 위해 Self-Hosting 가능 여부를 기준으로 삼았습니다.
이 기준은 남은 두 제품인 Atlantis와 Digger가 모두 통과했습니다.
위의 세 기준을 모두 통과한 제품인 Atltantis와 Digger를 비교해보고, 각 제품이 제공하는 기능을 알아보도록 하겠습니다.
3. Atlantis와 Digger 비교
위에서 언급한 기준들을 통과한 제품은 Atlantis와 Digger입니다.
두 제품 모두 OpenSource로 제공되어 무료로 사용할 수 있으며 코드가 공개되어 있고, 충분한 Reference가 존재해 사용하기 용이하며, Self-hosting이 가능해 직접 구성한 환경에서 구축이 가능합니다.
이제 두 제품을 비교해보고 각 제품이 제공하는 기능들을 알아보겠습니다.
3-1. 두 제품의 공통점
두 제품이 공유하는 공통 기능과 특징은 다음과 같습니다.
- Pull-Request 기반의 TACOS : 두 제품 모두 Git 도구의 Pull-Reuqest를 생성하는 것으로 Terraform 작업이 트리거되는 Workflow를 수행할 수 있습니다.
- Container Image 제공 : 두 제품 모두 Container Image를 공식적으로 제공해 컨테이너 플랫폼에서 Hosting할 수 있다는 공통점이 존재합니다.
- Comment 기반의 Action : 두 제품 모두 GIt 도구의 Comment를 기반으로 Terraform Plan, Apply, Unlock 등의 작업을 트리거할 수 있다는 공통점이 존재합니다.
- Dashboard 제공 : 두 제품 모두 Terraform 작업 내역, Lock 내역 등의 정보를 확인할 수 있는 Web UI인 Dashboard를 제공하고 있습니다.
위의 공통점을 종합해보면 Atlantis와 Digger 모두 Web UI 기반의 Dashboard를 제공하고, Git 기반의 Workflow에 최적화되어 있으며, Kubernetes 등의 컨테이너 플랫폼에 Hosting해 사용할 수 있는 도구라는 특징을 공유한다고 볼 수 있습니다.
3-2. Atlantis의 특징
Atlantis는 2017년에 출시되어 TACOS 도구 중 이른 시기에 나온 제품입니다.
덕분에 가장 많은 Reference와 가이드가 존재하며, 커뮤니티도 가장 활성화되어 있어 사용성이 좋습니다.
Key Features
Atlantis가 Digger와 비교해 제공하는 차별점은 다음과 같습니다.
- Kubernetes 배포를 위한 Helm Chart 제공 : Atlantis는 Kubernetes 배포를 위한 Helm Chart를 공식적으로 제공하고 있습니다. 따라서 Kubernetes에서 Atlantis를 Hosting하기 수월하다는 특징이 있습니다. 이는 기존에 Kubernetes 환경을 운영하고 있는 사용자에게 큰 장점으로 작용합니다.
- 외부 DB 의존성 부재 : Atlantis는 상태를 저장하기 위한 별도의 외부 DB를 필요로 하지 않습니다. 이는 Atlantis가 BoltDB를 내장하고 있어 이를 통해 상태를 저장할 수 있기 때문입니다. 별도의 Redis를 통해 외부 DB를 사용할 수도 있지만, 별도의 DB를 관리하는 것이 부담스러운 사용자에게 내장 DB를 사용하는 Atlantis는 편리함을 제공합니다.
- Backend에서 Terraform 작업 실행 : Atlantis는 Digger와 다르게 자체 Backend에서 Terraform Binary를 실행해 작업을 수행합니다. 이는 작업을 수행하는데 별도의 CI 도구를 필요로 하지 않는다는 것이며, 이는 Backend와 CI를 통합할 수 있다는 장점이 있지만 기존의 CI 도구를 유지하고자 하는 사용자에게는 단점으로 작용할 수도 있습니다.
Workflow
위의 특징을 가지고 있는 Atlantis의 작업 수행을 위한 Workflow는 아래와 같습니다.
아래 Workflow는 Git 도구로 Github, 호스팅 플랫폼으로 Kubernetes를 사용함을 전제로 합니다.
- Terraform 작업을 수행하고자 하는 사용자는 Git Source Code에 변경분을 반영한 Pull Request를 생성합니다.
- Pull Request 생성으로 트리거된 Webhook이 Atlantis Backend에 전달됩니다.
- Webhook을 전달받은 Atlantis는 Backend에서 Terraform Plan 작업을 수행합니다.
- Terraform Plan을 통해 출력된 내용을 Git 도구의 Comment에 추가합니다.
- 사용자는 Plan 내역을 확인하고 배포를 결정하면, Comment에 "atlantis apply"를 입력합니다.
- Comment 생성으로 트리거된 Webhook이 다시 Atlantis Backend에 전달됩니다.
- Webhook을 전달받은 Atlantis는 Backend에서 Terraform Apply 작업을 수행합니다.
- Terraform에 의해 실제 인프라 리소스들의 변경분이 반영됩니다.
Atlantis는 Pull Request의 생성으로 Workflow를 시작하며, "atlantis plan", "atlantis apply" 등의 Comment를 기반으로 작업을 수행합니다.
수행하는 작업은 Atlantis Backend에서 직접 실행됩니다.
Plan Result
Atlantis가 Terraform Plan 작업을 수행한 후 Comment로 생성하는 Plan 내역은 다음과 같습니다.
출력되는 내용에는 프로젝트로 대표되는 작업이 수행된 디렉토리, Terraform plan으로 출력되는 리소스 변경 내역과 함께 다음 Workflow를 위한 명령어가 존재하는 것을 확인할 수 있습니다.
Apply Result
Atlantis가 Terraform Apply 작업을 수행한 후 Comment로 생성하는 Apply 내역은 다음과 같습니다.
Comment에 "atlantis apply"를 입력하면 출력되는 내역입니다.
작업이 수행된 디렉토리별 Terraform apply 결과 내역을 확인할 수 있습니다.
Dashboard
Atlantis에서 제공하는 Dashboard는 다음과 같습니다.
Atlantis의 Dashboard에서는 Terraform Apply 작업을 비활성화할 수 있는 버튼과 작업 간 일관성을 위한 LOCK을 확인할 수 있는 리스트, 그리고 작업이 수행된 기록을 확인할 수 있습니다.
3-3. Digger의 특징
https://github.com/diggerhq/digger
Digger는 기존 CI를 활용할 수 있는 TACOS를 특징으로 하는 비교적 최근에 출시된 도구입니다.
최신 도구이기 떄문에 Reference는 비교적 적지만 빠르게 성장하고 있어 앞으로 추가될 기능들이 기대되는 도구입니다.
Key Features
Digger가 Atlantis와 비교해 제공하는 차별점은 다음과 같습니다.
- Backend와 CI의 분리 : Digger는 Terraform 작업을 수행하는 CI 도구와 작업을 조율하고 Trigger하는 Orchestrator로 이루어져 있습니다. 이러한 CI와 Backend를 분리한 구조는 기존의 CI 도구를 그대로 이용할 수 있어 이로 인한 이점을 활용할 수 있습니다.
- OPA를 통한 RBAC 구현 : Digger는 OPA(Open Policy Agent)를 통한 RBAC을 지원해 User별로 다른 권한을 부여할 수 있습니다. 이는 TACOS를 사용하는 User들의 관리를 용이하게 해주며 보안성을 높이는데 도움을 줍니다.
- Apply-on-merge 지원 : Atlantis를 포함한 많은 TACOS 도구들이 merge-apply dilemma를 회피하기 위해 Terraform apply 후 PR을 Merge하는 Workflow만을 지원하고 있습니다. 이같은 방식은 Apply 실패 시에도 간결한 작업만으로 작업을 수행할 수 있지만, PR간의 Confilct가 발생할 수 있다는 위험이 존재합니다. Digger는 기존의 방식과 Apply-on-merge 방식을 모두 지원해 User에게 선택권을 부여하고 있습니다.
Workflow
위의 특징을 가지고 있는 Digger의 작업 수행을 위한 Workflow는 아래와 같습니다.
아래 Workflow도 마찬가지로 Git 도구로 Github, 호스팅 플랫폼으로 Kubernetes를 사용함을 전제로 합니다.
- Terraform 작업을 수행하고자 하는 사용자는 Git Source Code에 변경분을 반영한 Pull Request를 생성합니다.
- Pull Request 생성으로 트리거된 Webhook이 Digger Backend에 전달됩니다.
- Webhook을 전달받은 Digger는 CI 도구(Github action)에 명령을 내려 Terraform Plan 작업을 수행하게 합니다.
- Terraform Plan을 통해 출력된 내용을 Git 도구의 Comment에 추가합니다.
- 사용자는 Plan 내역을 확인하고 배포를 결정하면, Comment에 "Digger apply"를 입력하거나 브랜치를 Merge합니다.
- Comment 생성 혹은 Merge 작업으로 트리거된 Webhook이 다시 Digger Backend에 전달됩니다.
- Webhook을 전달받은 Digger는 CI 도구에 명령을 내려 Terraform Apply 작업을 수행하게 합니다.
- Terraform에 의해 실제 인프라 리소스들의 변경분이 반영됩니다.
위와 같이 Digger는 Terraform 작업을 직접 수행하지 않고 CI 도구에게 이를 명령하는 역할만을 수행하며, 이와 같은 특징으로 DIgger를 Terraform Orchestrator라고 지칭하기도 합니다.
추가적으로 Digger는 Apply-on-merge 작업을 지원하기 때문에 PR을 Merge하는 것으로 Terraform apply 작업을 수행할 수 있습니다.
Plan Result
Digger가 Terraform Plan 작업을 수행한 후 Comment로 생성하는 Plan 내역은 다음과 같습니다.
출력되는 내용에는 프로젝트로 대표되는 작업이 수행된 디렉토리, Terraform plan으로 출력되는 리소스 변경 내역이 존재하는 것을 확인할 수 있습니다.
Apply Result
Digger가 Terraform Apply 작업을 수행한 후 Comment로 생성하는 Apply 내역은 다음과 같습니다.
Comment에 "digger apply"를 입력하거나 PR을 merge하면 출력되는 내역입니다.
작업이 수행된 디렉토리별 Terraform apply 결과 내역을 확인할 수 있습니다.
Dashboard
Digger에서 제공하는 Dashboard는 다음과 같습니다.
Digger의 Dashboard에서는 등록된 Repository와 관리 중인 User, 그리고 작업이 수행된 기록을 확인할 수 있습니다.
3-4. Digger vs Atlantis
위의 내용들을 바탕으로 Digger와 Atlantis를 비교한 테이블은 아래와 같습니다.
Atlantis | Digger | 비고 | |
Security | ➖ | ✅ | OIDC, OPA 등의 기능들을 지원하는 Digger 우세 |
Community | ✅ | ➖ | User와 Reference 규모에서 Atlantis 우세 |
Management | ✅ | ✅ | Atltantis는 별도의 DB가 필요없으며, Digger는 기존 CI도구를 이용할 수 있다는 점에서 비등 |
Performance | ✅ | ➖ | Backend에서 모든 Workflow를 처리하는 Atltantis가 작업 속도 면에서 우세 |
Cost | ➖ | ✅ | 기존 CI를 유지할 수 있어 추가적인 Computing이 필요하지 않은 Digger가 비용 면에서 더 저렴 |
위 테이블의 내용을 정리하면, Atlantis는 Community 규모와 성능 면에서 Digger보다 우수하지만, 보안성과 비용 면에서는 Digger가 Atltantis보다 우수한 것을 확인할 수 있습니다.
관리성 면에서는 User가 처한 상황과 Requirement에 따라 달라질 여지가 있으므로 비등하다고 볼 수 있습니다.
위의 Comparison table과 TACOS 도입에 필요한 Requirements들을 참고하여 Digger와 Atlantis를 판단하면 될 것 같습니다.
4. 마무리
이번 포스팅에서는 TACOS(Terraform Automation and COlaboration Software)가 무엇인지, 그리고 TACOS 도구들을 비교하며 어떤 특징과 장단점이 존재하는지 알아봤습니다
TACOS는 Terraform 자동화 및 협력을 위한 소프트웨어로, 다양한 도구들이 존재하지만 Atlantis와 Digger를 집중적으로 비교했습니다.
Atlantis는 2017년에 출시된 TACOS 도구로, 가장 많은 Reference와 활성화된 커뮤니티를 가지고 있으며, Kubernetes 배포를 위한 Helm Chart를 제공한다는 특징을 가지고 있습니다.
반면, Digger는 기존 CI를 활용할 수 있는 TACOS 도구로, 보안성과 비용 면에서 우수하며, Apply-on-merge 작업을 지원한다는 특징을 가지고 있습니다.
두 도구 간의 Comparison table을 통해 Atlantis와 Digger의 장단점을 확인할 수 있습니다.
이번 포스팅이 TACOS를 사용하고자 하는 User들에게 도움이 되기를 바랍니다.
'Devops' 카테고리의 다른 글
Kubernetes 환경에서 gRPC 어플리케이션 통신 이슈 해결하기 (0) | 2024.07.11 |
---|---|
Kubernetes 환경에서 발생하는 DNS Query Failed 이슈와 NodeLocal DNSCache를 이용한 해결 (5) | 2023.12.30 |
EKS Kubernetes의 롤링 업데이트 시 일시적인 500 에러의 원인과 해결 (1) | 2023.11.30 |
Kubecost로 Kubernetes 환경의 FinOps를 구현해보자 (0) | 2023.11.29 |
Clean Code를 구현하기 위해 Sonarqube로 정적 코드 분석을 해보자 (2) | 2023.10.28 |