Terraform 기초: 리소스 만들어보기

2024. 11. 18. 13:44·기초 지식/Terraform

Terraform 실습

Terraform 스크립트는 init -> plan -> apply 명령어 순으로 적용하여 리소스를 프로비저닝 할 수 있다.

이 순서에 따라서 local device에 txt 파일을 만들어본 후 txt 파일을 업데이트 해보겠다.


1. 스크립트 작성

Terraform 스크립트는 이전 Terraform:HCL 기본기 에서 살펴본것과 같이 Block 단위로 Resource 와 Argument 를 명시해주면 된다.

 

 

나는 terraform-tutorial 이라는 디렉터리를 만들고 그 공간에서 실습을 진행했다.


2 terraform init

script 를 적절히 작성한 후 terraform init 을 실행하면 작업공간(terraform-tutorial) 에 .terraform 디렉터리와 .terraform.locl.hcl 파일이 생성된다. 

2.1 terraform 디렉터리

 

.terraform 디렉터리는 Terraform 의 작업공간으로서 "프로젝트 상태" 를 유지하고 필요한 파일을 관리하는데 사용된다. 구체적으로 다음의 역할을 수행한다:

  • 플러그인(Providers) 캐싱: 프로젝트에 사용되는 Provider 들의 바이너리가 저장된다. 덕분에 매번 동일한 Provider 를 다운로드 받지 않아도 된다.
  • Terraform 상태 관리: Terraform이 인프라를 프로비저닝하거나 업데이트하면서 필요한 메타데이터를 보관한다. S3 나 Terraform Cloud 같은 원격 상태를 사용할 경우 원격 상태 정보가 저장되기도 한다.
  • Terraform 구성 파일 모듈 관리: 프로젝트에서 모듈을 사용할 경우, 다운로드된 모듈이 저장된다.
  • Terraform 작업 설정: Terraform 실행 시 생성되는 파일이나 설정 정보가 저장된다.

.terraform 디렉터리를 삭제하면 다시 필요한 Provider 를 다운로드 하는 과정을 거친다.

2.2 terraform.lock.hcl

 

.terraform.lock.hcl 파일은 Provider와 모듈의 버전을 고정하는 역할을 한다. 덕분에 실행 환경에서 동일한 버전을 사용할 수 있도록 보장된다.


3 terraform plan

terraform plan 커맨드를 입력하면, 사용자가 설정한 리소스 타입이 받아들인 argument 값을 알려주고 그에 따라 앞으로 생길 변화에 대해 리포트해준다. init 단계에서 생성된 .terraform 디렉터리와 .terraform.lock.hcl 에 영향은 없다.


4 terraform apply

terraform apply 커맨드를 입력하면 plan 에 따른 리소스 생성, 변경, 삭제가 이루어진다. 그리고 apply 가 될 때 terraform.tfstate 파일이 생성된다.

 

4.1 terraform.tfstate

terraform.tfstate 파일은 Terraform이 관리하는 현재 인프라의 상태를 저장한다.

이렇게 저장된 상태 정보는 Terraform이 정의한 Desired State(원하는 상태)와 Current State(현재 상태)를 비교하는 데 사용된다.

실제 생성된 terraform.tfstate 파일을 확인해보면 plan 에 나왔던 argument 들이 어떤 값이 들어가 있는지, 어떤 프로바이더가 사용되었는지 등의 정보가 생성된다.


5 리소스 수정

5.1 스크립트 수정

terraform 을 통해 생성된 리소스를 수정하기 위해 스크립트를 수정한다. 기존 pets.txt 의 content 를 변경했고, pets.json 이라는 파일을 추가하도록 했다.

5.2 paln & apply

이미 해당 작업공간에는 terraform init 이 되어 있으므로 추가로 init 할 필요는 없다. 

terraform plan 커맨드를 입력하면 변경된 스크립트에 기반하여 어떤 변화가 생길지

 

흥미로운 점은 pets.txt 파일은 change 되는게 이니라 replaced 된다는 점이다. 덕분에 최종 plan 에는 2 to add, 0 to change, 1 to destroy 가 표시되었다. 이런식으로 변경된 사항만 바뀌는게 아니라아예 없애고 새롭게 만드게 하는것을 Immutable Infrastructure 라한다.

 

terraform apply 커맨드를 입력해보자, yes 를 누르면 plan 에 있던 변화가 반영된다.


6. 리소스 삭제

작업 공간에서 terraform destroy 를 입력하면 terraform 에 의해 관리되던 리소스를 destroy 하게 된다.

 

'기초 지식 > Terraform' 카테고리의 다른 글

Terraform 기초: 변수와 변수의 활용  (1) 2024.11.18
🚀 이 글을 끝까지 읽은 당신! 샐러드랩에서 함께 일해보실래요?
주도적인 환경에서 빠르게 성장하는 프로덕트를 만들어가실분을 모시고 있습니다.
채용 공고 확인하기
'기초 지식/Terraform' 카테고리의 다른 글
  • Terraform 기초: 변수와 변수의 활용
개발프로브
개발프로브
가볍게, 오랫동안 기록하고 싶은 블로그입니다.
  • 개발프로브
    ProbeHub
    개발프로브
  • 전체
    오늘
    어제
    • 분류 전체보기 (58) N
      • 탐구 생활 (49) N
        • 개발 탐구 (8)
        • FastAPI CORS (3)
        • FastAPI Log (4)
        • gRPC&Python (4)
        • SpringBoot 파헤치기 (2)
        • Python Monorepo (3)
        • Python 과 zstd (2)
        • Python (5) N
        • FastAPI (4)
        • Terraform (8)
        • MSA (0)
        • GraphQL (2)
        • 데이터베이스 (2)
        • 네트워크 (0)
        • LLM (0)
      • 기초 지식 (9)
        • Terraform (2)
        • MSA (5)
        • K8s (2)
  • 블로그 메뉴

    • 링크

      • github
      • stackoverflow
    • 공지사항

    • 인기 글

    • 태그

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

    • 최근 글

    • hELLO· Designed By정상우.v4.10.0
    개발프로브
    Terraform 기초: 리소스 만들어보기
    상단으로

    티스토리툴바