테라폼으로 AWS 서비스 구축하기 0장. 테라폼(terraform)이 뭐야?

테라폼으로 다양한 AWS 서비스를 구성하는 내용의 글입니다. 테라폼이란 무엇인가에 대하여 작성되어 있습니다.
2021.01.28

시작하며

AWS, Azure, GCP 등과 같은 클라우드 서비스에는 사용하는 리소스들을 템플릿으로 저장하여 관리를 용이하게 해주는 서비스가 있습니다.
저도 AWS의 다양한 서비스를 공부하고 이용하다보니 리소스의 관리를 신경쓰게 되었고 이러한 기능을 제공해주는 다양한 툴을 찾아보니 테라폼에 흥미가 생기게 되었습니다.
앞으로 공부를 하며 알게 된 것을 공유하기 위해 작성하려합니다. 이 글이 테라폼을 공부하기 시작하신 분들에게도 작게나마 도움이 되었으면 합니다.

테라폼(Terraform)?

공식사이트

Terraform is an open-source infrastructure as code software tool that provides a consistent CLI workflow to manage hundreds of cloud services. Terraform codifies cloud APIs into declarative configuration files. (공식사이트)

인프라 스트럭쳐를 코드로 관리하는(IaC) 소프트웨어 도구이며 사용자는 HCL (HashiCorp Configuration Language)로 템플릿을 작성합니다.
인프라를 코드로 관리할 때 얻을 수 있는 이점은 다양하지만 간략하게 설명하면 코드로 자동화를 구축하여 환경의 변경 및 배포와 같은 반복되는 작업에 소요되는 시간을 줄일 수 있고 인적 오류를 줄이는 등 관리 작업의 효율을 높일 수 있습니다.
현재 테라폼에선 AWS, Azure, GCP 이 외에도 다양한 클라우드 공급자를 지원하고 있습니다.

하지만 이렇게 리소스를 추상화하여 관리하는 서비스는 AWS, Azure, GCP 등에서도 제공하고 있습니다.
저도 AWS의 CloudFormation을 사용하여 리소스를 관리해왔습니다. 똑같은 서비스를 제공하고 있는데 저는 왜 테라폼을 사용하려하는 걸까요?
테라폼이 무조건 좋기때문일까요? 둘을 비교해보며 테라폼을 사용하는 이유에 대해 좀 더 알아보겠습니다.

CloudFormation VS Terraform

우선 각각의 특징을 간략하게 살펴보겠습니다.

CloudFormation

  • 템플릿을 작성하고 스택을 생성할 때 템플릿을 지정함으로써 리소스를 프로비저닝 할 수 있습니다.
  • 스택을 생성할 때 제공하는 UI 또한 알아보기 쉽습니다.
  • 리소스간의 종속성은 자동으로 관리됩니다.
    따라서 리소스의 생성, 업데이트, 삭제 순서를 고민할 필요가 없습니다.
  • create-change-set , execute-change-set 의 조합으로 리소스 변경을 적용하기 전 변경되는 내용을 확인할 수 있습니다.
  • 중첩 스택을 통하여 모듈화가 가능합니다.
  • 생성된 스택은 다른 리전에서 스택의 이름만 다르다면 재사용이 가능합니다.
  • 스택의 DeletionPolicy 의 설정 값에 따라 다르게 동작되지만 스택 삭제와 동시에 리소스도 함께 삭제할 수 있습니다.
  • 프로비저닝 후 상태 관리 또한 UI를 제공하므로 관리가 용이합니다.
  • wait condition 을 통해 리소스의 생성에 관해 종속성을 부여하거나 외부 리소스에 관한 종속성을 만들 수 있습니다.

Terraform

  • terraform을 다운로드 받은 후 tf 파일로 템플릿을 작성하여 apply 명령으로 리소스를 프로비저닝 할 수 있습니다.
  • CLI환경으로 작업하므로 UI는 제공되지 않습니다.
  • 리소스를 적용하기 전 plan 명령어로 변경될 리소스를 확인한 후 apply 명령어로 리소스 변경을 적용할 수 있습니다.
  • 모듈화를 통하여 동일한 구성의 리소스를 여러번 재사용 가능합니다.
  • destroy 명령으로 적용한 리소스를 한번에 삭제할 수 있습니다.
  • 상태 관리는 state 파일이 따로 작성되며 이를 통해 관리됩니다.
    이 파일을 S3 등에서 관리하면 여러 사용자가 사용 및 참조 할 수 있습니다.
  • depend on 옵션으로 종속성을 부여할 수 있습니다.(0.13.0 이후부터 사용가능)

이렇게 보면 두 서비스는 거의 똑같아 보입니다만 차이점도 있습니다.

  • Terraform 의 패치 속도가 CloudFormation 보다 빠릅니다.
    따라서 CloudFormation에선 지원하지 않는 부분을 지원하기도 합니다.
    (Terraform에선 Parameter Groups의 name을 설정 할 수 있지만 CloudFormatoin에선 name의 지정이 불가능합니다.)
    물론 Terraform이 자체적으로 기능을 구현하는 것이 아니라 AWS CLI에 구현되어 있는 기능만 사용 가능합니다.
  • AWS 이외의 리소스는 CloudFormation 에서 사용하기 힘듭니다.
    사용자 지정 리소스를 사용하면 구성은 가능하지만 확실히 부족한 점이 많이 느껴집니다.
    반면 Terraform은 훨씬 유연하게 대처할 수 있습니다.

위에 설명한 CloudFormation과 Terraform의 부분 이외에도 많은 특징이 있습니다.
저는 앞으로 AWS 이외에도 다양한 서비스를 사용해보고자 Terraform을 공부하고 있습니다만 CloudFormation도 사용합니다.

마치며

이제는 하나의 도구만을 고집할 필요가 없습니다.
본인이 구성해야할 환경과 상황에 맞춰서 툴을 유연하게 선택해야합니다.
AWS에선 Terraform 용 CDK도 제공하고 있습니다. 따라서 AWS 환경의 구성에는 CloudFormation을 사용하고 외부 리소스에는 Terraform용 CDK를 사용하는 조합도 이용할 수 있습니다.
다음 장에선 테라폼의 설치와 간단한 사용을 설명하겠습니다.

내용의 피드백 및 오탈자 제보는 언제나 환영합니다! must01940(G메일) 으로 보내주시길 바랍니다.
긴 글 읽어주셔서 감사합니다!

글 목록

0장. 테라폼(terraform)이 뭐야?
1장. 테라폼 설치하기
2장. EC2 RDS S3 구축하기 – 1