현재 회사에서 사용하는 Terraform 템플릿은 main에서 for_each를, variables에서 map을 활용하여 작성되었다. 이를 통해 동일한 종류의 리소스를 여러 번 편리하게 배포할 수 있도록 구성하였다. 그런데 배포 직전에 리소스 간의 상관 관계를 확인하고 싶어졌다. terraform plan 명령어를 실행한 뒤, apply를 하지 않은 상태에서 state 파일을 확인해보았으나, (known after apply)와 같은 값들이 많아 실제로 확인하고자 하는 정보를 파악하기 어려운 경우가 많았다. Terraform에서 제공하는 기능들을 조사하던 중, terraform graph 명령어를 발견했다. 이 기능에 대해 알아보자.
terraform graph
terraform graph 명령어는 terraform 프로젝트의 리소스 간 관계를 시각적으로 표현하기 위한 DOT 언어 기반 그래프를 생성한다. 이를 통해 구성된 인프라에서 모듈, 리소스 및 종속성 간의 관계를 확인할 수 있습니다. 이 도구는 특히 복잡한 인프라를 이해하고 디버깅하는 데 유용하다. DOT 형식은 다음과 같은 형태이다.
digraph {
"module1.resource1" -> "module1.resource2"
"module2.resource1" -> "module1.resource1"
}
이 때, DOT 형식으로 저장된 것을 시각화 할 수도 있다.
먼저, DOT 파일을 저장한다.
terraform graph > graph.dot
그리고 그래프 변환 도구인 Graphviz 를 설치한 후, 아래의 명령어를 실행한다.
dot -Tpng graph.dot -o graph.png
결과로 생성된 graph.png 파일을 열어보면, 리소스 간 참조 및 연관 관계를 한눈에 확인할 수 있다.