Terraform 도입해봐! 안써본 사람은 있어도, 한번만 써본 사람은 없을껄?





  테라폼(Terraform)이 무엇인가요?

테라폼은 HashiCorp에서 관리하는 오픈 소스 Infrastructure as Code 소프트웨어 툴 입니다. 수백개의 Cloud 서비스를 지원하며, 우리가 많이 쓰는 AWS, Azure, GDP 그리고 Naver Cloud를 지원합니다. HCL (HashiCorp Configuration Language ) 라는 언어로 설정파일을 쓰고 그 파일 대로 클라우드 인프라가 생성/변경/삭제 되는 것이라고 보면 됩니다.



  테라폼이 정말 핫 한가요?


구글 트렌드

 



위 구글 트렌드를 보시면 확실히 핫 하다는 것을 아실 수 있습니다. 점점 핫해졌고, 이미 정점을 찍고, 아직도 유지중입니다. 한국기준이 아니라 전 세계 기준이지만, 2017년 부터 그리고 그보다 전부터 시작하여 쭉 우상향 곡선을 연출하고 있습니다. 한 번도 안써본 사람은 있지만, 한번만 써본 사람은 없다는... 그런 말 들어보셨지요? 그게 바로 테라폼 인 것 같습니다. 



  테라폼 도입을 고민해야 하는 이유


빠르게, 그리고 효과적으로

DevOps 엔지니어의 제 1 덕목은 빠르게 그리고 효과적으로 소프트웨어를 딜리버리 하는데 있습니다. Ansible, Chef, Puppet 들이 비교를 많이 당하는데요. 이런 소프트웨어를 사용해 보셨을 겁니다. 테라폼 역시 마찬가지로 소프트웨어를 프로비저닝하고,  IaC(Infrastructure as Code)를 이용한 자동화를 편하게 할 수 있도록 지원합니다. 단순히 AWS 인스턴스 뿐 아니라, IP, Subnet, Routing Table 등까지 코드로 옮겨서 사용할 수 있습니다. 


빠르게 코드로 만들자!

AWS 를 자주쓰는 제 입장에서 보면 같은 작업을 할 때가 엄청 많습니다. 예를들어 Public Subnet 10개와 Private Subet 10개를 만들어서 Private 서브넷 10개에는 전용 라우팅테이블을 연결해 주는 작업들 입니다. 테라폼은 이런 인프라를 코드로 정의하고 쉽게 구성/변경 할 수 있도록 해줍니다. 손으로 다 만들고 또 수정해야 하면 20개의 서브넷을 일일이 다 고쳐줘야 합니다. 그런일 더이상 안하셔도 됩니다.


정교한 멀티클라우드 지원!

지금 당신이 멀티클라우드를 사용하고 있는지 없는지는 중요치 않습니다. 다른 대안들이 좀 있긴한데, 대부분 특정 클라우드를 지원합니다. 매우 정교하게 각각의 클라우드를 지원하니 테라폼으로 인프라를 관리해보세요.


HCL의 발전

HCL은 많은 발전을 했지만 냉정하게 말해서 아직도 프로그래밍 언어라고 하기엔 조금 부족합니다. 하지만, HCL로 자동화된 테스트 코드도 작성할 수 있고, CICD 에 연동하여 자동으로 Git push 하면서 인프라 변경을 시도 할 수 있습니다. (안전을 위한 대안을 꼭 마련하세요. 인프라가 바뀌는 것은 매우 민감한 문제 입니다.)


크나큰 생태계

방대한 커뮤니티, 테라폼은 이미 활발한 커뮤니티가 형성되어 있습니다. 오픈소스 이고 이런 커뮤니티 중심으로 개발되고 있으므로 지원을 받을 곳이 많이 있습니다. 그리고 문서도 충분히 잘되어 있습니다. 더 많은 사람, 더 큰 커뮤니티는 더 진보된 소프트웨어를 지원받을 수 있다는 뜻이라고 생각합니다.


Blazing Speed!

terraform plan 이라는 명령으로 내가 적용전에 무엇을 어떻게 바꿀지 미리 볼 수 있습니다. 테라폼 코드 안에서도 코드를 충분히 재사용할 수 있고, 인프라를 만드는 속도는 정말 빠릅니다. 클라우드 cli를 사용하는 것 같은 속도로 인프라를 빠르게 그리고 정확하게 생성/수정/삭제 합니다.


