Terraform 기초: commands

2024. 11. 21. 21:03·탐구 생활/Terraform

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
'탐구 생활/Terraform' 카테고리의 다른 글
  • Terraform AWS: VPC 만들기
  • Terraform 기초: 리소스 생명 주기 및 데이터 소스 관리하기
  • Terraform 기초: State
  • Terraform 기초: depends_on, output
개발프로브
개발프로브
가볍게, 오랫동안 기록하고 싶은 블로그입니다.
  • 개발프로브
    ProbeHub
    개발프로브
  • 전체
    오늘
    어제
    • 분류 전체보기 (56)
      • 탐구 생활 (47)
        • 개발 탐구 (8)
        • FastAPI CORS (3)
        • FastAPI Log (4)
        • gRPC&Python (4)
        • SpringBoot 파헤치기 (2)
        • Python Monorepo (3)
        • Python 과 zstd (2)
        • Python (4)
        • FastAPI (4)
        • Terraform (8)
        • MSA (0)
        • GraphQL (2)
        • 데이터베이스 (2)
        • 네트워크 (0)
      • 기초 지식 (9)
        • Terraform (2)
        • MSA (5)
        • K8s (2)
  • 블로그 메뉴

    • 링크

      • github
      • stackoverflow
    • 공지사항

    • 인기 글

    • 태그

      springboot
      rest vs grpc
      sqlalchemy
      django 성능 개선
      티스토리챌린지
      zstd
      python graviton
      brotli
      grpc
      fastapi cors
      python amd64
      python 성능 개선
      granian
      ORM 성능 최적화
      오블완
      MSA
      Terraform
      fastapi logging
      gzip
      python arn64
      java
      ORM 문제
      PostgreSQL
      Python
      ORM 성능
      RDBMS 성능 최적화
      spring 트랜잭션
      백엔드 성능
      python 불변 객체
      FastAPI
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.0
    개발프로브
    Terraform 기초: commands
    상단으로

    티스토리툴바