테라폼(Terraform)

박도준·2021년 5월 2일
0

[IaC] Terraform

목록 보기
1/9
post-thumbnail

DevOps가 최근 급부상하며 개발자도 인프라를 운영하는 상황이 생기며 IaC의 사용이 증가하고 있다.

IaC와 IaC 중에서 가장 인기있는 테라폼을 알아본다.


Infrastructure as Code(IaC)

IaC는 Infrastructure as Code, 즉 코드로써의 인프라로 인프라 구성요소인 서버, 미들웨어 그리고 서비스 등을 코드로 통해 구축하는 것을 뜻한다.

이전의 인프라 프로비저닝은 시간과 비용이 많이드는 소동 프로세스였다. 하지만 이제는 가상화, 컨테이너, 클라우드 컴퓨팅을 이용하여 인프라 관리를 하게 됐다.

클라우드 컴퓨팅이 등장하며 인프라 구성 요소의 수가 늘어났고, 날마다 수많은 애플리케이션이 프로덕션 환경에 릴리스되고 있다. 이에 따라 더 잦은 빈도로 가동되고, 중지하고, 확장할 수 있는 인프라가 필요해졌다. 이런 상황에서 IaC는 더욱 중요해졌고, 현재 많은 기업에서 IaC를 이용하고 있다.


IaC의 장점

IaC는 코드로서의 장점을 가진다.

  • 작성용이성
  • 재사용성
  • 자동화
  • 유지보수
  • 유연성
  • 손위운 공유와 협업

IaC 툴

  • Terraform
  • Ansible
  • Chef
  • Puppet
  • Saltstack
  • AWS CloudFormation


테라폼(Terraform)

Terraform is a tool for building, changing, and versioning infrastructure safely and efficiently.

테라폼 공식 문서

테라폼인프라를 만들고, 변경하고, 기록하는 IaC를 위해 만들어진 도구로써, 문법이 쉬워 비교적 다루기 쉽고 사용자가 매우 많아 참고할 수 있는 예제가 많다.

AWS, Azure, GCPd와 같은 퍼블릭 클라우드뿐만 아니라 다양한 서비스들 역시 지원한다.



테라폼 구성요소

  • provider - 테라폼으로 생성할 인프라의 종류를 의미한다.
  • resource - 테라폼으로 실제 생성할 인프라 자원을 의미한다.
  • state - 테라폼을 통해 생성한 자원의 상태를 의미한다. 현재 인프라의 상태를 의미하는 것은 아니다.
  • output - 테라폼으로 만든 자원을 변수 형태로 state에 저장하는 것을 의미한다.
  • module - 공통적으로 활용할 수 있는 코드를 문자 그대로 모듈 형태로 정의하는 것을 의미한다.
  • remote - 다른 경로의 state를 참조하는 것을 말함. 주로 output변수를 불러올 때 사용한다.
  • backend - 테라폼의 상태를 저장할 공간을 지정한다. backend를 사용하면 현재 배포된 최신 상태를 외부에 저장하기 때문에 다른 사람과 협업이 가능하다.

테라폼 작동 원리

테라폼에는 3가지의 형상이 존재한다.
1. Local 코드 : 현재 개발자가 작성/수정하고 있는 코드
2. AWS 실제 인프라 : 실제로 AWS에 배포되어 있는 인프라
3. Backend에 저장된 상태 : 가장 최근에 배포한 테라폼 코드 형상

위의 3가지 형상의 흐름에서 가장 중요한 것은 AWS 실제 인프라Backend에 저장된 상태100% 일치하도록 만드는 것이다. 테라폼을 운영하면서 최대한 이 두가지가 100% 동일하게 유지하는 것이 중요하다.


테라폼 기본 명령어

  • init - 테라폼 명령어를 사용하기 위해 각종 설정을 진행한다.

    • 지정한 backend에 상태 저장을 위한 .tfstate 파일을 생성한다. 가장 마지막에 적용한 테라폼 내역이 저장된다.

    • init 작업을 완료하면, local에 .tfstate에 정의된 내용을 담은 .terraform 파일이 생성된다.

    • 다른 개발자가 이미 tfstate에 인프라를 정의해뒀다면, 다른 개발자는 init을 통해 local의 sync를 맞출 수 있다.

  • plan - 테라폼으로 작성한 코드가 실제로 어떻게 만들어질지에 대한 예측 결과를 보여준다.

    • plan을 했을 때 에러가 없더라도, 실제 적용되었을 때는 에러가 발생할 수 있다.
    • plan 명령어는 실제 인프라에 영향이 가지 않는다
  • apply - 테라폼 코드로 실제 인프라를 생성하는 명령어이다.

  • import - 이미 인프라에 배포도니 리소르를 terraform state 파일로 옮겨주는 명령어이다.

    • local의 terraform에 해당 리소소의 상태 정볼르 저장해준다. (코드를 생성해주지는 않는다.)
    • import 이후에 pland을 하면 로컬에 해당 코드가 없기 때문에 리소스가 삭제 또는 변경된다는 결과를 보여준다. 이 결과를 바탕으로 코드를 작성할 수 있다.
  • state - 테라폼 state를 다루는 명령어이다. 하위 명령어로 mv, push와 같은 명령어가 있다.

  • destroy - 생성된 자원들을 state 파일 기준으로 모두 삭제하는 명령어이다.


profile
Better late than never

0개의 댓글