Terraform 기초

신동수·2024년 2월 24일
0

Terraform

목록 보기
1/10

Terraform 이란?

테라폼은 프로그램 코드를 통해 인프라 서버를 구축/운영 할 수 있게 해주는 오픈 소스 소프트웨어 이다. (IaC Tool)

  • 테라폼은 명령어를 통한 커맨드 라인 인터페이스 즉, CLI를 제공한다.
  • HCL이라고 불리는 Hashcorp Language를 사용하여 프로그래밍 한다.
  • code를 git 으로 관리한다면 기존에는 하기가 힘들었던 infrastructure 구성 history를 관리할 수 있다.

Terraform 기본 구성

  • provider : 테라폼으로 생성할 인프라 종류(AWS, GCP 등)
  • resource : 인프라 자원, AWS에서는 EC2, S3와 같은 인프라 내부 서비스로 생성되는 자원
  • state : 테라폼으로 생성한 자원 상태. 파일 형태로 남아있어, 테라폼 명령어를 실행한 결과물
  • output : 테라폼으로 만든 자원을 변수 형태로 State에 저장
  • module : 공통적으로 사용할 수 있는 코드들을 모듈 형태로 정의
  • remote : 다른 경로의 State를 참조하는 것으로 Ouptut 변수를 불러 올때 사용
  • data : terraform 을 사용하지 않고 만든 infrastructure resource 또는 다른 곳에서 사용중인 terraform code 를 통해 만들어진 resource data를 가져오는데 사용

Terraform 기본 명령어

  • init : 테라폼 명령어 사용을 위한 설정 실행
  • plan : 테라폼으로 작성한 코드 실행시 만들어질 결과 예측, 가장 많이 사용
  • apply : 인프라를 실제로 생성하는 코드
  • import : 이미 만들어진 자원을 state파일로 옮기는 것으로 이미 세팅된 AWS를 코드로 가져올 때 사용한다.
  • destroy : 생성된 자원을 state 파일 기준으로 모두 삭제

Terraform 디렉토리 구조

  • main.tf : 테라폼 CLI를 사용해서 apply를 하면 먼저 main 소스코드를 동작시킨다.
  • modules : main에서 input값을 정하고 해당 모듈을 사용할 수 있다.
  • backend.tf : 형상관리를 위해서 .tfstate 파일을 생성한다. 이 팔일은 백업하고 형상관리를 위한 설정을 정의한다.
  • provider.tf : 리소스 제공자와 버전 등을 설정한다.
  • outputs.tf : 해당 파일에 설정을 통해서 소스코드 실행 결과를 출력한다.
  • variables.tf : 소스코드에 사용할 변수를 정의한다.

Terraform HCL

Terraform Registry (AWS)

Terraform Registry

최소 표준 권장 구조

% tree test/

.
├── README.md
├── main.tf
├── variables.tf
└── main.tf

terraform.tfstate

  • 최신 테라폼 상태정보를 담고 있음
  • 현재 시점에 존재하는 인프라 상태를 보장하지 않음
  • 인프라의 실제 상태와 비교할 대상으로 사용

terraform.tfstate 관리하기

기본적으로 아무런 세팅을 하지 않은 경우, 로컬에 terrafor.tfstate 파일이 생성되는데, 팀단위로 terraform을 관리할 때는 공유 저장소에 올려둬야 한다.
보통 이렇게 팀원들이 소스코드를 공유하는 경우는 github, gitlab과 같은 버전관리툴을 사용하는데, terraform.tfstate의 경우 infra 상태를 관리하는 파일이므로 버전관리툴을 권장하지 않는다.
버전관리툴 사용 시, Locking 기능이 없어 충돌이 일어날 수 도 있고, 누군가 terraform을 업데이트 한 후 반영을 하지 않을 경우 곧바로 장애로 이어질 수 있기 때문이다.
그러면 어떻게 관리하는가?! _**바로 S3와 DynamoDB를 연동해야한다.

terraform.tfstate.backup

  • 파일의 이전 버전의 정보를 담고 있음

Code, State, Infra

  • Code는 작성한 코드를 원하는 상태.
  • State는 작성된 코드 바탕 apply 후의 상태
  • Infra는 실제 존재하는 리소스

Code, State, Infra가 일치된 상태는 가장 이상적임. 그러나 만약 코드에서 리소스 변경 혹은 삭제 시, Code는 반영안된 상태임.
Code 상에서 없는데, 실제 리소스는 있다는 것은 State 파일을 보고 바로 알게된다. 그래서 plan을 하게되면 리소스 수정 사항을 반영하게된다.
만약 tfstate가 없다면 import로 실제 state를 불러온다.
state가 없으면 리소스에 무엇이 있는지 아무것도 알 수 없다. 결국, 리소스와 code가 존재해도 확인이 안됨. apply하면 중복으로 인해 알게됨.

profile
조금씩 성장하는 DevOps 엔지니어가 되겠습니다. 😄

0개의 댓글

관련 채용 정보