인프라 인수인계는 코드로

물론 Diagram 들도 있으면 좋습니다. 하지만, 인프라 인수인계는 테라폼 프로젝트 하나로 충분합니다. 각가지 주석을 달아주시면 2배로 좋습니다.


지금 당장 해야 하는 이유

테라폼의 유일한 단점이 하나 있습니다. 바로 기존에 생성된 인프라를 완벽하게 코드로 이식해서 사용하기 어렵다는 것. 물론 import와 data등을 지원 하지만, 기존에 생성된 인프라의 수와 양은 아마도 오늘이 가장 적을 것 이기 때문입니다. 물론 아무리 많아져도 새롭게 VPC를 만드는 것부터 사작해서 마이그레이션 하시면 되긴 합니다만, 보통은 테스트로 프로젝트 일부에 선적용 하기 때문입니다. 오늘 도입하세요. 절대 후회 안 하실거에요.


당신의 리소스 추적

당신이 만들고, 변경하고, 삭제한 리소스의 상태를 지속적으로 로컬에 또는 원한다면 어떠한 리모트 저장소(AWS S3 등)에 저장합니다. 지금 당신의 프로젝트에서 추적하고 있는 변경사항들을 옆 동료가 가져가서 사용할 수도 있습니다. 이 파일을 안전하게 관리하는 것이 포인트 이기에 리모트저장소를 사용하는 것을 추천합니다. 그래야 언제나 최신버전으로 여러분의 다른 팀원이 사용할 수 있습니다.




  단점

기존 인프라 가지고 오기.

기존 인프라를 가지고오는데 상당한 수고가 필요합니다. ID만 가지고 오거나 AWS arn 등만 가지고 온다면 그냥 가지고 오면 됩니다만, 해당 인프라를 코드로 변경해서 관리한다면 고생이 좀 필요합니다.


높은..?? 러닝커브

이것은 단점은 아니지만, 테라폼을 사용하기전에 클라우드 내의 서비스들이 무엇을 하는지 서로서로 의존은 어떻게 걸려있는지, 알고 있어야 사용하기 편합니다. 그렇지 않으면 상당히 높은 러닝커브를 만나실 수 있습니다.


장점이자 단점인 테라폼 사용 예

오늘 라이언은 RDS 인스턴스 1개, 클러스터 1개를 만들고 새로만들 서브넷 들을 db_subnet_parameter로 만들어서 사용할 예정입니다. master_db_user와 master_pw는 임의로 정하고 2주마다 한번씩 KMS와 SecretManager로 변경하게 할 예정입니다. 그리고 새로운 RDS를 사용할 보안그룹들을 ingress 허용그룹에 넣어줄 예정입니다.

Terraform을 안쓰면 AWS 콘솔에서 작업하다가 .. 내가 어디까지 했지..? 이제 뭐해야 하지..? 옆에 써놓고 해야할 정도로 이것저것 신경쓸 것이 많습니다. Terraform을 사용한다면, 누군가가 만들어 놓은 모듈을 이용하거나 그것이 아니더라도 비교적 쉽게 만들 수 있습니다. 하지만, AWS 콘솔에서 해당 작업을 수작업으로 어떻게 하는지 모른다면 Terraform에서도 할 수 없습니다. 그래서 먼저 클라우드와 친해져야 합니다. 여러분!! 이미 할 수 있나요? 당장 시작해보세요! 절대 후회하지 않을 것 입니다.







  • [[a.original_name]] ([[a.file_size | fileSizer]])
좋아요[[ postLike | likePlus ]]
공유
라이언

“Lead Python Engineer”

댓글 [[totalCommentCount]]
[[ comment.author__nick_name ]] [[ comment.datetime_updated | formatDate]] (수정됨)

[블라인드 처리된 글 입니다.]

답장
[[ sub.author__nick_name ]] [[ sub.datetime_created | formatDate ]] (수정됨)

취소
댓글을 남겨주세요.
'데브옵스' 관련 최신 포스트
[[ post.title ]]
[[ post.datetime_published_from | DateOnly ]]