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
- Terrafom
- Terraform 코드를 실행하기 위한 CLI의 버전을 명시
- Terraform 상태를 어디에 저장할 지와 provider(특정 cloud나 SaaS, API와의 통신에 필요한 Terraform plugin)의 정보를 명시
- Provider
- Provider의 정보를 기입
- 리소스를 프로비저닝 하기 위해 사용이 되는 플러그인
- Resource
- Terraform을 통해서 관리하고자 하는 리소스를 정의하는데, Provider에서 지원하는 리소스를 생성 및 상태 관리하도록 함
- Module
- 모듈의 이름과 경로를 지정해 사용하고자 하는 모듈을 명시함.
- 사전에 만든 테라폼 코드를 재활용하기 위해 사용
- Variable
- 코드 수정없이 다양한 값으로 테라폼 코드를 재활용하기 위해 사용
- 반복적으로 사용이 되는 값을 관리하기에 용이
- Locals
- 복잡한 표현식이나 반복적으로 사용이 되는 변수를 관리하기에 용이
[tip] Variable과 Locals의 차이점
variable Locals 변수 값 변경 동적으로 변경 가능 반드시 Terraform 코드에서 값을 변경 값='표현식' 할당 가능 유무 불가능 가능 Module과의 관계 Module이 값을 전달 받기 위해 사용 Module 내부에서 값을 사용하기 위해 사용
- Data
- Provider에서 제공하는 정보를 Terraform에서 사용 가능한 형태로 가공
- Provider에서 제공하는 정보를 검색하고 참조하는데 사용
- 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 을 통한 예기치 못한 업그레이드를 방지함.