[IaC] Terraform 튜토리얼

송현아·2021년 9월 1일
0

Terraform

목록 보기
2/3
post-thumbnail

🧷 Infrastructure as Code, 코드로써의 인프라

  • IaC (Infrastructure as Code)

    • 인프라 생성, 설정, 관리를 코드를 통해 작업 → 반복 재현성, 이력 관리
    • 인프라 코드 = 인프라 설정 = 아키텍쳐 문서
    • 빠른 공유 및 병렬 작업
  • Terraform

    URL : https://registry.terraform.io/

    • HashiCorp에서 만든 오픈소스의 IaC 툴
    • 인프라를 만들고, 변경하고, 기록하는 IaC를 위해 만들어진 도구
    • 문법이 쉬워 다루기 쉽습니다.
    • .tf 형식의 파일 형식을 가집니다.
    • AWS, Azure, GCP 등과 같은 퍼블릭 클라우드뿐만 아니라 다양한 서비스들 역시 지원합니다.

🧷 Terraform 구성요소

  • Provider : 테라폼으로 생성할 인프라의 종류
    • 보통 provider.tf 로 파일을 생성합니다.
  • Resource : 테라폼으로 실제로 생성할 인프라 자원
    • main.tf, vpc.tf 등 원하는 형태로 파일 이름을 사용합니다.
  • State : 테라폼을 통해 생성한 자원의 상태
    • 테라폼을 실행하면 자동으로 생성되는 파일(terraform.tfstate)
  • Output : 테라폼으로 만든 자원의 변수 형태로 state에 저장
  • Module : 공통적으로 활용할 수 있는 코드를 모듈 형태로 정의
  • Remote : 다른 경로의 state를 참조

🧷 Terraform 기본 명령어

  • init : 테라폼 명령어 사용을 위해 각종 설정을 진행합니다.
  • plan : 테라폼으로 작성한 코드가 실제로 어떻게 만들어질지에 대한 예측 결과를 보여줍니다.
  • apply : 테라폼 코드로 실제 인프라를 생성하는 명령어입니다.
  • state : 테라폼 state를 다루는 명령어입니다.
  • destroy : 생성된 자원들 state 파일을 모두 삭제하는 명령어입니다.

💡 Terraform 프로세스

  • init

    테라폼의 다른 명령어들을 위한 설정을 진행합니다. 내부적으로는 provider와 state, module 설정 등이 있습니다.

>> terraform init
  • plan

    실제로 작성한 테라폼 코드가 어떻게 만들어질지에 대한 예측 결과를 보여주는 명령어입니다.

    ❗ 항상 plan 명령어를 습관화 하자 ❗

>> terraform plan
  • Apply

    실제로 작성한 코드로 자원을 생성하는 명령어입니다.

>> terraform apply

📁 Terraform 디렉터리 구조

참조 블로그 : https://kim-dragon.tistory.com/49

테라폼은 코드를 작성하기 전에 테라폼 프로젝트의 파일 구조를 잘 설계해야 합니다.

IaC를 한다는 것은 결국 코드 파일을 하나하나 관리하는 것이기 때문에 파일을 구조적으로 어떻게 잡아야 하는가를 결정한는 것이 중요한 포인트 입니다.

  • main.tf : 테라폼 CLI를 사용하여 apply 명령어를 사용하면 가장 먼저 main 소스코드를 동작시킵니다.
  • modules : main에서 input값을 정하고 해당 모듈을 사용할 수 있습니다.
  • backend.tf : 테라폼은 형상관리를 위해 .tfstate 파일을 생성합니다. 이 파일을 backup하고, 형상관리하기 위한 설정을 정의합니다.
  • provider.tf : 리소스를 어디서 제공하는지, 버전은 어떤 것이 있는지 등을 설정합니다.
  • outputs.tf : 해당 파일에 설정을 통해서 소스코드에 대한 실행 결과를 출력할 수 있습니다.
  • variables.tf : 소스코드에 사용할 변수들을 정의합니다.
  • minimal 예제

    ├── README.md
    ├── main.tf
    ├── variables.tf
    ├── outputs.tf

  • complete 예제

    ├── README.md
    ├── main.tf
    ├── variables.tf
    ├── outputs.tf
    ├── ...
    ├── modules/
    │ ├── nestedA/
    │ │ ├── README.md
    │ │ ├── variables.tf
    │ │ ├── main.tf
    │ │ ├── outputs.tf
    │ ├── nestedB/
    │ ├── .../
    ├── examples/
    │ ├── exampleA/
    │ │ ├── main.tf
    │ ├── exampleB/
    │ ├── .../

  • 여기에 추가로 커스텀하게 아래의 파일들을 붙히기도 합니다.

    ├── provider.tf
    ├── backend.tf

0개의 댓글