由于Terraform使用的是声明式的语言描述最终资源状态,所以,就能低成本的实现资源的状态可视化。
以下几种开源工具,能帮助你实现可视化资源。
Terraform graph命令
graph
是Terraform的一个子命令。通过它,你可以生成使用DOT格式的资源图。命令如下:
terraform graph | dot -Tsvg > graph.svg
除了在命令行里使用,你还可以将生成dot文件集成你的Pipeline中,以方便code review。
这里介绍一个根据dot语言生成图的在线网站: https://dreampuf.github.io/GraphvizOnline/ 效果如下图:
此工具依赖:tfstate或者HCL。
地址:https://developer.hashicorp.com/terraform/cli/commands/graph
Blast radius
Blast radius 根据Terraform生成的依赖图生成可交互的图,基于Graphviz和Python3.7。你可以通过搜索或者点击你感兴趣的资源,它可以突出显示资源依赖图。效果如下:
此工具依赖:HCL。
地址:https://github.com/28mm/blast-radius
Terraform Visual
Terraform Visual 根据Terraform plan文件生成可视化界面。
样例地址:https://hieven.github.io/examples/aws-s3
生成json格式的plan的方法:
$ terraform plan -out=plan.out
$ terraform show -json plan.out > plan.json
此工具依赖:Terraform plan文件。
Inframap
Inframap通过读取tfstate或者HCL文件生成资源图。如下图:
此工具依赖:tfstate或者HCL。
地址:https://github.com/cycloidio/inframap
Rover
Rover基于go和Vue实现,Terraform的可视化。如下图。

此工具依赖:Terraform plan文件。
地址:https://github.com/im2nguyen/rover
后记
如果CMDB只会被动从已经部署好的资源中获取信息,才能构建出整个资源图,那么,可以肯定的是,它的成本是巨大的,且不准确的。
而从现成的配置中获取信息,并构建资源图,那么,成本是相对低很多的,而且准确的。因为开源世界,会免费给你用和二次开发。只要这些配置是声明式的。Terraform的生态,就是很好的例子。
如果想深入了解声明式,可以看我之前写的:DevOps平台两种实现模式