본 시리즈에서는 테라폼 개요 및 기초 문법에 대해서 다루고자 합니다. 주요 문법을 위주로 처음 테라폼을 사용하는 분이나 돌아서면 관련 문법을 자꾸 까먹는 저를 위해 작성 하고 있습니다.
클라우드의 혜택을 받기 위한 업계 간 경쟁이 치열해지면서 DevOps 팀은 성장하는 환경과 빠르게 확장하는 비즈니스를 관리하는 데 어려움을 겪고 있습니다.
IaC 란 Infrastructure as Code 의 줄임말로 콘솔을 통해 버튼을 눌러 클라우드 인프라를 구성하는 것이 아닌 코드로 인프라를 구성하는 방식을 의미합니다.
한 두개의 리소스 정도야 새로운 도구를 배우지 않고 웹사이트에 들어가 create 버튼을 누르면 그만이겠지만 수 백개 또는 수 천개의 리소스의 경우 일일히 만들어야 한다면 쉽지 않겠죠! 또 내가 원하는 설정값이 적용이 되었는지 확인하려면 매우 귀찮고 시간도 많이 소요될 것 입니다.
이러한 문제점을 해결하기 위해 만들어진 것이 IaC 입니다. 콘솔에 접근하지 않고 코드를 통해 현재 리소스의 현황을 파악하고 설정값 업데이트 또는 리소스 삭제를 원활하게 하기 위해서 만들어졌습니다. 또한 리소스의 변경 히스토리를 파악하거나 버전 관리를 할 수 있다는 이 점도 있죠!
이 부분은 숙지 하지 않고 있어도 괜찮은 이론 부분이니 머리가 복잡하신 분은 건너뛰시기 바랍니다!
Provisioning 과 Configuration 언제 어떤 단어를 사용하는게 맞을까요? 대체 둘은 뭐가 다른걸까요!? Provisioning 이 뭔지 검색해도 프로비저닝이라고 해석이 나오니 답답해 하기만 했다가 좋은 예시를 발견해 기록해 둡니다.
Provisioning
정의: 클라우드 리소스 (Instance, Cloud Storage ...) 등을 생성하는 작업.
예시: VM 을 생성하고 프로비저닝 하는 것
Configuration
정의: VM 의 OS 수준에서 설정하는 작업
예시: 생성된 VM 에 OS 설치 또는 서비스를 올리는 것
IaC 의 주요 특징 중 하나는 declarative 입니다.
대부분의 프로그래밍 언어는 imperative 합니다. 예를 들어 파이썬에서 print("hello world") 를 실행하면 hello world 를 프린트 합니다. 또 실행하면 hello world 를 또 프린트 하겠지요. 같은 원리로 서버 5개를 만들어달라는 코드를 실행하면 실행할 때마다 서버를 5개씩 만들겠죠. 이를 imperative 하다고 합니다.
IaC 는 이와 달리 declarative 한 성격을 가지고 있습니다. 테라폼을 사용하여 나는 서버 5개가 필요해! 라고 코드를 만들면 매번 실행할 때마다 서버 5개를 생성하는 것이 아닌 클라우드에 서버 5개가 항상 있을 수 있도록 합니다.
즉, 테라폼으로 원하는 클라우드 리소스를 정의해두면 생성/삭제/업데이트 된다는 의미라고 보시면 됩니다. 테라폼 코드를 통해 보시는 리소스 정보가 곧 클라우드에 올라온 리소스들이고 코드 생성, 삭제, 업데이트를 하면 클라우드 상에도 반영이 된다고 보시면 될거 같습니다.
테라폼을 사용해서 코드로 클라우드 리소스를 관리해보세요! 수 백개, 수 천개의 리소스를 코드로 관리하여 콘솔에 들어가지 않고도 리소스 현황을 확인하고 같은 설정값의 여러 개의 리소스를 쉽게 생성 또는 업데이트 하세요!