Cloudformation / Serverless vs Terraform in AWS
Terraform과 같은 도구의 필요성을 이해하고 싶습니다. Cloudformation 템플릿을 사용할 수 있고이를 사용하여 모든 AWS 서비스를 생성 / 업데이트 할 수 있다면 Terraform과 같은 서비스를 사용하는 이유는 무엇입니까? 제안하십시오.
답변
CloudFormation (CFN) 및 Terraform (CF)은 모두 IaC (Infrastructure as Code) 개발 도구입니다.
그러나 CFN은 AWS 전용입니다 . Azure, GCP 또는 AWS 에코 시스템 외부의 다른 것과 함께 사용할 수 없습니다. 반대로 TF는 클라우드에 구애받지 않습니다 . 여러 클라우드 제공 업체에서 사용할 수있을뿐만 아니라 원하는 경우 도커, 다양한 데이터베이스 및 도미노 피자와 같은 비 클라우드 제품에서도 사용할 수 있습니다.
따라서 TF의 주요 장점은 한 번만 배우면 여러 클라우드 제공 업체에 적용 할 수 있다는 것입니다. CFN은 AWS에서만 유용하며 CFN 사용을 중단하면 다른 클라우드와 함께 작동하기 위해 새로운 것을 배워야합니다.
TF와 CFN이 작동하는 방식에도 차이가 있습니다. 둘 다 강점과 주말이 있습니다. 예를 들면 :
CFN을 사용하여 배포하면 모든 리소스를 템플릿의 소스 코드와 함께 AWS의 한 중앙 위치에서 볼 수 있습니다. 반면 TF에는 그런 곳이 없습니다. AWS 콘솔에 로그인하면 TF에서 생성 한 항목, 사용 된 소스 코드 등을 알 수 없습니다.
TF에는 루프와 복잡한 데이터 구조 및 조건이 있지만 CFN에는 없습니다.
CFN에는 생성 정책과 업데이트 정책이 있지만 TF에는 없습니다.
CFN 정책 및 IAM 정책을 사용하여 CFN에 대한 액세스를 제어 할 수 있습니다. TF는 AWS 외부에서 "살아"있기 때문에 TF와 동일하게 할 수 없습니다.
CloudFormation 대신 Terraform을 선택해야하는 몇 가지 이유가 있습니다.
- 벤더 불가지론 : 미래에 클라우드 인프라를 마이그레이션해야하는 시점이있을 수 있습니다. 이는 여러 가지 이유 (예 : 비용, 규정 준수 등) 때문일 수 있습니다. Terraform을 사용하면 여전히 동일한 도구를 사용하여 새 인프라를 배포 할 수 있습니다. Terraform 모듈을 현명하게 사용하면 인프라의 상당 부분을 코드 저장소로 그대로 둘 수도 있습니다.
- 다른 도구에 대한 지원 : 이것은 또한 이전 지점에서 약간 빌드되지만 Terraform은 AWS 리소스보다 훨씬 더 많은 것을 배포 할 수 있습니다. 예를 들어 Terraform을 사용하여 Ansible로 구성된 EC2 머신의 배포를 오케스트레이션 할 수 있습니다. 또는 Terraform을 사용하여 Kubernetes 클러스터 위에 애플리케이션을 배포 할 수 있습니다. CloudFormation은 사용자 지정 Lambda 생성을 통해 사용자 지정 리소스를 지원하지만 유지 관리해야하는 작업이 상당히 많습니다.
- 더 넓은 생태계 : Terraform의 오픈 소스 특성으로 인해 인프라를 코드로 테스트하거나 규정을 준수하여 지속적으로 구축하는 등 모든 종류의 문제를 해결하는 데 도움이되는 거대한 도구 생태계가 있습니다.
- 틀림없이 더 나은 언어 : 개인적으로 Terraform은 CloudFormation보다 Infrastructure as Code에 더 적합한 방법이라고 생각합니다. Terraform은 언어 (HCL)에 훨씬 더 많은 유연성이 내장되어 있으며 해당 모듈 시스템은 CloudFormation에서 얻을 수있는 것보다 훨씬 더 많은 구성 가능성을 허용합니다.