IT/IaC

terraform query, 왜 이제 나왔나 싶다

gfrog 2026. 7. 18. 18:12

지난주에 몇 년 방치된 AWS 계정 정리를 맡았다. 상태 파일이랑 실물 리소스가 서로 다른 우주에 있는 그런 계정. 늘 하던 대로 콘솔에서 목록 뽑아서 `terraform import`를 한 줄씩 돌리려다가 옆 팀 시니어가 "요즘 그거 안 써도 돼요, `terraform query` 있잖아요" 하길래 처음 알았다. 지난해 11월 GA된 Terraform 1.14 신규 기능인데, 소문만 들었지 실제로 안 써봤었다. 써보고 나서 후회했다. 이거 진작에 알았어야 했다.

`.tfquery.hcl`이 하는 일

이름 그대로 새로운 파일 타입이다. 확장자가 `.tfquery.hcl`이어야 인식한다. 안에는 `list` 블록이 들어간다. import 블록이 "이 리소스를 상태로 끌어와줘"라면, list 블록은 "일단 계정에 뭐가 있는지부터 보여줘"에 가깝다.

list "aws_s3_bucket" "legacy_buckets" {
  provider = aws

  config {
    tag_filter = {
      Environment = "legacy"
    }
  }
}

이 파일 놓고 `terraform query` 실행하면 매칭되는 버킷들이 표로 딧 나온다. 이름, ARN, 태그. 계정 뒤질 필요 없이 CLI 안에서 끝난다.

import 블록이랑 붙이면 훨씬 편하다

혼자 보여주는 걸로 끝났으면 이 정도로 감탄하진 않았을 거다. `-generate-import-config` 옵션이 진짜다.

terraform query -generate-import-config=imports.tf

한 방에 import 블록이 다 찍혀 나온다. 그 다음 여기에 익숙한 `plan -generate-config-out=generated.tf`로 리소스 HCL까지 뽑고, `terraform plan`에서 "0 to add, 0 to change, 0 to destroy" 나오는 순간까지 다듬으면 끝. 예전에 하루 종일 잡고 있던 마이그레이션이 오후 반나절로 줄었다.

그래도 남는 아쉬움

칭찬만 하기엔 좀 이르다. 프로바이더별 지원 격차가 꽤 있다. AWS는 웬만한 리소스는 되는데, GCP·Azure는 아직 지원 목록이 제한적이다. 우리 팀도 AWS 쪽만 이걸로 넘기고 GCP는 여전히 예전 방식이다. 그리고 `list` 블록이 반환하는 필드가 리소스별로 다르다. 문서에서 지원 스키마 미리 확인 안 하면 필터를 못 건다.

관련해서 재밌는 게 하나 더 있다. 예전에 대량 임포트할 때 자주 쓰던 `terraformer`가 올해 3월에 아카이브됐다. 유지보수자 부담과 프로바이더 API 변경 대응 이슈였다고 하는데, 타이밍 상 `terraform query`가 나오면서 존재 가치가 흐려진 영향도 있어 보인다. 서드파티 도구 하나가 이렇게 조용히 은퇴할 수도 있구나 싶었다.

혹시 이미 쓰고 계신 분들, GCP/Azure에서 잘 되는 리소스 노하우 있으면 공유 부탁드립니다. 우리 팀은 그쪽 마이그레이션이 다음 스프린트인데, 아직 감이 안 잡힌다.