AWS 클라우드포메이션과 테라폼 사이에서 어떤 것을 선택해야 할지 고민이신가요? 이 글이 여러분의 현명한 결정에 도움을 드릴 것입니다.
클라우드 컴퓨팅은 데브옵스 세계에 혁명적인 변화를 가져왔습니다. 더 이상 일시적인 유행어가 아닌, 애플리케이션 개발 및 유지 관리 방식을 근본적으로 바꾸고 있습니다. 다양한 규모의 기업들이 클라우드 컴퓨팅을 활용해야 할 이유는 많지만, 인프라를 수동으로 프로비저닝해야 한다는 제약이 존재합니다.
클라우드 서비스 제공 업체의 콘솔에서 원하는 설정을 직접 입력해야 합니다. 이는 소규모 환경에서는 효과적일 수 있지만, 여러 사용자가 콘솔에서 설정을 변경하는 경우에는 관리가 점점 더 어려워집니다. 결국 복잡한 인프라가 되어 변경 사항 추적이나 협업이 어려워질 수 있습니다. 하지만, 이러한 문제를 해결할 방법이 있습니다. 바로 코드형 인프라(Infrastructure as Code, IaC)입니다.
코드형 인프라는 클라우드 컴퓨팅에서 매우 중요한 개념입니다. 코드를 사용하여 IT 인프라를 관리하는 프로세스를 의미합니다. 콘솔에서 수동으로 모든 작업을 수행하는 대신, IaC를 통해 구성 파일을 작성하고 이를 통해 클라우드 인프라를 프로비저닝할 수 있습니다. IaC는 일관성 유지, 간편하고 빠른 관리, 인적 오류 방지 등의 장점을 제공합니다.
AWS 환경에서 IaC 활용
AWS는 세계 최고의 클라우드 컴퓨팅 서비스이며, 시장 점유율은 경쟁사의 두 배에 달합니다. AWS는 수많은 사용 사례를 충족하는 200개 이상의 서비스를 제공합니다.
AWS에서 IaC를 시작할 때, 종종 다음 두 가지 선택지로 좁혀집니다. AWS 클라우드포메이션과 오픈 소스 도구인 테라폼입니다. 둘 중 하나를 선택할 때 각 도구가 제공하는 기능을 이해하는 것이 중요합니다. 이 글에서는 AWS 클라우드포메이션과 테라폼의 차이점을 살펴보고 여러분의 요구 사항에 더 적합한 도구를 선택하는 데 도움을 드리겠습니다.
테라폼 vs AWS 클라우드포메이션: 주요 차이점
모듈성
대규모 조직에서 IaC를 사용할 때, 모듈성은 올바른 도구를 선택하는 데 중요한 요소가 됩니다.
클라우드포메이션
클라우드포메이션은 모듈에 대한 기본적인 지원을 제공하지 않습니다. 대신, 중첩 스택이라는 개념을 모듈처럼 활용할 수 있습니다.
예를 들어, 조직에서 S3 버킷을 프로비저닝하는 표준 구성이 있다고 가정해 봅시다. 이 경우, S3 버킷을 생성하는 표준 클라우드포메이션 템플릿을 생성합니다. 이제 사용자가 S3 버킷을 생성하고자 할 때, 이 템플릿을 중첩 스택으로 사용하여 표준 S3 버킷을 만들 수 있습니다.
AWS에는 잘 알려지지 않은 서비스인 AWS 서비스 카탈로그도 있습니다. 이 서비스는 클라우드포메이션의 모듈화에 도움이 될 수 있습니다. 서비스 카탈로그는 AWS 서비스의 범위를 제한하여 규정 준수, 보안, 비용 또는 성능 요구 사항을 충족하려는 조직을 위해 특별히 설계된 AWS 서비스입니다. AWS 서비스 카탈로그는 백엔드에서 클라우드포메이션 템플릿을 사용합니다.
예를 들어, S3 버킷을 잘못 사용하면 중요한 데이터에 심각한 영향을 미칠 수 있습니다. 따라서, 조직에서 S3를 사용하는 표준화된 방식을 원한다고 가정해 보겠습니다. 첫 번째 방법은 클라우드포메이션 스택 내에서 사용할 수 있는 중첩 스택 템플릿을 만드는 것입니다.
사용자가 이 표준 템플릿을 중첩 스택으로 사용하지 못하도록 하려면 AWS 서비스 카탈로그를 사용할 수 있습니다. 서비스 카탈로그를 사용하면 콘솔 UI를 통해 이 표준 템플릿을 사용하고, 사용자 정의를 위해 일부 매개변수를 지정할 수 있습니다. 이를 통해 AWS 계정에서 인프라가 프로비저닝되는 방식을 제어하고 원치 않는 시나리오를 방지할 수 있습니다.
테라폼
테라폼은 모듈을 기본적으로 지원합니다. 따라서 클라우드포메이션과 매우 유사한 표준 구성을 생성하고 다른 테라폼 구성에서 사용할 수 있습니다.
테라폼은 오픈 소스 도구이므로, 테라폼 레지스트리에서 미리 만들어진 오픈 소스 모듈을 찾아 사용할 수도 있습니다. 또한, 고유한 구성을 가진 자체 모듈을 만들어 개인 모듈 레지스트리에 호스팅할 수도 있습니다.
개인적으로 모듈성이 중요한 요구 사항이라면, 클라우드포메이션보다 테라폼을 사용하는 것이 더 나은 선택이라고 생각합니다.
클라우드포메이션에서 중첩 스택을 사용하는 것은 테라폼에서 모듈을 사용하는 것만큼 쉽지 않습니다. 중첩 스택으로 데이터를 전달하는 과정이 복잡할 수 있습니다.
클라우드포메이션 템플릿을 공유할 수 있는 표준화된 장소가 없습니다. AWS 서비스 카탈로그가 있지만, 이는 콘솔을 통해 인프라를 생성할 때 특정 규칙을 적용하는 방법일 뿐입니다. 우리는 모두 코드를 선호합니다. 서비스 카탈로그를 사용하면 일부 복잡한 작업이 클라우드포메이션 파일로 캡슐화되지만, 인프라를 생성하기 위해 콘솔에서 매개변수를 입력하는 수동 작업이 여전히 필요합니다.
반면, 테라폼은 모듈을 생성, 유지, 공유하는 명확한 방법을 제공합니다. 테라폼 모듈 레지스트리에서 모듈의 정확한 요구 사항을 확인하고, 테라폼 파일에서 쉽게 사용할 수 있습니다.
인프라 제어 및 거버넌스
직원이 AWS 계정에서 생성할 수 있는 리소스를 제한하려는 경우, AWS 클라우드포메이션과 테라폼 모두 이러한 제한을 설정할 수 있는 기능을 제공합니다.
먼저 클라우드포메이션에 대해 이야기해 보겠습니다. 클라우드포메이션 자체는 템플릿 사용 방식에 대한 제어를 제공하지 않지만, AWS IAM 정책을 사용하여 AWS 계정 사용자가 리소스 생성을 위해 표준 클라우드포메이션 템플릿만 사용하도록 허용할 수 있습니다. S3 버킷 예시에서 모든 “S3 생성” 권한을 제한하고 사용자가 AWS 서비스 카탈로그 또는 중첩 스택에서 S3 버킷을 생성하도록 강제할 수 있습니다.
테라폼을 사용하면 Sentinel이라는 코드 기반 정책 도구를 사용하여 사용자가 생성할 수 있는 리소스를 제어할 수 있습니다. Sentinel을 통해 테라폼을 통한 사용자 작업을 허용하거나 거부하는 세분화된 논리 기반 정책을 적용할 수 있습니다. 예를 들어, S3 버킷을 생성하는 모든 리소스를 거부하고 사용자가 표준 모듈에서만 S3 버킷을 생성하도록 할 수 있습니다.
상태 관리
AWS 클라우드포메이션과 테라폼은 모두 관리 중인 리소스를 추적해야 합니다.
테라폼은 인프라 상태를 상태 파일에 저장합니다. 이 파일은 기본적으로 로컬에 저장되지만, S3와 같은 원격 백엔드에 저장하여 여러 사용자가 동일한 인프라 세트를 변경할 수 있도록 할 수 있습니다.
클라우드포메이션은 우리가 볼 수 있는 상태 파일을 유지 관리하지 않습니다. 클라우드포메이션은 관리형 서비스이므로 백그라운드에서 모든 상태 유지 관리 및 확인을 수행합니다.
AWS 클라우드포메이션과 테라폼은 인프라에 적용될 변경 사항을 확인할 수 있는 기능을 제공합니다. 테라폼에서는 “terraform plan” 명령을 실행하여 변경 계획을 확인할 수 있습니다. 클라우드포메이션 사용자는 변경 세트를 통해 동일한 정보를 확인할 수 있습니다.
언어
테라폼은 HashiCorp에서 만든 HashiCorp 구성 언어(HCL)를 사용합니다. HCL은 JSON과 매우 유사하며, 추가적인 내장 기능을 제공합니다.
클라우드포메이션 템플릿은 YAML 또는 JSON 형식으로 작성됩니다.
로깅 및 롤백
AWS 클라우드포메이션과 테라폼은 모두 강력한 로깅 기능을 제공합니다. 경험상 오류와 문제를 쉽게 해결할 수 있었습니다.
클라우드포메이션: 기본적으로 스택 변경이 실패하면 클라우드포메이션은 모든 변경 사항을 롤백합니다. 이는 매우 유용한 기능이며, 디버깅을 위해 비활성화할 수도 있습니다.
테라폼: 테라폼은 실패 시 변경 사항을 자동으로 롤백하지 않습니다. 하지만 언제든지 “terraform destroy” 명령을 실행하여 절반만 프로비저닝된 구성을 삭제하고 테라폼을 다시 실행할 수 있으므로 큰 문제는 되지 않습니다.
범위
테라폼은 AWS 클라우드에 국한되지 않습니다. 테라폼과 클라우드포메이션 중 하나를 선택할 때 가장 중요한 요소 중 하나는 테라폼이 다른 클라우드 제공 업체 및 서비스를 지원한다는 점입니다.
따라서 여러 클라우드 플랫폼에 IaC를 사용할 계획이라면 테라폼이 최적의 선택입니다. 클라우드포메이션은 강력한 도구이지만, AWS에만 국한됩니다. 테라폼을 사용하면 다양한 클라우드 플랫폼에 인프라를 설정하고 애플리케이션을 배포하여 애플리케이션의 가용성과 안정성을 향상시킬 수 있습니다.
기능 지원
일반적으로 AWS가 새로운 서비스와 기능을 출시하면 클라우드포메이션이 AWS 서비스이기 때문에 테라폼보다 먼저 업데이트됩니다. 현재 두 도구 모두 대부분의 서비스와 기능을 지원합니다. 이것은 테라폼 사용의 약간의 단점이 될 수 있지만, 해결책이 있습니다.
테라폼 코드 내에서 클라우드포메이션 스택을 생성할 수도 있습니다. 따라서 테라폼을 사용하면서 특정 기능이 지원되지 않는 경우, 테라폼 코드 내에서 임시로 클라우드포메이션 스택을 설정할 수 있습니다.
기술 지원
유료 AWS 기술 지원 플랜에는 클라우드포메이션 지원이 포함되어 있습니다.
HashiCorp도 테라폼에 대한 유료 기술 지원 계획을 제공합니다.
결론
AWS 클라우드포메이션과 테라폼은 모두 강력하고 완벽하게 개발된 도구입니다. 위에서 설명한 차이점들을 통해 여러분의 요구 사항에 따라 어떤 도구를 선택해야 할지 정보에 입각한 결정을 내릴 수 있을 것입니다. 개인적인 의견으로는, 앞으로 여러 클라우드 플랫폼을 사용할 계획이 있거나 현재 여러 클라우드를 사용하고 있다면, 테라폼을 모든 요구 사항에 대한 원스톱 솔루션으로 사용하는 것이 좋습니다. AWS 전용 IaC 도구를 찾고 있다면 AWS 클라우드포메이션과 테라폼 모두 좋은 선택입니다.
테라폼 학습에 관심이 있으시다면 다음 온라인 강의를 확인해 보십시오.