탐구 생활/Terraform

Terraform 기초: commands

개발프로브 2024. 11. 21. 21:03

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 applyterraform 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 planterraform 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 옵션을 사용하여 불필요한 상태 동기화를 줄이고 실행 속도를 개선할 수 있다.