////
Search
📄

Terraform 구성요소

IaC는 인프라를 이루는 서버, 미들웨어, 서비스 등 인프라 구성요소들을 코드를 통해 구축하는 것
IaC는 코드로써의 장점(= 작성용이성, 재사용성, 유지보수, 생산성 등)을 가짐

# 테라폼 구성요소

1.
provider : 테라폼으로 생성할 인프라의 종류
2.
resource : 테라폼으로 실제로 생성할 인프라 자원
3.
state : 테라폼을 통해 생성한 자원의 상태
4.
output : 테라폼으로 만든 자원을 변수 형태로 state에 저장하는 것
5.
module : 공통적으로 활용 가능한 코드를 문자 그대로 모듈 형태로 정의하는 것
6.
remote : 다른 경로의 state를 참조하는 것(output 변수를 불러올 때 주로 사용)
어떤 언어나 기술을 어떻게 공부를 해야할까요?
“지금 당장 설치하고 작성해서 무언가를 만들어보기!!” 이론을 먼저 공부하는건 시니어의 공부법에 가깝고, 주니어라면 일단 설치하고 작성해서 무언가를 만들어보는 게 중요

## Terraform provider

provider 안에서 다양한 arguments를 가짐. aws resource(AWS를 사용중이라면)를 다루기 위한 파일들을 다운로드 하는 역할

## Terraform resource

테라폼으로 VPC를 생성하는 코드. VPC 역시 다양한 argument와 다른 구성요소가 존재

## Terraform state

현재 인프라의 상태를 의미하는 것은 아님. state는 원격 저장소인 ‘backend’에도 저장될 수 있음
state가 현재 인프라 상태를 의미하는 게 아닌 만큼, state 파일과 현재 인프라 상태를 똑같이 유지하는 것이 키포인트!

## Terraform output

aws vpc 코드를 만들면 vpc di나 cidr 값들이 생기는데, 그러한 것들을 vpc_id와 같은 형태의 변수를 state 파일로 저장. remote를 사용해서 output을 재사용 가능

## Terraform module

module은 한 번 만들어진 테라폼 코드로 같은 형태를 반복적으로 만들어낼 때 주로 사용(재사용에 강점)

## Terraform remote

remote state는 key 값에 명시한 state에서 변수를 가져옴

# Terraform 기본 명령어

1.
init : 테라폼 명령어 사용을 위해 각종 설정을 진행
2.
plan : 테라폼으로 작성한 코드가 실제로 어떻게 만들어질지에 대한 예측 결과를 보여줌
3.
apply : 테라폼 코드로 실제 인프라를 생성하는 명령어
4.
import : 이미 만들어진 자원을 테라폼 state 파일로 옮겨주는 명령어
5.
state : 테라폼 state를 다루는 명령어(하위 명령어로 mv, push 같은 명령어 존재)
6.
destory : 생성된 자원(state) 파일들을 모두 삭제하는 명령어

## 테라폼 프로세스

1.
init
작성한 코드에서 init 명령어 입력
테라폼의 다른 명령어들을 위한 설정을 진행
내부적으로는 provider, state, module 설정 등
2.
plan
항상 plan 명령어를 습관화하기!!
실제로 작성한 테라폼 코드가 어떻게 만들어질지에 대한 예측 결과를 보여주는 명령어
기본적으로 plan에 문제가 없어야 apply에 문제 없을 확률이 높음(= 가장 많이 사용하는 명령어)
3.
apply
실제로 작성한 코드로 명령어를 생성하는 명령어
실제 인프라에 영향을 끼치는 명령어(= 주의깊게 실행해야함)
이밖에도 다른 명령어가 많지만, 기본 명령어 습득 이후에 시작해도 괜찮음 :
실제로 기본 명령어의 사용 빈도가 90%이므로, 사용해보면서 습득하는 것을 추천!