CloudFormation vs Terraform
클라우드 인프라 구성을 최대한 자동화 하는 것이 플랫폼 관리 측면에서 매우 중요하다.
인프라 관리를 위해 코드(Code)를 사용하는 것이 필요하게 되었고, 여러개의 IAC ( Infrastructure As Code ) Tools 들을 검토하게 되었다.
여러 Tools 중에 CloudFormation 과 Terraform 이 가장 , 이를 비교 하였다.
Terraform | CloudFormation | |
---|---|---|
AWS 지원 | 거의 모든 서비스 가능 | 거의 모든 서비스 가능 |
멀티 클라우드 | YES | NO |
커뮤니티 활성화 | YES | NO |
프로그래밍 코드 길이 | SHORT | LONG |
모듈화 | SIMPLER | Nested stacks |
GUI 제공 | NO | YES |
State 관리 프로세스 제공 | NO | YES |
병렬처리 방지 제공 | NO | YES |
에러 핸들링과 롤백 제공 | NO | YES |
지원 및 라이센스 | Free | Free, Enterprise |
고려해볼 다른 도구들 | Pulumi | AWS CDK, Troposphere |
멀티 클라우드 지원
CloudFormation은 AWS 만을 지원합니다.
Terraform은 거의 모든 주요 클라우드 공급자 및 Kubernetes 및 Docker와 가은 다양한 도구를 사용할 수 있습니다.
프로그래밍 코드 길이
CloudFormation에서 인프라는 template 으로 불리는 JSON 또는 YAML 파일로 정의합니다.
복잡한 자원에 대해서는 상당히 길고 혼동 될 수 있습니다.
"if" 및 "and" 구문은 지원되나 "for-loop" 또는 "if-else"구문은 사용할 수 업습니다.
Terraform 은 HCL(Hashicorp Configuration Language)이 있습니다.
Terraform template는 읽기 쉽고 효율적입니다. 보통 동일한 인프라를 CloudFormation 보다 적은 코드로 구성 가능합니다.
관리 프로세스
CloudFormation은 AWS 의 관리형 서비스 입니다.
CloudFormation 콘솔에서 스택의 내용을 쉽게 볼 수 있으며, CloudFormation 업데이트를 통해서만 리소스 변경이 됩니다.
Stack 형태로 배포된 현재 상태를 직접 관리하고, 롤백 기능을 쉽게 사용할 수 있습니다.
Terraform 은 따로 관리 프로세스를 두고 있지 않습니다.
사용자는 관리 프로세스에 필요한 모든 아티팩트를 관리해야 합니다.
인프라의 마지막 업데이트 상태를 상태 파일이라는 JSON 파일에 저장합니다.
이 파일을 관리 할 책임은 사용자에게 있고, 이를 제대로 수행하지 않으면 동일한 인프라에 대한 동시 병렬 업데이트로 진행될 위험이 있습니다.
또한 수동 변경으로 파일이 손상되거나 관련 리소스가 삭제 될 위험이 있습니다.
병렬 처리를 방지하기 위한 리소스 잠금 장치
CloudFormation 은 관리형 aws 서비스로서 스택이 여러번 병렬로 업데이트 되거나 수정 될 위험이 없습니다.
Terraform 은 여러번 병렬로 업데이트가 발생할 수가 있습니다. 이를 방지 하기 위해 사용자가 조치를 취해야 합니다.
Terraform SaaS 또는 Terraform Enterprise는 이를 위해 방법을 제공합니다.
에러 핸들링과 롤백 기능
CloudFormation은 인프라 변경이 실패하면 적용이되지 않으며 마지막 안정 상태를 유지합니다.
필요에 따라 롤백을 할 수도 있습니다.
Terraform은 리소스를 처리하는 동안 오류가 발생하면 오류를 종속 리소스로 분리합니다.
비 의존적 리소스는 평소와 같이 계속 생성, 업데이트 또는 파기 됩니다. 이로 인해 인프라가 사용 불가능하고 불안정한 상태가 될 수 있습니다.
사용자는 전체 인프라를 이전 상태로 재설정하려면 이를 수동 또는 자동화로 직접 수행해야 합니다.
상태가 변경 될 때마다 상태를 백업 하는 것이 필요합니다.
지원 및 라이센스
CloudFormation 은 무료입니다.
Terraform 은 무료 오픈 소스 도구 와 유료 비즈니스 도구로 제공합니다.
Terraform Enterprise 는 통합 IaC 도구이며, git 과 같은 소스 repository 를 포함하고 있으며 각각의 commit 은 plan command를 트리거 합니다.
사용자와 리소스 상태를 관리하는 방법들을 포함하고 있습니다. pro version (SaaS install)과 premium version(private install) 으로 구분하고 있습니다.
고려해볼수 있는 다른 도구들
Pulumi for Terraform 과 AWS CDK for CloudFormation 이 있습니다.
JSON, YAML 또는 HCL 로 인프라를 선언식으로 구성하는 것이 아니라, 일반적인 프로그래밍 언어 및 객체 지향 방법으로 인프라를 구성할 수 있습니다.
참고할만한 링크들
- CloudFormation vs. Terraform
- Why we use Terraform and not chef, puppet, ansible, saltstack, or cloudFormation
- TERRFORM VS CLOUDFORMATION - A PROGRAMTIC COMPARISON
- Battle of AWS cloud automation tools
- AWS CloudFormation vs. Terraform: Which One Should You Choose?
- Tooling aroud with CloudFormation helpers
- AWS CloudFormation vs Terraform
댓글
댓글 쓰기