devops

Terraform 파헤치기 본문

DevOps/Terraform

Terraform 파헤치기

vata500 2022. 6. 26. 22:45
반응형

Terraform 기본 구성

  • Provider : 테라폼으로 생성할 인프라 종류(AWS, GCP 등)
  • Resource : 인프라 자원, AWS에서는 EC2, S3와 같은 인프라 내부 서비스로 생성되는 자원
  • State : 테라폼으로 생성한 자원 상태. 파일 형태로 남아있어, 테라폼 명령어를 실행한 결과물
  • Output : 테라폼으로 만든 자원을 변수 형태로 State에 저장
  • Module : 공통적으로 사용할 수 있는 코드들을 모듈 형태로 정의.
  • Remote : 다른 경로의 State를 참조하는 것으로 Ouptut 변수를 불러 올때 사용

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(HashCorp Configuration Language)

Terraform Registry (AWS)

https://registry.terraform.io/providers/hashicorp/aws/latest/docs

 

Terraform Registry

 

registry.terraform.io

최소 표준 권장 구조

tree minimal-module/
.
├── README.md
├── main.tf
├── variables.tf
├── outputs.tf

terraform.tfstate

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

Code, State, Infra

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

Code, State, Infra가 일치된 상태는 가장 이상적임. 그러나 만약 코드에서 리소스 변경 혹은 삭제 시, Code는 반영안된 상태임.

Code 상에서 없는데, 실제 리소스는 있다는 것은 State 파일을 보고 바로 알게된다. 그래서 plan을 하게되면 리소스 수정 사항을 반영하게된다.

만약 tfstate가 없다면 import로 실제 state를 불러온다.

state가 없으면 리소스에 무엇이 있는지 아무것도 알 수 없다. 결국, 리소스와 code가 존재해도 확인이 안됨. apply하면 중복으로 인해 알게됨.

반응형
Comments