기술 이모저모/[TF] Terraform

[AWS][IaC] Terraform이란

Kobby 2022. 7. 17. 15:48

요즘 트렌드?는 IaC인 것 같다. 인프라를 직접 웹 콘솔로 들어가서 생성하는 것이 아니라 Code형태로 만들고 이를 배포함으로써 손쉽게 생성 및 삭제/관리할 수 있는 장점이 있다.

 

특히 IaC의 대표적인 Tool은 Terraform(이하 테라폼)이 있고, Ansible(이하 앤서블)이 있다. 이전에 다수의 서버에 일괄적으로 스크립트 파일을 배포하기 위해서 앤서블을 사용해보았다. 물론 앤서블도 사용하기가 편하지만 요즘은 테라폼이 대세라고 한다.

(실제 원티드 등의 Cloud 관련 공고를 보면 테라폼에 대한 우대사항이 많다.)

 

그렇다면 테라폼이란 무엇일까?

쉽게 말하면 테라폼은 Hashicorp에서 제작한 IaC 도구이다. 즉 인프라를 코드로 관리하기 위한 도구라고 보면 된다.

테라폼 예시

필자가 느낀 가장 큰 장점은 테라폼 코드 적용 전/후 상황을 비교하여 생성한 리소스에 대한 삭제가 쉽다는 점이다.

테라폼 코드를 작성하다보면 많은 시행착오를 경험한다. 근데 그럴때마다 생성한 리소스를 삭제하는 것은 매우 번거롭고 힘든 일이 될 수 있다. 하지만 테라폼 코드를 적용하여 테라폼은 이전 리소스 상태값을 .tfstate로 저장하고 삭제가 필요한 경우에는 .tfstate 값으로 원복시켜주는 기능이 있으며 매우 편리하다.

 

그리고 기본적으로 아래와 같이 Terraform init -> plan -> apply -> (필요시) destroy 순으로 진행된다.

테라폼 동작순서

Terraform init는 무엇일까?

테라폼 구성 파일이 포함된 디렉토리를 초기화하는 명령어이다.

기본적으로 테라폼은 동일 디렉토리의 .tf 코드를 모두 읽어서 리소스를 생성한다. 그렇기에 실행하는 위치가 중요하고 Terraform init을 해줌으로써 .tfstate 파일을 저장하기 위한 .terraform 폴더가 생성된다.

Terraform init

 

Terraform plan는 무엇일까?

말 그대로 해당 테라폼 코드를 실행함으로써 발생할 수 있는 리로스 변경 상태를 미리 알려준다.

그렇기 때문에 terraform plan을 통해서 어떤 리소스가 생성되는지 대략적으로 알 수 있다. 변화만 알려주는것이지 실제 리소스에 변화를 가져오진 않는다. 또한 아래 그림에서도 볼 수 있듯이 (known after apply)는 지금 상태에서는 알 수 없으며 terraform apply 후 값을 알 수 있다는 뜻이다.

terraform plan

 

Terraform Apply는 무엇일까?

terraform init -> plan을 통해 테라폼 코드의 리소스 생성을 확인하였다면, 실제 리소스를 생성해야 한다.

그리고 terraform apply로 리소스를 생성할 수 있다. 하지만 리소스 생성은 중요한 부분이기에 value 값을 입력해야 되고 yes로 입력하면 리소스가 생성된다.

terraform apply

그리고 정상적으로 terraform apply가 되면 아래와 같이 수정/변경 된 리소스 정보를 알려주는 terraform.tfstate가 생성된다.

terraform tfstate

Terraform destroy는 무엇일까?

terraform apply로 테라폼 코드 기반으로 리소스를 생성했다면, terraform destroy는 삭제하는 명령어이다.

리소스 변경이 있으므로 apply와 마찬가지로 value를 입력해야 되고 yes를 입력하면 리소스가 삭제된다.

terraform destroy

그리고 삭제 이후에는 terraform.tfstate에서도 리소스 변경 내역을 삭제한다.

 

 

terraform init, plan, apply, destroy는 테라폼 사용에 대한 아주 기본적인 명령어이면서 아주 중요한 명령어이다.

 

끝!