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