7일 차 – Terraform의 타입 제약

발행: (2025년 12월 8일 오전 02:45 GMT+9)
3 min read
원문: Dev.to

Source: Dev.to

원시 타입

원시 타입은 기본 빌딩 블록이며 string, number, bool 가 있습니다.

variable "name" {
  type    = string
  default = "Terraform"
}
variable "age" {
  type    = number
  default = 25
}
variable "is_enabled" {
  type    = bool
  default = true
}

복합 타입

복합 타입을 사용하면 여러 값을 그룹화할 수 있습니다.

List (동일 타입 값들의 순서가 있는 컬렉션)

variable "instance_ids" {
  type = list(string)
}

Set (고유 값, 순서는 중요하지 않음)

variable "unique_tags" {
  type = set(string)
}

Tuple (다른 타입들의 순서가 있는 컬렉션)

variable "my_tuple" {
  type = tuple([string, number, bool])
}

Map (동일 타입 값들을 갖는 문자열 키)

variable "region_mapping" {
  type = map(string)
}

Object (구조체와 유사하게 서로 다른 타입의 속성)

variable "server_config" {
  type = object({
    name = string
    cpu  = number
    prod = bool
  })
}

특수 타입

any (Terraform 모든 데이터 타입을 허용)

variable "input" {
  type = any
}

null (값이 없음을 나타내며, 기본 동작을 트리거할 때 자주 사용)

variable "instance_type" {
  default = null
}

실용 예시

환경 기반 네이밍

variable "environment" {
  type    = string
  default = "dev"
}

resource "aws_s3_bucket" "example" {
  bucket = "${var.environment}-app-data"
}

environment 를 변경하면 모든 종속 리소스가 업데이트됩니다.

확장 가능한 인스턴스 수

variable "instance_count" {
  type    = number
  default = 3
}

resource "aws_instance" "server" {
  count         = var.instance_count
  ami           = "ami-123"
  instance_type = "t2.micro"
}

instance_count 를 늘리면 추가 서버가 생성됩니다.

모니터링 토글

variable "monitoring_enabled" {
  type    = bool
  default = true
}

resource "aws_instance" "server" {
  monitoring = var.monitoring_enabled
}

단일 변수로 모니터링을 켜고 끌 수 있습니다.

다중 AZ 서브넷

variable "availability_zones" {
  type    = list(string)
  default = ["us-east-1a", "us-east-1b"]
}

resource "aws_subnet" "subnet" {
  count      = length(var.availability_zones)
  az         = var.availability_zones[count.index]
  cidr_block = "10.0.${count.index}.0/24"
}

지정된 AZ마다 서브넷이 자동으로 생성됩니다.

중앙 집중식 태깅

variable "tags" {
  type = map(string)
  default = {
    Environment = "dev"
    Owner       = "teamA"
  }
}

resource "aws_vpc" "main" {
  tags = var.tags
}

태그를 한 곳에서 모두 관리합니다.

복합 구성 객체

variable "config" {
  type = object({
    region         = string
    monitoring     = bool
    instance_count = number
  })

  default = {
    region         = "us-east-1"
    monitoring     = true
    instance_count = 2
  }
}

provider "aws" {
  region = var.config.region
}

추가 자료

자세한 내용은 다음 저장소를 참고하세요:

https://github.com/ankitgadling/terraformwithaws/tree/main/day_7

Back to Blog

관련 글

더 보기 »

AWS Terraform 라이프사이클 규칙

소개 인프라스트럭처 코드(IaC)는 업데이트, 교체 및 삭제 시 리소스가 어떻게 동작하는지에 대한 완전한 제어가 있을 때 가장 강력합니다. Terr...

Terraform 데이터 소스 (AWS)

Terraform 데이터 소스란 무엇인가요? 데이터 소스는 Terraform에서 기존 리소스를 읽기 전용으로 조회하는 기능입니다. 새로운 리소스를 생성하는 대신, Terraform은 ...