Terraform

[Terraform 기초] Terraform BLOCK & CLI

su''@ 2025. 3. 29. 23:37

Terraform 코드

HCl 기본 구성
  • 블록, 인자, 표현식으로 구성
  • 블록은 블록 타입과 레이블로 구성
  • 블록의 내용에는 다른 블록이나 인자로 구성이 되어있음.
    <Block Type> "<Block Label>" "<Block Label>" {
    # Block Body
      <Identifier> = <Expression>  # Argument
    }

Terraform Block

  1. Terrafom
    • Terraform 코드를 실행하기 위한 CLI의 버전을 명시
    • Terraform 상태를 어디에 저장할 지와 provider(특정 cloud나 SaaS, API와의 통신에 필요한 Terraform plugin)의 정보를 명시
  2. Provider
    • Provider의 정보를 기입
    • 리소스를 프로비저닝 하기 위해 사용이 되는 플러그인
  3. Resource
    • Terraform을 통해서 관리하고자 하는 리소스를 정의하는데, Provider에서 지원하는 리소스를 생성 및 상태 관리하도록 함
  4. Module
    • 모듈의 이름과 경로를 지정해 사용하고자 하는 모듈을 명시함.
    • 사전에 만든 테라폼 코드를 재활용하기 위해 사용
  5. Variable
    • 코드 수정없이 다양한 값으로 테라폼 코드를 재활용하기 위해 사용
    • 반복적으로 사용이 되는 값을 관리하기에 용이
  6. Locals
    • 복잡한 표현식이나 반복적으로 사용이 되는 변수를 관리하기에 용이

[tip] Variable과 Locals의 차이점

  variable Locals
변수 값 변경 동적으로 변경 가능 반드시 Terraform 코드에서 값을 변경
값='표현식' 할당 가능 유무 불가능 가능
Module과의 관계 Module이 값을 전달 받기 위해 사용 Module 내부에서 값을 사용하기 위해 사용
  1. Data
    • Provider에서 제공하는 정보를 Terraform에서 사용 가능한 형태로 가공
    • Provider에서 제공하는 정보를 검색하고 참조하는데 사용
  2. Output
    • 리소스 적용완료 후 특정 리소스가 어떤 값을 가지고 있는지 확인
    • 모듈에서 생성된 리소스의 정보를 참고하기 위해 사용

Terraform Command

# 디렉토리 초기화 / .terraform 디렉토리와 .terraform.lock.hcl 파일을 생성
$ terraform init

# 작성된 테라폼 코드가 정상적으로 구성이 되어있는지 확인
$ terraform validate

# 코드와 리소스 상태를 비교해서 어떤 변경이 일어나는지 적용 전에 파악
$ terraform plan

# 코드로 작성한 상태를 확인하고 반영하기 위해 사용
$ terrafomr apply

# Terraform이 관리하는 리소스의 상태를 확인하고 삭제
$ terraform destroy

# 작성한 Terraform 코드를 표준 형식과 스타일로 맞춰주는 명령어(=format)
$ terraform fmt

# output 변수에 지정된 값을 확인
$ terraform output 

# 현재 리소스 상태를 보여주거나 terraform plan을 통해 만든 파일과 비교
$ tarraform show

# 리소스 상태가 저장된 tfstate 파일의 모든 리소스를 나열
$ terraform state list

# 특정 리소스 값을 출력하는데 사용
$ terraform state show

# 리소스의 이름을 변경하거나 다른 모듈로 리소스를 옮길 때 사용
# terraform 코드에서 리소스 명을 바꾸게 되면 리소스가 추적이 되지 않아 기존 리소스를 삭제하고 새로운 리소스를 생성하게 되는 경우가 있는데, 해당 리소스를 계속 추적할 수 있도록 상태의 정보를 변경
$ terraform state mv

# 리소스 상태가 저장된 tfstate에서 더이상 해당 리소스를 추적하지 않도록 함
$ terraform state rm

# 이미 존재하는 리소스를 테라폼 코드를 통해 관리하기 위해 사용
$ terraform import 

# 콘솔에서 테라폼 코드에서 사용할 표현식을 테스트하기 위해 사용
$ terraform console

[! tip] .terraform dir & .terraform.lock.hcl file

  • .terraform 디렉토리 : Terraform 설정파일에서 필요한 provider와 module 정보 등을 확인
  • .terraform.lock.hcl 파일 : 설치된 provider의 버전을 고정해서 terraform init 을 통한 예기치 못한 업그레이드를 방지함.