8일 차: Terraform이 드디어 이해가 된다 (Loops, Count, For_Each & Dependencies)

발행: (2025년 12월 3일 오후 05:50 GMT+9)
4 min read
원문: Dev.to

Source: Dev.to

개요

오늘은 모든 것이 딱 맞아떨어지는 날이었습니다. 드디어 Terraform 메타‑인수, 특히 count, for_each, depends_on을 이해하게 되었습니다. 직접 실습해 보니 한때 두려웠던 개념들이 간단하고 강력하다는 것을 알게 되었습니다.

count 사용하기

count는 리스트를 반복할 때 유용합니다. 아래 예시에서는 변수로 전달된 버킷 이름 리스트를 사용하고, count.index를 이용해 두 개의 S3 버킷을 생성합니다:

resource "aws_s3_bucket" "bucket5" {
  count  = 2
  bucket = var.bucket_name[count.index]
  tags   = var.tags
}

일반적인 Terraform 워크플로를 실행하면:

terraform plan
terraform apply --auto-approve
terraform output

예상대로 리소스가 생성되었습니다.

for_each 사용하기

고유한 리소스 이름이 필요할 때는 for_each가 집합과 함께 더 깔끔합니다. 다음 스니펫은 집합을 사용해 두 개의 S3 버킷을 만들고, 각 버킷 이름을 each.value로 참조하는 방법을 보여줍니다:

resource "aws_s3_bucket" "bucket_set" {
  for_each = var.bucket_set   # a set of bucket names
  bucket   = each.value
  tags     = var.tags
}

depends_on 으로 의존성 관리하기

명시적인 의존성을 설정하면 Terraform이 리소스를 잘못된 순서로 적용하는 것을 방지할 수 있습니다. depends_on을 추가하면 특정 리소스가 다른 리소스가 완전히 프로비저닝될 때까지 기다리게 됩니다:

resource "aws_s3_bucket" "dependent_bucket" {
  bucket = "my-dependent-bucket"
  depends_on = [
    aws_s3_bucket.bucket5
  ]
}

For‑Expression 으로 깔끔한 출력 만들기

For‑expression은 출력 값을 간결하고 읽기 쉽게 만들어 줍니다. 아래 예시는 count 로 생성된 모든 버킷의 이름을 수집합니다:

output "s3_bucket_names" {
  value = [for bucket in aws_s3_bucket.bucket5 : bucket.bucket]
}

출력은 깔끔한 버킷 이름 리스트이며, downstream에서 활용하기에 적합합니다.

정리

  • count – 순서가 있는 리스트를 반복할 때 이상적입니다.
  • for_each – 특히 집합을 사용할 때 고유 식별자가 필요하면 더 깔끔합니다.
  • depends_on – Terraform이 리소스를 잘못된 순서로 적용하는 것을 방지합니다.
  • For‑expression – 깔끔하고 전문적인 출력을 생성합니다.

Terraform을 많이 연습할수록 DevOps 작업에 대한 자신감이 생깁니다. “음… 이제 진짜 DevOps를 할 수 있겠어.”

Back to Blog

관련 글

더 보기 »

AWS Terraform 라이프사이클 규칙

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

S3에 Terraform 상태 저장

S3를 Terraform 백엔드로 구성하기 Terraform은 상태를 S3 버킷에 저장할 수 있습니다. 아래는 S3 백엔드를 설정하는 최소 구성 예시입니다: hcl terrafor...