Terraform

EnoSoup·2021년 7월 26일
0

Terraform

목록 보기
1/1
post-thumbnail

IaC(Infrastructure as Code)

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

  • 이전의 인프라 프로비저닝은 시간과 비용이 많이드는 소동 프로세스였다. 하지만 이제는 가상화, 컨테이너, 클라우드 컴퓨팅을 이용하여 인프라 관리를 하게 됐다.
  • 클라우드 컴퓨팅이 등장하며 인프라 구성 요소의 수가 늘어났고, 날마다 수많은 애플리케이션이 프로덕션 환경에 릴리스되고 있다. 이에 따라 더 잦은 빈도로 가동되고, 중지하고, 확장할 수 있는 인프라가 필요해졌다. 이런 상황에서 IaC는 더욱 중요해졌고, 현재 많은 기업에서 IaC를 이용하고 있다.

IAC 툴

  • Terraform
  • Ansible
  • Chef
  • Puppet
  • AWS CF(CloudFormation)

Terraform

테라폼은 인프라를 만들고, 변경하고, 기록하는 IaC를 위해 만들어진 도구로써, 문법이 쉬워 비교적 다루기 쉽고 사용자가 매우 많아 참고할 수 있는 예제가 많다.
AWS, Azure, GCPd와 같은 퍼블릭 클라우드뿐만 아니라 다양한 서비스들 역시 지원한다.

Terraform 구성 요소

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

작동 원리

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

기본 명령어

  • 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
Cloud Engineer@Plateer. 클라우드 상에서 엔지니어링을 재미있게 하는 엔지니어입니다.

0개의 댓글