AWS CloudFormation과 Terraform — 어떤 것을 선택할지 고민 중이신가요? 이 기사가 지능적인 결정을 내리는 데 도움을 줄 것입니다.
클라우드 컴퓨팅은 DevOps 세계에 혁신을 가져왔습니다. 이제는 단순한 유행어가 아니라, 애플리케이션을 개발하고 유지하는 방식을 변화시키기 위해 존재합니다. 모든 규모의 비즈니스에 클라우드 컴퓨팅을 사용해야 하는 수많은 이유가 있지만, 약간의 한계가 있습니다: 인프라를 수동으로 프로비저닝해야 한다는 것입니다.
클라우드 제공업체의 콘솔에 가서 원하는 내용을 정확히 알려줘야 합니다. 이는 소규모 사용 사례에는 잘 작동하지만, 만약 다양한 사람들이 콘솔에서 구성 변경을 하면 어떻게 될까요? 복잡한 인프라가 생길 수 있으며, 이는 유지 관리가 점점 더 어려워질 것입니다. 클라우드 인프라의 변경 사항을 협업하거나 추적할 효율적인 방법이 없습니다. 그런데, ‘코드로서의 인프라’가 있습니다.
코드로서의 인프라 (IaC)는 클라우드 컴퓨팅에서 유행하는 용어입니다. 이는 IT IaC를 관리하는 과정입니다. 맞습니다. 콘솔에 가서 모든 작업을 수동으로 수행하는 대신, IaC를 사용하면 클라우드 인프라를 프로비저닝하기 위한 구성 파일을 작성할 수 있습니다. IaC는 일관성, 쉽고 빠른 유지 관리, 사람의 실수 여지를 없애는 등의 이점을 제공합니다.
Amazon Web Services와 함께 IaC 사용하기
AWS는 세계에서 가장 앞선 클라우드 컴퓨팅 서비스로, 다음 클라우드 제공업체의 두 배에 달하는 시장 점유율을 보유하고 있습니다. 수백 가지 사용 사례를 충족할 수 있는 200개 이상의 서비스를 제공합니다.
AWS와 함께 IaC를 사용하기 시작할 때, 선택지는 종종 AWS CloudFormation과 오픈 소스 도구 Terraform으로 좁혀집니다. 두 가지 중 하나를 선택하려면 두 도구가 제공하는 다양한 기능을 이해하는 것이 압도적일 수 있습니다. 이 기사에서는 AWS CloudFormation과 Terraform의 차이점을 살펴보아 어떤 도구가 귀하의 필요에 더 잘 맞는지 결정을 돕겠습니다.
Terraform vs. AWS CloudFormation: 차이점
모듈성
대규모 조직에서 IaC를 사용할 때, 모듈성은 올바른 도구를 선택하는 데 중요한 요소가 될 수 있습니다.
CloudFormation
CloudFormation은 모듈에 대한 네이티브 지원이 없습니다. 대신, 모듈로서 중첩 스택이라고 하는 것을 사용할 수 있도록 허용합니다.
예를 들어, 조직 내에서 S3 버킷을 프로비저닝하기 위한 표준 CloudFormation 템플릿을 생성할 수 있습니다. 최종 사용자가 S3 버킷을 생성하려는 경우, 이 CloudFormation 템플릿을 중첩 스택으로 사용하여 표준 S3 버킷을 프로비저닝할 수 있습니다.
AWS 서비스인 AWS 서비스 카탈로그도 있습니다. AWS 서비스 카탈로그는 CloudFormation의 모듈화를 지원하며, AWS 서비스의 범위를 제한하여 규정 준수, 보안, 비용 또는 성능 요구 사항을 충족하는 조직을 위해 설계되었습니다. 이는 백엔드에서 CloudFormation 템플릿을 사용합니다.
예를 통해 이를 빠르게 이해해 봅시다. 제대로 사용하지 않으면 S3 버킷은 기밀 데이터에 대해 곧 치명적일 수 있습니다. 동일한 예를 살펴봅시다. 조직 내에서 S3를 사용하는 표준 방법을 갖고 싶다고 가정해 봅시다. 첫 번째 옵션은 중첩 스택 템플릿을 생성하는 것이며, 이는 다른 CloudFormation 스택 내에서 사용할 수 있으며 동일하게 효과적입니다.
또는 AWS 서비스 카탈로그를 사용할 수 있으며, 이를 통해 사용자가 콘솔 UI에서 이 표준 템플릿을 사용하고 약간의 사용자 정의를 지정할 수 있습니다. 이를 통해 인프라가 AWS 계정에서 어떻게 프로비저닝되는지 제어하고 원하지 않는 시나리오를 방지할 수 있습니다.
CloudFormation의 중첩 스택 및 AWS 서비스 카탈로그의 사용은 대규모 조직에서 표준 구성을 지원할 수 있지만, 더 많은 수동 구성이 필요할 수 있습니다.
Terraform
Terraform은 모듈에 대한 네이티브 지원을 제공합니다. 이를 사용하여 AWS CloudFormation과 유사한 표준 구성을 생성하고 다른 Terraform 구성에서 사용할 수 있습니다.
Terraform은 오픈 소스 도구이므로 Terraform Registry에서 미리 만들어진 오픈 소스 모듈을 찾아 사용하실 수 있습니다. 또한, 자신의 구성으로 자체 모듈을 생성하고 이를 개인 모듈 레지스트리에 호스팅할 수 있습니다.
Terraform의 모듈에 대한 기본 지원은 모듈화에 대한 간단한 접근 방식을 제공합니다. 그러나 대규모 팀에서 모듈을 관리하려면 적절한 사용을 보장하기 위해 추가적인 거버넌스가 필요할 수 있습니다.
CloudFormation에서 중첩 스택을 사용하는 것은 Terraform에서 모듈을 사용하는 것만큼 쉽지 않습니다. 주요 요인은 CFN 템플릿에서 중첩 스택으로 데이터를 전달하는 것이 복잡할 수 있다는 점입니다.
CloudFormation은 템플릿을 공유하기 위한 중앙 집중식 리포지토리가 없습니다. AWS Service Catalog는 이 프로세스를 관리할 수 있도록 하지만 주로 콘솔을 통해 규칙을 시행합니다. CloudFormation 템플릿은 복잡한 작업을 캡슐화할 수 있지만, 사용자는 리소스를 생성할 때 여전히 매개변수를 지정해야 합니다.
반면, Terraform은 모듈을 생성, 유지 관리 및 공유하기 위한 정해진 방법이 있습니다. Terraform Module Registry에서 모듈의 정확한 요구 사항을 확인하고 이를 Terraform 파일에서 쉽게 사용할 수 있습니다.
인프라에 대한 제어 및 거버넌스
AWS 계정에서 사람들이 생성할 수 있는 리소스를 제한하고 싶다면, AWS CloudFormation과 Terraform이 이를 위한 수단을 제공합니다.
CloudFormation
CloudFormation은 IAM 정책을 통해 제어를 제공하여 사용자가 리소스에 액세스하는 방법을 관리할 수 있습니다. 그러나 이 제어는 AWS에 특화되어 있어 인프라가 완전히 AWS 중심인 경우 이상적일 수 있습니다.
S3 버킷 예에서는 사용자에게 모든 “S3 생성” 권한을 제한하고 AWS 서비스 카탈로그 또는 중첩 스택에서만 S3 버킷을 생성할 수 있도록 허용하고 싶을 수 있습니다.
Terraform
Terraform을 사용하면 코드 도구 Sentinel로 정책을 통해 사용자가 생성할 수 있는 리소스를 제어할 수 있습니다. Sentinel을 사용하면 미세하게 조정된 논리 기반 정책을 강제할 수 있어 Terraform을 통해 사용자 조치를 허용하거나 거부할 수 있습니다. 예를 들어 S3 버킷을 생성하는 모든 리소스를 거부하고 사용자가 표준 모듈에서만 S3 버킷을 생성하도록 허용할 수 있습니다.
상태 관리
AWS CloudFormation과 Terraform은 유지하는 리소스를 추적해야 합니다.
Terraform
Terraform은 인프라를 저장하는 상태 파일을 사용합니다. 기본적으로 이 파일은 로컬에 저장되지만 S3와 같은 원격 백엔드에 저장할 수 있으며 여러 사용자가 동일한 인프라 집합에 변경을 가할 수 있습니다.
CloudFormation
CloudFormation은 백그라운드에서 상태 유지를 내부적으로 처리하므로 사용자가 상태 파일을 수동으로 관리할 필요가 없습니다. 완전히 관리되는 서비스를 원하는 사람에게 적합합니다.
AWS CloudFormation과 Terraform 모두 인프라에 어떤 변경이 이루어질지를 확인할 수 있습니다. Terraform에서는 “terraform plan” 명령어를 실행하여 Terraform이 구성 변경을 어떻게 적용할 계획인지 볼 수 있습니다. CloudFormation에서는 사용자가 변경 세트를 통해 이 정보를 볼 수 있습니다.
언어
Terraform
Terraform은 HashiCorp에서 만든 HashiCorp 구성 언어(HCL)를 사용합니다. 이는 JSON과 매우 유사하며, 추가적인 내장 기능과 능력이 있습니다.
CloudFormation
CloudFormation 템플릿은 YAML 또는 JSON 형식으로 작성됩니다.
로그 및 롤백
AWS CloudFormation과 Terraform 모두 훌륭한 로깅 기능을 가지고 있습니다. 제 경험상, 오류와 문제는 대부분 직관적이었습니다.
CloudFormation
기본적으로 CloudFormation은 스택 변경이 실패할 경우 모든 변경을 롤백합니다. 이는 좋은 기능이지만, 디버깅 목적으로 비활성화할 수 있습니다.
Terraform
Terraform은 실패할 경우 자동으로 변경을 롤백하지 않습니다. 이는 문제가 되지 않으며, 언제든지 Terraform destroy 명령어를 실행하여 반영Provision된 구성을 삭제하고 Terraform 실행을 다시 시작할 수 있습니다.
범위
Terraform
Terraform의 멀티 클라우드 지원은 AWS, Azure, Google Cloud 및 기타 플랫폼에서 인프라를 배포할 수 있게 하며, 멀티 클라우드 환경에서 작업할 때 유연성을 제공합니다.
CloudFormation
CloudFormation은 AWS와 밀접하게 통합되어 있어 AWS 전용 인프라에 적합하지만 멀티 클라우드 설정에는 제한적입니다.
기능 지원
CloudFormation
AWS CloudFormation은 일반적으로 AWS와의 밀접한 통합 덕분에 새로운 서비스 및 기능에 대한 업데이트를 먼저 받습니다.
Terraform
Terraform이 특정 AWS 기능을 지원하지 않는 경우 CloudFormation 스택을 Terraform 코드에 직접 통합하여 해결책으로 활용할 수 있습니다.
기술 지원
CloudFormation
유료 AWS 기술 지원 계획은 CloudFormation 지원도 포함됩니다.
Terraform
HashiCorp은 Terraform 기술 지원에 대한 유료 요금제도 제공합니다.
결론
AWS CloudFormation과 Terraform은 각각 강력하고 완전히 개발된 도구로, 각각의 장점을 가지고 있습니다. 위의 차이점은 여러분이 필요에 맞는 도구를 결정하는 데 도움이 될 수 있습니다. 여러 클라우드 플랫폼을 사용할 계획이라면 Terraform은 멀티 클라우드 지원을 제공하며, AWS CloudFormation은 AWS 전용 환경에 뛰어난 선택지입니다. 궁극적으로 두 도구 모두 적합하며 IaC를 효과적으로 관리할 수 있습니다. 올바른 선택은 여러분의 요구 사항에 달려 있으며, AWS에만 집중하거나 여러 클라우드 제공업체와 함께 작업하는지에 따라 다를 수 있습니다.
Source:
https://dzone.com/articles/understanding-iac-tools-cloudformation-vs-terraform