
지난주에 몇 년 방치된 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에서 잘 되는 리소스 노하우 있으면 공유 부탁드립니다. 우리 팀은 그쪽 마이그레이션이 다음 스프린트인데, 아직 감이 안 잡힌다.
'IT > IaC' 카테고리의 다른 글
| OpenTofu vs Terraform, 2026년 지금 우리 팀은 뭘 쓰고 있나 (0) | 2026.07.19 |
|---|---|
| Terraform state 파일, 어떻게 나눠서 관리할까 (1) | 2026.07.14 |
| Terraform S3 native lockfile, 내부 동작을 뜯어봤다 (1) | 2026.07.10 |
| Terraform vs OpenTofu, 2026년 중반에 뭘 쓸까 (0) | 2026.07.06 |
| OpenTofu state 암호화, fallback 빼먹으면 일 난다 (0) | 2026.06.28 |