기술 이모저모/[TF] Terraform

[AWS][IaC] Terraform 기본 개념

Kobby 2022. 7. 17. 16:35

테라폼에는 많은 기본 개념이 있다. 이제 하나씩 배우는 단계이므로 각 개념에 대해서 정리하고자 한다.

 

 

provider란?

테라폼은 AWS뿐만 아니라 다른 플랫폼에서도 사용이 가능하다. 그렇기에 해당 테라폼 코드가 어떤 플랫폼에서 실행을 할지 결정해주는 부분이라고 보면 된다.

Provider 에시 - 1

일반적으로 aws 플랫폼 지정 외 아래와 같이 테라폼 코드로 리소스 생성을 할 수 있는 IAM 계정에 대한 정보를 많이 적는다.

만약, Key로 로그인하는 경우는 아래와 같이 Key 정보를 명시적으로 입력해주면 된다.

Provider key

그리고 만약 okta 등으로 로그인이 대체되어 있다면 아래와 같이 credential 정보가 있는 경로를 지정해주면 된다.

Provider Key2

 

resouce란?

테라폼에서 가장 중요한 부분이다. 실제 리소스를 생성하기 위한 형태라고 이해하면 된다.

resource에서 사용할 수 있는 함수를 매우 다양하게 존재하며 테라폼 공식 사이트에 아주 자세하게 기재되어 있다.

https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/s3_bucket

 

Terraform Registry

 

registry.terraform.io

테라폼 resouce

 

 

environment variables(var)란?

쉽게 말해서 resouce에서 사용할 수 있는 변수를 지정하고 값을 전달하는 타입이라고 보면 된다.

만약 1개의 리소스만 생성한다면, 해당 테라폼 코드에 모두 변수값을 지정하면 된다. 하지만 다수의 리소스에서 해당 테라폼 코드를 참조해야 된다면 리소스명 또는 태그가 달라질 것이고, 이를 모두 테라폼 코드에 반영할 수 있으므로 이를 변수화하는것이다.

 

일반적으로 input.tf로 만들어서 var를 선언한다. 그리고 사용 방법은 간단하다.

 1. main.tf의 resouce 타입에서 var를 참조

resouce var 사용1

2. input.tf 등에서 resouce 타입에서 선언해준 var에 대한 변수값 지정

resouce var 사용2

물론 위와 같이 쓰이기도 하지만, 최종적은 사용 구성은 아래와 같다.

 1. module test에서 main.tf를 참조

 2. main.tf에서 input.tf를 참조

 3. input.tf에서 필요한 var 값을 module test에서 지정

 4. 최종적으로는 module test에서 지정한 var의 값 -> input.tf로 전달 -> 이를 활용하여 main.tf의 리소스가 생성

terraform var 사용3

 

그렇다면, 한가지 의문점이 생길 수 있다. resouce 타입이 리소스를 생성하는 것이고, var가 변수를 선언하고 값을 전달하는 것이라면 이미 생성되어 있는 리소스 정보를 불러와서 사용할 수 있는 방법은 없을까? 물론 가능하다. 이것이 data 타입이다.

 

data란?

data 타입은 resouce 또는 var 타입에서 사용하기 위한 정보를 불러오는 타입이다. 예를 들어서 인스턴스 id, subnet/vpc id 등을 확인하는 용도로 많이 사용된다.

 

아래 예시를 보면 다음과 같이 해석할 수 있다.

 1. a-test-bucket의 s3 정보를 selected에 저장

 2. cloudfront 배포 설정을 할 때, domain_name에 1.에서 지정한 버킷의 bucket_domain_name을 지정한다.

terraform data 사용