terraform locals
- 테라폼 코드에서 반복해서 사용할 값을 변수처럼 저장해두는 기능
- 동일한 tf 파일 내에서 여려 번 선언하는 것도 가능
- 상수만이 아닌, 리소스의 속성, 변수의값들 조합하여 정의 가능
- locals 변수 참고할때는 : “local.이름”
- locals
- 다른 vaariable 조합
- 조건부
- 반복분
- 외부 주입X – varialbe만 가능
- 그 외에는 variable도 가능함
- locals도 terraform variable이랑 같은 개념으로 변수를 저장해주는 용도로 사용
- 당연히 차이점은 존재함
- 참고 문서
- locals 사용
- variable 가져오기
- key-value
- list
variable "env" {
default = "dev"
}
locals {
name = "terraform"
content = "${var.env}-${local.name}"
key_value = {
age = 32
region = "ap-northeast-2"
}
int_list = [1, 2, 3, 4, 5]
}
- terraform output 결과
output "local_namme" {
value = local.name
}
output "local_content" {
value = local.content
}
output "local_key_value" {
value = local.key_value
}
output "local_int_list" {
value = local.int_list
}

- locals만 가능한 로직
# 🎯 환경 선택용 변수 추가
variable "env" {
type = string
default = "dev"
description = "Environment (dev or prod)"
validation {
condition = contains(["dev", "prod"], var.env)
error_message = "Environment must be either 'dev' or 'prod'."
}
}
variable "complex_config" {
type = object({
environments = map(object({
instance_count = number
instance_type = string
regions = list(string)
}))
})
default = {
environments = {
dev = {
instance_count = 1
instance_type = "t3.micro"
regions = ["ap-northeast-2"]
}
prod = {
instance_count = 3
instance_type = "t3.large"
regions = ["ap-northeast-2"]
}
}
}
}
locals {
name = "terraform"
content = "${var.env}-${local.name}"
# 💡 Variable을 조합해서 새로운 값 생성
full_name = "${var.env}-${local.name}-app"
# 💡 조건부 로직 (Variable로는 불가능)
instance_type = var.env == "prod" ? "t3.large" : "t3.micro"
# 💡 복잡한 로직
# 10.0.0.0/16 기준에서 8비트 추가해서 "i" 만큼 중가
calculated_cidrs = [
for i in range(3) : cidrsubnet("10.0.0.0/16", 8, i)
]
}
- output
output "local_full_name" {
value = local.full_name
}
output "local_instance_type" {
value = local.instance_type
}
output "local_calculated_cidrs" {
value = local.calculated_cidrs
}
