
Terraform는 인프라를 코드로 관리하기 위한 강력한 도구이다. Terraform을 효과적으로 사용하려면 다양한 명령어를 이해하고 활용하는 것이 중요하므로 Terraform에서 자주 사용되는 명령어들과 그 활용 사례에 대해 살펴보자.
주요 Terraform 명령어
1. terraform init
terraform init
은 Terraform 프로젝트를 초기화하는 데 사용된다. 이 명령은 구성 디렉토리를 준비하고 필요한 provider 플러그인을 다운로드한다. Terraform 작업의 첫 단계로 항상 실행해야 한다.
2. terraform validate
terraform validate
는 Terraform 구성 파일의 구문 오류를 확인한다. 이 명령은 코드를 실행하기 전에 구성 파일이 올바른지 검증하는 데 유용하다.
- 성공적인 유효성 검사:결과: "Success! The configuration is valid."
terraform validate
- 오류 발생 시:오류가 발생한 줄과 수정 방법이 제공된다.
Error: Unsupported argument
3. terraform fmt
terraform fmt
는 구성 파일을 표준 형식으로 자동 정렬한다. 이 명령은 코드의 가독성을 높이고, 팀 협업 시 코드 스타일을 통일하는 데 유용하다.
아래와 같이 포맷이 통일되어 있지 않은 tf 문서가 있는 작업공간에서 terraform fmt 를 실행하면 일관된 포맷으로 만들어준다.
resource "local_file" "pet" {
filename = var.filename
content = "${var.content} - ${random_pet.my-pet.id}"
}
resource "random_pet" "my-pet" {
prefix = var.prefix
separator = var.separator
length = var.length
}
resource "local_file" "pet" {
filename = var.filename
content = "${var.content} - ${random_pet.my-pet.id}"
}
resource "random_pet" "my-pet" {
prefix = var.prefix
separator = var.separator
length = var.length
}
이때 파일 실행 결과 std out 에 수정된 파일 목록이 출력되며, 변경 사항은 저장된다.
4. terraform plan
terraform plan
은 실행 계획을 생성하여 Terraform이 구성 파일에 정의된 변경 사항을 실제 인프라에 적용하기 전에 어떤 작업이 수행될지 확인할 수 있다.
- 변경 사항이 없다면: "No changes. Infrastructure is up-to-date."
- 변경 사항이 있다면, 추가/수정/삭제할 리소스 목록이 출력된다.
5. terraform apply
terraform apply
는 terraform plan
에서 생성된 실행 계획을 실제 인프라에 적용한다.
명령 실행 후 확인 프롬프트에서 yes
를 입력하면 Terraform이 실행 계획을 실행한다.
6. terraform show
terraform show
는 현재 인프라 상태를 표시한다. 이 명령은 Terraform의 상태 파일을 읽어 리소스의 속성을 출력한다.
terraform show
- JSON 형식으로 출력하려면:
terraform show -json
7. terraform output
terraform output
은 구성 파일에서 정의된 출력 변수의 값을 표시합니다.
- 모든 출력 변수 표시:
terraform output
- 특정 변수의 값 표시:
terraform output <variable_name>
8. terraform refresh
terraform refresh
는 실제 인프라 상태를 동기화하고 Terraform의 상태 파일을 업데이트합니다. 수동으로 외부에서 리소스가 변경된 경우 유용하다.
terraform refresh
이 명령은 terraform plan
및 terraform apply
실행 시 자동으로 수행되지만, -refresh=false
플래그를 사용하면 이를 건너뛸 수 있다.
9. terraform graph
terraform graph
는 Terraform 구성 파일 또는 실행 계획에 정의된 의존성 그래프를 생성한다.
위의 fmt 에서 사용된 파일을 예시로 사용해보면 사람이 해석하기에는 다소 난해한 DOT 형식의 텍스트를 출력한다.
➜ terraform-files terraform graph
digraph {
compound = "true"
newrank = "true"
subgraph "root" {
"[root] local_file.pet (expand)" [label = "local_file.pet", shape = "box"]
"[root] provider[\"registry.terraform.io/hashicorp/local\"]" [label = "provider[\"registry.terraform.io/hashicorp/local\"]", shape = "diamond"]
...
}
}
이러한 텍스트를 그래프 시각화 도구에 파이프라인으로 연결하면 시각화된 그래프를 볼 수 있다. mac 과 linux 에서는 Graphviz 를 이용할 수 있겠다.
terraform graph | dot -Tpng > graph.png
아래가 그 결과인데, 그다지 보기 좋진 않다.

10. terraform providers
terraform providers
는 현재 구성 파일에서 사용하는 provider 목록을 표시한다.
terraform providers
필요한 provider 플러그인을 다른 디렉토리에 복사하려면 mirror
서브 명령을 사용할 수 있다.
11. terraform state
Terraform 상태 파일을 직접 수정하는 대신, terraform state
명령어를 사용하여 안전하게 상태 파일을 관리할 수 있다. 이 명령은 상태 파일에서 리소스를 이동하거나 수정하는 데 사용된다.
Terraform 명령어 사용 팁
1. 협업 환경에서의 Remote State
팀 환경에서는 Remote State를 사용하여 상태 파일을 공유하는 것이 중요하다. Terraform 상태 파일을 원격 스토리지(예: AWS S3, Terraform Cloud)에 저장하면, 모든 팀원이 항상 최신 상태를 유지할 수 있다.
2. 자동화된 워크플로우
Terraform 명령어를 CI/CD 파이프라인에 통합하면 인프라 배포를 자동화할 수 있다. terraform init
, plan
, apply
를 순서대로 실행하여 안전한 배포를 구현할 수 있겠다.
3. -refresh=false로 성능 최적화
대규모 인프라에서는 -refresh=false
옵션을 사용하여 불필요한 상태 동기화를 줄이고 실행 속도를 개선할 수 있다.
'탐구 생활 > Terraform' 카테고리의 다른 글
Terraform AWS: VPC 만들기 (0) | 2024.11.24 |
---|---|
Terraform 기초: 리소스 생명 주기 및 데이터 소스 관리하기 (0) | 2024.11.22 |
Terraform 기초: State (0) | 2024.11.21 |
Terraform 기초: depends_on, output (0) | 2024.11.19 |
Terraform 기초: HCL 기본기 (0) | 2024.11.17 |