for_each 키를 이름표로 보면 안 된다. 리소스 주소의 절반이다. terraform_data.queue["prod-orders"] 같은 주소로 state가 객체를 추적한다. 키를 바꾸면 plan은 이름이 바뀌었다고 보지 않는다. 객체 하나를 지우고 다른 하나를 만든다고 본다.
그래서 키가 표현식에서 나오면 불안하다.
locals {
queues = { for q in var.queues : "${q.env}-${q.name}" => q }
}
resource "terraform_data" "queue" {
for_each = local.queues
input = each.value
}
멀쩡해 보인다. 그런데 누군가 이름이 앞에 오는 편이 읽기 좋다고 locals에서 한 줄을 고치면 리뷰 diff도 한 줄이다. 모든 인스턴스가 교체된다는 사실은 plan에 나오고, 사람들이 대충 넘기는 곳이 바로 plan이다. 나는 키를 파일에 직접 적거나 절대 바뀌지 않는 필드 하나에서 그대로 가져오는 쪽을 택한다. 머리를 쓰는 변형은 값 쪽에만 둔다.
