흰 스타렉스에서 내가 내리지

Terraform 기본 본문

DevOps

Terraform 기본

주씨. 2024. 7. 27. 20:34
728x90

테라폼은 기본적으로 .tf 라는 파일 형식을 가지고 AWS 나 Azure 같은 퍼블릭 클라우드뿐만 아니라 다양한 서비스들을 지원한다. 

 

 

테라폼 구성요소

provider 테라폼으로 생성할 인프라의 종류를 의미합니다.
resource 테라폼으로 실제로 생성할 인프라 자원을 의미합니다.
state 테라폼을 통해 생성한 자원의 상태를 의미합니다.
(실제로 코드, 즉 테라폼 명령을 실행한 결과물이 파일 형태로 남게 된다.)
output 테라폼으로 만든 자원을 변수 형태로 state (파일) 에 저장하는 것을 의미합니다.
module 공통적으로 활용할 수 있는 코드를 문자 그대로 모듈 형태로 정의하는 것을 의미합니다.
remote 다른 경로의 state 를 참조하는 것을 말합니다. output 변수를 불러올 때 주로 사용합니다. 

 

 

Terraform provider

 

Provider 안에서 다양한 Arguments 를 가진다. 

AWS resource 를 다루기 위한 파일들을 다운로드 하는 역할을 한다.  (SDK 같은 파일 등)

 

 

Terraform resource

 

테라폼으로 VPC 를 생성하는 코드이다. 

VPC 역시 다양한 Arguments 와 다른 구성요소가 존재한다. 

 

 

Terraform state

 

테라폼으로 작성한 코드를 실제로 실행하게 되면 생성되는 파일이다. 

 

실제로는 코드가 굉장히 길어질 수 있다. 

현업에서는 계속 작성하게 되면 수천 줄, 수만 줄 까지도 늘어나게 된다. 

 

여기서, 테라폼 명령어를 실행하게 돼서 생성한 리소스들의 결과값이지 우리 인프라의 실제 상태는 아니다. 

그래서 이 state 파일과 현재 인프라의 상태를 똑같이 유지하는 것이 키포인트이다. 

 

state 는 원격 저장소인 'backend' 에도 저장될 수 있다. 

lineage 값들은 나중에는 알아야 하는 값들인데 지금은 넘어가겠다. 

 

Terraform Output

 

제일 위 resource 를 보면, VPC 의 id 나 CIDR 값들이 생긴다. 

그런 것들을 참조하여 vpc_id 라는 형태의 변수를 state 파일로 저장한다. 

remote 를 사용해서 재사용을 할 수 있다. 

 

Terraform Module

 

리소스에 대한 코드는 경로로서 포함하게 되고, 하위 경로로 tf 파일들이 위치하게 된다. 

그리고 그 안에 들어갈 인자 값들을 (위 이미지에서는 cidr_block) 넣어준다. 

한 번 만들어진 테라폼 코드들을 같은 형태로 반복적으로 만들어낼 때 주로 사용된다. 

 

재사용에 강점이 있다. 

모듈을 어떻게 쓰느냐에 따라 테라폼을 잘 쓰는지 아닌지 갈라진다. 

 

 

Terraform remote

 

remote state 는 key 값에 명시한 state 에서 변수를 가져온다. 

key 값을 명시하면 그곳에 저장된 state 값을 참조할 수 있다. 

state 파일에서 output 으로 저장된 변수를 가져오게 된다. 

 

 

 

Terraform 기본 명령어

init 테라폼 명령어 사용을 위해 각종 설정을 진행한다. 
plan 테라폼으로 작성한 코드가 실제로 어떻게 만들어질지에 대한 예측 결과를 보여준다. 
(실제로 가장 많이 쓰이는 명령어이다.)
apply 테라폼 코드로 실제 인프라를 생성하는 명령어이다.
import 이미 만들어진 자원을 테라폼 state 파일로 옮겨주는 명령어이다.
(즉, 이미 만들어진 자원을 코드로 만들고 싶을 때 이 import 명령어를 사용한다.)
state 테라폼 state 를 다루는 명령어이다. 하위 명령어로 mv, push 와 같은 명령어가 있다.
(자주는 안쓰이지만 언젠가는 쓰인다.)
destroy 생성된 자원들 state 파일 모두 삭제하는 명령어이다. 

 

이 밖에도 다른 명령어가 많지만, 기본 명령어 습득 이후에 시작해도 괜찮다. 

기본 명렁어의 사용 빈도가 90% 이상을 차지한다. 

 

Terraform Process

Init

  -  작성한 코드에서 init 명령어를 입력합니다.

  -  테라폼의 다른 명령어들을 위한 설정을 진행합니다.

  -  내부적으로는 provider 와 state, module 설정 등이 있습니다. 

 

Plan

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

  -  가장 많이 쓰이는 명령어이다. 기본적으로 plan 에 문제가 없어야 apply 에 문제가 없을 확률이 높다.

 

(plan 명령어를 사용하는 것을 습관화해야 한다. 실제로 apply 를 한다는 건, 즉 실제 우리의 서비스가 돌아가고 있는 서버에 변경을 가하는 것은 굉장히 큰 결과로 돌아올 수 있기 때문이다. )

 

Apply

  -  실제로 작성한 코드로 명령어를 생성하는 명령어이다. 

  -  실제 인프라에 영향을 끼치는 명령어이므로 주의깊게 실행을 해야한다. 

 

 

 

'DevOps' 카테고리의 다른 글

AWS Configure 설정  (0) 2024.07.30
terraform 설치하기  (0) 2024.07.30
AWS EC2 그리고 SSH  (0) 2024.07.29
DevOps 엔지니어의 역할  (0) 2024.07.27
DevOps 란 무엇인가  (0) 2024.07.27