네 요즘 저도 hashcorp 프로그램은 여기거 이것저것 많이 씁니다. Vagrant terraform packer 등. consul은 옆에 친구가 hashicorp vault 구축하면서 함께 세팅했는데 아직 제가 써본건 아니지만 요즘 필요성을 많이 느끼고 있습니다. 클라우드 와 같은 동적 인프라에서는 원격서비스에 각종 서비스 정보 메타데이터등 관리가 필요하더라구요. 이제서야 서비스 디스커버리가 좀 이해가는.
용기님이 말을 한대로 hashcorp는 클라우드 환경에서 IT 관리가 어떻게 변해야 하는지, 코드로 인프라를 어떻게 관리해야 하는지 앞서나가는 회사같습니다.
다른 분이 "Aws의 cloudformation을 사용하지 않고 terraform을 사용하면 좋은 점이 어떤게 잇나요?" 라고 질문을 해서 간단히 정리를 해 보았습니다.
간단히 적자면 CloudFormation은 AWS에서만 지원하는 프로그램이고 Terraform은 여러 클라우드, 가상화 솔루션을 지원합니다.
그러므로 AWS만 사용을 한다면 Terraform을 꼭 사용할 필요는 없습니다. 그러면 AWS 를 사용할 경우 무엇이 좋냐는 질문은 할 수 있겠지요.
terraform의 문서와 thoughtworks 의 문서가 도움이 될 듯 합니다.
https://www.terraform.io/intro/vs/cloudformation.html-> 여러 클라우드 서비스 지원, 각 플랫폼 독립적인 도구를 사용할 수 있음. 실행을 하기 전에 plan 단계를 두어서 terraform 실행시 리소스에서 어떤 변경이 가해질지 확인 가능.
dry-run 모드라고도 하지요. 지금 잠시 찾아보니 AWS CloudFormation 에서는 Using Change Sets(
https://aws.amazon.com/ko/blogs/aws/new-change-sets-for-aws-cloudformation/)이라는 언급이 있네요.
아래 문서가 직접 비교를 한 자료중 참고 할 만 한데요. 2015년도 자료이기 때문에 최신 버전의 내용은 담고 있지 않을 수 있습니다.
https://www.thoughtworks.com/insights/blog/choosing-right-tool-provision-aws-infrastructure- Terraform은 DSL을 사용, CloudFormation 템플릿은 JSON -> 보기는 DSL이 훨씬 좋습니다. JSON은 내용이 길어지면 사람이 보기 불편합니다.
- 변경할 내용을 미리 보기 -> Terraform의 plan이 이 기능입니다.
- failure 처리하기 -> 이건 둘간에 서로 차이나는 부분이라고 합니다. CF는 전체 실행을 롤백할 수 있는 옵션을 이용하거나 수동으로 삭제해야 하며 아주 드믄 경우지만 frozen 상태가 되어서 복구못하는 경우가 있다고합니다. Terraform은 failure 처리된 리소스만 "tainted"라고 표시하고 다음 실행시 이 리소스만 작세하고 다시 프로비전 한다고 합니다.
- AWS 리소스 지원 : CF는 당연히 AWS 모든 서비스를 프로비저닝할 수 있지만 Terraform은 그게 아니겠지요. Terraform에서 지원이 안되면 내부에 개발자가 있어서 해당 기능을 구현하든지 해야겠지요.
- 커뮤니티 : AWS에서 개발하는 것과 오픈소스의 차이점이겠죠
- state 관리: Terraform을 쓸 경우 조심해야 할 부분인데요. Terraform을 쓸 경우 클라우드 제공 업체에서 인프라의 현재 상태을 검색하지 않고 로컬 상태를 참조합니다. 그래서 여러 명이 동시에 클라우드 리소스를 만지는 경우에는 문제가 될 수 있습니다. 이 부분을 terraform에서는 remote state 라고 하여 원격에 상태파일을 둘 수 있는 기능을 지원합니다. 반면에 CloudFormation은 어떤 상태도 저장하지 않습니다. 여러 개발자가 충돌없이 환경에서 작업 할 수 있습니다.
- 특정 업체 제품과 오픈소스의 차이 : 이건 따로 설명하지 않아도 되겠지요.
- 안정성 : 위 문서에서는 Terraform 버전이 0.3.6이네요. 최근 나온것은 2017년 3월인가 0.9 버전입니다. 상대적으로 아직 덜 성숙되고 안정적이지 않은 상태이지만 계속 업데이트가 되고 있습니다. CF는 상대적으로 더 안정적이겠지요. terraform을 사용하는 한 지인도 이 부분을 언급했었는데요. 여기 복사. "0.9.x 이전에서는 remote state 설정할 때 좀 짜증나는 부분이 있었는데, 일관성 있게 설정할 수 있게 되었지요. 버전 업그레이드가 잦고, compatibility breaking change가 너무 많아서 이런 변화를 DevOps 조직이 감당할 수 있는지가 관건이라고 생각합니다."
저는 아직 클라우드쪽은 경험이 많은 것이 아니라서 이정도로만...