[Terraform] 기본 개념

곽우현·2022년 7월 9일
0

Terraform

목록 보기
3/3
post-thumbnail

작동 원리

테라폼에는 3가지의 형상이 존재한다.
1. Local 코드 : 현재 개발자가 작성/수정하고 있는 코드
2. Cloud 인프라 : 실제로 클라우드에 배포되어 있는 인프라
3. Backend 상태 : 가장 최근에 배포한 테라폼 코드 형상
중요한 점은 Cloud 인프라와 Backend에 저장된 상태가 일치해야 한다.
terraform init & terraform apply 명령어를 실행하면 .terraform, .terraform.lock.hcl, terraform.tfstate와 같은 파일들이 생성된다. 이 파일들은 local에서 관리된다.

.terraform.* 형태의 파일 : terraform init 명령어를 실행할 때 생성된다.
terraform.tfstate : terraform apply 명령어를 실행 후 생성된다.


terraform.tfstate

테라폼으로 구성된 infra structure의 현재 상태를 JSON 형태로 보여준다.


프로비저닝 (Provisioning)

어떤 프로세스나 서비스를 실행하기 위한 준비 단계를 '프로비저닝'이라고 한다. 프로비저닝에는 크게 네트워크나 컴퓨터 자원을 준비하는 작업과 준비된 컴퓨터 자원에 사이트 패키지나 애플리케이션 의존성을 준비하는 단계로 나눠진다. 테라폼은 주로 '네트워크나 컴퓨터 자원을 준비하는 작업'을 다루는 도구아다.


프로바이더 (Provider)

테라폼과 외부 서비스를 연결해주는 기능을 하는 모듈이다. 예를들어, 테라폼으로 AWS 서비스의 컴퓨팅 자원을 생성하기 위해서 AWS Provider를 먼저 세팅해야 한다. 프로바이더로는 Amazon AWS, Google GCP, Microsoft Azure등과 같은 범용 클라우드 서비스를 비롯해 GitHub, Datadog,와 같은 특정 기능을 제공하는 서비스, MySQL, RabbitMQ, Docker와 같은 로컬 서비스 또한 지원한다.


리소스 (Resource)

리소스란 특정 프로바이더가 제공해주는 조작 가능한 대상의 최소 단위이다. 예를들어 AWS 프로바이더는 aws_instance리소스 타입을 제공하고, 이 리소스 타입을 사용하여 Amazon EC2 리소스를 선언하고 조작하는 것이 가능하다.


HCL (Hashicorp Configuration Language)

HCL은 테라폼에서 사용하는 언어이다. 테라폼에서 모든 설정과 리소스 선언은 HCL을 사용해 이루어진다. 확장자는 .tf를 사용한다.


초기화 (Init)

$ terraform init

terraform 구성 파일이 들어있는 작업 디렉토리를 초기화하는데 사용된다. .tfstate 파일을 생성한다. local에는 .tfstate에 정의된 내용을 담은 .terraform 파일이 생성된다. 기존에 다른 개발자가 이미 .tfstate에 인프라를 정의해 놓은 것이 있다면, 다른 개발자는 init 작업을 통해 local에서 sync를 맞출 수 있다.


계획 (Plan)

$ terraform plan

테라폼 프로젝트 디렉토리 아래의 모든 .tf 파일의 내용을 실제로 적용 가능한지 확인하는 작업을 계획이라고
한다. plan 명령어를 실행하면 어떤 리소스가 생성(+), 수정(~), 삭제(-)될지 계획을 보여준다.


적용 (Apply)

$ terraform apply

테라폼 프로젝트 디렉토리 아래의 모든 .tf 파일의 내용대로 실제로 리소스를 생성(+), 수정(~), 삭제(-)하는 일을 적용이라고 한다.apply 명령어를 실행하기 전에 변경 예정 사항을 plan으로 확인한다.


Output

인프라를 프로비저닝 한 후에 생성된 자원을 ouput을 지정하여 출력(가져오기)을 할 수 있다.


백엔드 (backend)

terraform의 상태가 저장 되는 위치를 정의한다. 여럿이서 다른 환경에서 배포하다 보면 같은 상태를 공유하는 경우가 나올 수 있으므로 테라폼에서는 local에서 backend를 지정하지 않고, AWS 환경에 경우 주로 S3에 저장한다.


module

모듈은 함께 상요되는 여러 리소스의 집합이다. 모듈을 사용하면 변수만 바꿔 동일한 리소스를 손쉽게 생성할 수 있다. dev, stage, prod의 변수를 주고 그 변수에 맞게 모듈을 가져와 실행 가능하다.

profile
주니어 Java 개발자

0개의 댓글