
| 항목 | CloudFormation | Terraform |
|---|---|---|
| 제작사 | AWS | HashiCorp |
| 목적 | AWS 리소스 자동 생성/관리 | 멀티클라우드 인프라 자동화 |
| 문법 | YAML 또는 JSON | HCL (HashiCorp Configuration Language) |
| 설치 필요 여부 | ❌ (AWS 서비스로 제공) | ✅ (CLI 설치 필요) |
CloudFormation은 AWS에서 공식으로 제공하는 서비스이고, Terraform은 써드파티 오픈소스 도구다. 따라서 CloudFormation은 AWS와의 통합성이 좋고, Terraform은 다양한 클라우드를 동시에 다룰 수 있다.
| 항목 | CloudFormation | Terraform |
|---|---|---|
| 지원 대상 | AWS 한정 | AWS, GCP, Azure, Kubernetes, VMware 등 다양한 플랫폼 |
| 멀티클라우드 환경 | ❌ | ✅ |
Terraform은 AWS뿐 아니라 GCP, Azure, 온프레미스 VM까지 지원한다. 특히 요즘 같이 멀티클라우드나 하이브리드 클라우드가 중요한 환경에서는 Terraform의 범용성이 유리하다.
| 항목 | CloudFormation | Terraform |
|---|---|---|
| 상태 저장 위치 | AWS가 자동 관리 (스택 상태) | 기본은 로컬 .tfstate, 원격 백엔드로 이동 가능 |
| 충돌 방지 기능 | 스택 기반으로 내장됨 | Locking은 백엔드 설정 필요 (예: S3 + DynamoDB) |
Terraform은 상태 파일이 핵심이다. 이 파일을 잘못 다루면 충돌이 발생할 수 있다. 반면 CloudFormation은 상태를 AWS가 내부적으로 관리하기 때문에 별도 설정이 필요 없다.
| 항목 | CloudFormation | Terraform |
|---|---|---|
| 모듈화 방식 | Nested Stack | Module |
| 재사용성 | 상대적으로 낮음 | 매우 뛰어남 |
Terraform은 모듈화가 잘 되어 있고, 커뮤니티에서 공유하는 다양한 Module이 많다. 재사용성과 확장성 측면에서 Terraform이 더 유리하다.
| 항목 | CloudFormation | Terraform |
|---|---|---|
| 공식 문서 | 상세하고 일관적 | 잘 정리되어 있음 |
| 예제 / 커뮤니티 | 상대적으로 적음 | 매우 풍부함 |
| 학습 자료 | AWS 공식 강의 위주 | 오픈소스 기반 학습자료 다양 |
Terraform은 오픈소스 생태계가 크기 때문에 인터넷 상에 많은 예제와 학습 자료가 존재한다. 반면 CloudFormation은 AWS 내부에 갇혀 있는 느낌이 있다.
Resources:
MyInstance:
Type: AWS::EC2::Instance
Properties:
InstanceType: t3.micro
ImageId: ami-0abcdef1234567890
resource "aws_instance" "example" {
ami = "ami-0abcdef1234567890"
instance_type = "t3.micro"
}
Terraform은 문법이 간결하고 선언적이다. CloudFormation은 구조가 더 복잡하지만 AWS 콘솔과 연동하기엔 편하다.
CloudFormation을 추천하는 경우
Terraform을 추천하는 경우