Dev/DevOps, Infra

[(IaC)Terraform] Terraform Variables 활용하기

HJChung 2021. 5. 10. 09:04

Terraform은 HCL 문법을 가진 언어로, 변수를 정의하고 주입해서 사용할 수 있다. 

지원하는 type들은 www.terraform.io/docs/language/values/variables.html에서 확인 할 수 있다.

 

1. Variables를 사용하는 이유

일반적으로 코드작업을 할 때 변수를 사용하는 것처럼 매번 변수 대신 해당하는 값을 직접 적어주면 너무 불편하다. 

게다가 여러 서비스가 연결되어 작동하는 인프라인 경우 변수가 매우 편리하다. 

2. 변수 정의하기

해당 인프라 코드, 즉 .tf 파일 어디서나  변수를 정의할 수는 있지만 보통 variables.tf 파일을 따로 만들어 그 파일에 정의하는게 편하다. 

variable ["변수명"] {
	type = [타입]
    default = [default값] # 이렇게 default값으로 변수의 값을 넣을 수도 있고, 
    	# terraform.tfvars 파일을 생성하여 Variable = Value 형태로 정의 할 수도 있다. 
}
    
    

 

ex) 

variable "image_id" {
  type = string
}

variable "availability_zone_names" {
  type    = list(string)
  default = ["us-west-1a"]
}

variable "ami_id_maps" {
  type = map
  default = {}
}
# terraform.tfvars

image_id = "ami-064c81ce3a290fde1"
availability_zone_names = ["us-west-1a","us-west-1b","us-west-1c"]
ami_id_maps = {
    ap-northeast-2 = {
      amazon_linux2 = "ami-010bf43fe22f847ed"
      ubuntu_18_04  = "ami-061b0ee20654981ab"
    }

    us-east-1 = {
      amazon_linux2 = "ami-0d29b48622869dfd9"
      ubuntu_18_04  = "ami-0d324124b7b7eec66"
    }
}

 

그 외에 terrafom apply 시에 값을 입력받도록 할 수 도 있다. 

 

 

그리고 이 변수를 사용할 때는, 

var.[변수명] 

이렇게 사용한다.

 

ex) 

variable "aws_region" {
  description = "The AWS region things are created in"
  default     = "ap-northeast-2"
}

 

provider "aws" {
  region = var.aws_region
}

 

 

reference

인프런 <Terraform 고도화하기. Variables 활용하기>