메뉴 닫기

[terraform] Locals 사용 및 예시

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
}

Posted in Terraform

Related Posts