terraform

[Terraform] 개요 및 작동 흐름

bbiyak2da 2024. 11. 28. 15:27

 Terraform이란?

 

  • HashiCorp에서 관리하는 오픈소스 IaC 소프트웨어 툴
  • 다양한 클라우드 지원 (AWS, Azure, Google …)
  • HCL (HashiCorp Configuration Language) 언어 기반 파일 작성

 

Terraform 기본 사용법

 

Terraform을 이용한 인프라 구축은 보통 아래와 같은 수명 주기(lifecycle)을 가진다.

  • ① .tf 파일 작성 > ② 구축 계획 확인 > ③ 리소스 생성 > ④ 리소스 수정 > ⑤ 리소스 삭제

 

.tf 파일 작성

 

Terraform Workflow 중, tf 파일 작성에 대한 내용부터 다뤄본다.

 

providers.tf

 

  • Terraform으로 생성할 인프라 공급자 정의 ex) Azure, AWS, GCP …
  • 보통, 두 가지 block으로 분류하여 구성한다.

① terraform

  • 테라폼 자체 설정 정의
  • 테라폼 버전이나 provider 버전 등을 정의
  • 'required_providers'를 사용하여 필요한 provider 버전과 다운로드 위치 명시 가능

② provider

  • 테라폼을 통해 관리할 인프라 공급자(클라우드 플랫폼)을 정의한다 ex) AzureRM, AWS, Google …

 

main.tf

  • terraform으로 생성할 인프라 리소스 정의
  • 리소스 block으로 구성

[예시]

resource “RESOURCE_TYPE” “NAME” { 
  ARGUMENT = VALUE
}

 

*RESOUCE_TYPE : 리소스 종류 ex) azurerm_resource_group

*NAME : 리소스 이름 ex) rg

*ARGUMENT : 인자/속성

 

 

variables.tf

  • Terraform 모듈 내에서 사용할 변수 정의
  • 주로 모듈 내 공통으로 사용되는 변수 정의

[예시]

variable "variable_name" {
  type        = string
  default     = "default_value“
  description = "Description of the variable”
}

 

 

*type : 변수 데이터 유형 ex) string, number, bool, list, map 등

*default : 변수가 제공되지 않았을 때 사용할 기본값

*description : 변수에 대한 설명

 

outputs.tf

  • Terraform에서 생성된 리소스의 속성 및 값을 외부에 노출

[예시]

output "output_name" {
  description = "Description of the output"
  value       = <expression>
}

 

*output_name : 출력의 이름

*description : 출력에 대한 설명

*value : 출력으로 노출할 값이나 표현식

 

Terraform Workflow

 

.tf 파일을 다 생성하였다면, 테라폼 명령어를 실행시켜서 리소스를 배포해보자!

 

 

 

terraform init

 

  • 사용자가 지정한 provider와 version에 맞게 테라폼 라이브러리를 설치하여 현재 경로에서 테라폼을 사용할 수 있도록 설정하는 명령어
  • 'terraform init' 명령어가 실행되면 .terraform 폴더와 .terraform.lock.hcl 파일이 생성됨

 

terraform validate

  • 앞서 'terraform init' 명령어를 실행한 폴더 내부 구성을 참조하여, 원격 상태 / provider API와 같은 구성 파일의 유효성 검사

 

terraform plan

  • 실제로 작성한 리소스 이름, 변수 등의 코드 유효성 검증

 

terraform apply

  • terraform plan 명령어를 통해 확인한 내용을, 실제 인프라로 배포
  • apply 성공 시 terraform.tfstate 파일이 생성되며 배포된 리소스들의 구성 정보가 저장됨 
  • apply 명령어의 여러 옵션

-auto-approve : 배포 시 확인 과정 생략 (yes 생략)

-refresh-only : 상태 파일만 업데이트 하고, 실제 리소스는 변경하지 않음

 

terraform destroy

  • 테라폼으로 배포된 리소스를 모두 삭제
  • 배포 후에 생긴 terraform.tfstate 파일의 모든 리소스가 삭제
  • 리소스가 삭제될 때마다 terraform.tfstate 파일 내용도 삭제