免费工具

Terraform 转图表

粘贴 Terraform 的 .tf 文件或 terraform show -json 的输出,即可得到可编辑的架构图:VPC、子网和资源组变成框架,资源变成卡片,引用变成连线。试用无需账号。

示例输出

由 Terraform 示例绘制的示例图表
试试示例AWS 三层 Web 应用使用 Registry 模块的 AWSAzure 虚拟机与 VNetGoogle Cloud GKETerraform 计划 JSON

使用方法

  1. 粘贴或拖入 Terraform 代码

    一个 .tf 文件、同一模块的多个文件,或 terraform show -json 为已保存的计划或当前 state 输出的 JSON。无需运行 terraform init。

  2. 查看架构图

    每个资源会按类型变成一张卡片,例如计算、数据库或队列。网络、子网和资源组会变成框架,包住放置在其中的资源。

  3. 在 Archboard 中打开

    保存为新图表后,可以重新排列卡片、添加备注、分享链接,或导出为 SVG 和 PNG。注册只需 Google 或 GitHub 账号。

从 Terraform 代码中绘制哪些内容

图表根据配置中的以下块和参数生成:

  • resourcedata

    资源按类型绘制为卡片。aws_lb_target_group_attachment 这类起连接作用的资源会变成连线,aws_s3_bucket_versioning 这类设置资源会折叠进所属的存储桶;data 数据源会被跳过,除非有资源放置在其中。

  • depends_on

    一个资源对另一个资源的每次引用(例如 aws_iam_role.app.arn)都会绘制一条连线,字符串、heredoc 和 locals 中的引用也包括在内。depends_on 会添加一条虚线连线;如果两个资源之间已有引用,或目标是 time_sleep 这类被隐藏的辅助资源,则不添加。

  • vpc_idsubnet_id

    通过 vpc_id 和 subnet_id 确定位置:只在一个子网中的资源放在该子网内,分布在一个 VPC 多个子网中的资源放在 VPC 框架内,Azure 资源则放在各自的资源组中。

  • modulesource

    每个 module 块绘制为一张卡片。terraform-aws-modules/vpc/aws、eks、rds 等常用 Registry 模块会绘制为它们创建的网络框架、集群或数据库,使用该 VPC 模块子网的资源会放在框架内。

  • resource_changes

    使用计划 JSON 时,每张资源卡片都会标明计划将对该资源做什么:+ 创建、~ 更新、− 删除或 ± 替换。计划不改动的资源不带标记;VPC、子网等框架以及折叠进卡片的设置资源也不带标记。

  • awsazurermgoogle

    AWS、Azure 和 Google Cloud 的资源;如果使用多个云厂商,会画在同一张图中。没有专用卡片的类型会显示为通用卡片,并标出资源类型。

Terraform 计划可视化

计划 JSON 能生成最完整的图表:count 和 for_each 会变成真实的实例数量,模块会展开出其中的资源,资源卡片会标出计划中的变更。在平时运行 terraform plan 的位置运行以下两条命令,然后粘贴 JSON:

  1. 创建计划并保存到 plan.out,不会应用任何变更。

    terraform plan -out plan.out
  2. 以 JSON 格式输出已保存的计划。粘贴输出内容,或重定向到 plan.json 后把该文件拖到这里。

    terraform show -json plan.out

Terraform 架构图不包含什么

  • 变量和 locals 的值、.tfvars 文件、tags、user_data 以及其他属性值。卡片使用 bucket、function_name 等字面名称,没有时使用代码中的资源名。
  • .tf 文件中 count 和 for_each 的展开:配置不会被求值,所以 count = 3 的资源是一张标有 ×3 的卡片,使用 for_each 的资源标为 ×N。粘贴计划 JSON 即可看到真实的实例数量。
  • 远程模块的内容:不会下载 Registry 和 Git 模块。不在常用列表中的模块保持为一张卡片,其中的资源可通过计划 JSON 看到。
  • 云上的实际状态、配置漂移、费用,或运行时哪些服务相互调用。图表显示的是配置如何连接资源,而不是流量。

关于 Terraform 架构图的问题

应该粘贴 .tf 文件还是计划 JSON?

.tf 文件是查看代码结构最快的方式,事先无需运行任何命令。计划 JSON 更完整,因为 Terraform 已经解析过它:实例数量是真实的,模块已展开,资源卡片会显示计划中的变更。快速查看用 .tf,评审变更时用计划 JSON。

可以一次添加多个 .tf 文件吗?

可以。拖入多个 .tf 文件或整个模块文件夹,它们会被一起读取,就像 Terraform 读取一个目录中的所有 .tf 文件一样。也可以把多个文件依次粘贴到输入框中。计划或 state 文件等 JSON 输入每次只读取一个文件。

支持哪些云厂商?

AWS、Azure 和 Google Cloud。常见的资源类型会对应到计算、函数、数据库、队列、负载均衡器或 DNS 等卡片,网络、子网和资源组会变成框架。Kubernetes 和 Helm 资源显示为通用卡片,random、time、null_resource 等辅助提供程序会被隐藏。

可以可视化 Terraform state 吗?

可以。粘贴当前 state 的 terraform show -json 输出,或直接拖入 terraform.tfstate 文件。图表会显示资源类型、名称和依赖关系;被标记为 sensitive 的名称会改用代码中的资源名。不接受 .tfvars 文件,因为它只包含变量值。

在 Archboard 中打开图表后会怎样?

本页面上的预览不会被保存。选择“在 Archboard 中打开”后,你看到的图表(卡片、框架、名称和连线)会保存为工作区中的新图表,你可以重新排列、添加注释、分享或导出。它只是一个起点:之后对 Terraform 代码的修改不会更新该图表。

Terraform 可视化工具免费吗?

免费。粘贴 Terraform 代码和查看图表都无需账号。在 Archboard 中打开需要一个免费账号。

一分钟打开画布

使用 Google 或 GitHub 登录。单席位免费,团队加入后再升级。