-
Terraform Variable
IaC/Terraform 기초 2023. 9. 19. 23:17이번엔 테라폼 Variable에 대해서 알아보겠습니다.
variable은 테라폼에서 사용되는 변수입니다.
다른 일반적인 개발 언어로 개발을 하셨던 분들은 변수가 무엇인지 다 아실 것이라고 생각합니다.
혹시 모르시는 분들을 위해 간단하게 설명하면 변수는 값을 담는 그릇이라고 생각하시면 좋습니다.
그럼 테라폼에서 변수는 어떤 역할을 하는거죠?
변수는 값을 입력받아서 그 값을 담아서 전달할 수 있죠.
테라폼에서 변수도 마찬가지입니다.
어떤 변수로 설정하면 하드코딩을 하지 않고
외부의 값을 입력받아서 해당 값에 따라
리소스의 생성 조건을 다양하게 변화시킬 수 있습니다.
그럼 테라폼에 어떤 변수 타입이 있는지 코드로 간단하게 살펴봅시다.
variable "cloudman_string" { type = string default = "cloudman" } variable "cloudman_number" { type = number default = "1234" description = "float64 data type from the Go. -1.8 * 10^308 ~ 1.8 * 10^308" } variable "cloudman_bool" { type = bool default = false description = "true/false" } variable "cloudman_list" { type = list(any) default = [ 0, "1" ] } variable "cloudman_map" { type = map(string) default = { "key" = "value" } } variable "cloudman_set" { type = set(string) default = [ "att1" ] } variable "cloudman_object" { type = object({ name = string age = number }) } variable "cloudman_tuple" { type = tuple([ number ]) default = [ 0 ] } variable "cloudman_any" { type = any default = "string" }
type이 string, number 등 무언가 다른 개발 언어에서 봤던 변수와 비슷하죠?
하나씩 알아보겠습니다.
우선, string은 문자열을 담는 변수입니다.
"123", "가나다" 이런 식의 문자로 된 값들을 담을 수 있습니다.
다음은 number인데요,
테라폼이 Go 언어로 설계되었기 때문에 Go 언어의 float64 타입과 같은 최대값과 최소값을 가집니다.
bool 타입은 true와 false를 값을 가질 수 있는 변수인데,
조건문에서 활용될 수 있습니다.
(기본적으로 테라폼에서는 주로 삼항연산자를 활용해 조건문을 만듭니다.)
list는 순서가 있는 변수의 collection입니다.
그래서 list 다음에 collection에 담길 변수의 타입을 지정할 수 있습니다.
map은 다른 프로그램 언어에서와 마찬가지로 key-value 쌍을 갖는 변수의 collection입니다.
다른 언어의 map과 마찬가지로 key는 unique한 값을 가집니다.
set은 list와 비슷한 타입의 변수이지만, list와 달리 순서를 정할 수 없고
set 안에 값들은 unique 하다는 특징이 있습니다.
object는 객체인데요 여러가지 변수를 담는 더 큰 그릇으로 생각하면 됩니다.
객체 안에 attribute라는 값에 이름과 데이터 타입을 정의할 수 있습니다.
tuple은 list와 거의 비슷하지만 하나의 변수 타입만 담을 수 있는 collection입니다.
collection인데 하나의 변수 타입만 있으면 tuple, 여러 변수 타입이 있으면 list로 보면 쉽습니다.
마지막은 any인데요,
아무 값이나 다 담을 수 있는 변수 타입입니다.
하지만 변수 타입의 에러를 일으킬 수 있기 때문에
any보다는 변수의 타입을 정하여 사용하는 것이 좋습니다.
이렇게 변수를 만들면 변수의 기본값을 default에 넣어서 지정할 수 있고,
그 변수에 대한 설명을 description에 넣을 수 있습니다.
variable로 정의한 값은 다음과 같이 다른 리소스를 생성할 때 입력받는 값으로 활용될 수 있습니다.
resource "aws_s3_bucket" "cloudman_s3_sample_bucket" { bucket = var.cloudman_bucket_name bucket_prefix = "logs/" tags = { log = "yes" expired = "yes" } }
var. 다음에 변수명을 입력하면 변수로 입력받은 값을
리소스 생성 시에 넣어서 리소스의 attribute를 정할 수 있는 것이죠.
기본값인 default 값을 정의한 변수는
terraform plan이나 terraform apply에서 값을 입력하지 않으면
다음과 같이 값을 입력하라는 창이 뜨고 바로 plan이나 apply를 실행할 수 없습니다.
그런데 만약 이렇게 입력해야 하는 값이 100개가 넘는다면 어떻게 해야 할까요?
terraform plan으로 생성되는 리소스를 한번 확인하기 위해서 하나하나 다 입력을 해주어야 할까요?
그러면 너무 비효율적이겠죠? (만약 그렇게 되었다면 테라폼의 모든 값은 하드코딩 되겠죠)
그래서 terraform.tfvars.json이라는 이름의 파일을 만들어서 json으로 각 variable의 값을 정해주면
variable을 하나하나 입력하지 않고 전체 json에서 읽어서 테라폼을 실행합니다.
같은 폴더 내에 있다면 따로 테라폼을 실행할 때 경로를 지정하지 않아도 되고,
만약 테라폼을 실행하는 테라폼 코드가 있는 위치와 다른 곳에 있다면
-var-file="/path/to/terraform/tfvars/json" 과 같이
tfvars.json 파일이 있는 위치를 경로로 지정할 수도 있습니다.
지금까지 테라폼 variable에 대해서 알아보았습니다.
'IaC > Terraform 기초' 카테고리의 다른 글
Terraform Local (0) 2023.09.20 Terraform State Lock (0) 2023.09.15 Terraform Backend (0) 2023.09.12 Terraform Provider (0) 2023.09.12 Terraform Apply (0) 2023.09.05