8일 차: Terraform이 드디어 이해가 된다 (Loops, Count, For_Each & Dependencies)
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를 할 수 있겠어.”