無料ツール

Terraform を図に変換

Terraform の .tf ファイルや terraform show -json の出力を貼り付けると、編集できる構成図になります。VPC、サブネット、リソースグループは枠に、リソースはカードに、参照は接続線になります。試すだけならアカウントは不要です。

出力例

Terraform のサンプルから描いた図の例
サンプルを試すAWS の 3 層 Web アプリRegistry モジュールを使った AWSAzure の VM と VNetGoogle Cloud の GKETerraform プランの JSON

使い方

  1. Terraform を貼り付けるかドロップ

    .tf ファイル 1 つ、同じモジュールの複数ファイル、または保存したプランや state について terraform show -json が出力する 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 など)ごとに接続線を描きます。文字列、ヒアドキュメント、locals の中の参照も対象です。depends_on は破線の接続線を追加します。ただし、2 つのリソースがすでに参照でつながっている場合や、参照先が time_sleep のように表示しない補助リソースの場合は追加しません。

  • vpc_idsubnet_id

    vpc_id と subnet_id による配置。1 つのサブネットにあるリソースはそのサブネットの中に、VPC の複数のサブネットにまたがるリソースは VPC の枠に入り、Azure のリソースはリソースグループの中に入ります。

  • modulesource

    各 module ブロックをカードとして描きます。terraform-aws-modules/vpc/aws、eks、rds などのよく知られた Registry モジュールは、作成するネットワーク枠、クラスター、データベースとして描かれ、VPC モジュールのサブネットを使うリソースはその枠の中に入ります。

  • resource_changes

    プランの JSON では、各リソースのカードにプランが行う変更が表示されます。+ は作成、~ は更新、− は削除、± は置き換えです。プランで変更されないリソースには印が付きません。VPC やサブネットなどの枠と、カードに折りたたまれた設定用のリソースにも印は付きません。

  • awsazurermgoogle

    AWS、Azure、Google Cloud のリソースを描き、複数のプロバイダーを使っていれば 1 つの図にまとめます。専用カードのない種類は、リソースの種類を表示する汎用カードになります。

Terraform プランの可視化

プランの JSON を使うと最も完全な図になります。count と for_each は実際のインスタンス数になり、モジュールは中のリソースまで展開され、リソースのカードに予定された変更の印が付きます。ふだん terraform plan を実行する場所で次の 2 つのコマンドを実行し、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 の付いた 1 枚のカードに、for_each のリソースは ×N の付いたカードになります。実際のインスタンス数を見るにはプランの JSON を貼り付けてください。
  • リモートモジュールの中身。Registry や Git のモジュールはダウンロードしません。よく知られたモジュール以外は 1 枚のカードのままで、中のリソースはプランの JSON で表示されます。
  • クラウドの実際の状態、ドリフト、コスト、実行時にどのサービスがどのサービスを呼び出しているか。図が表すのは構成がリソースをどうつないでいるかで、トラフィックではありません。

Terraform の構成図についての質問

.tf ファイルとプランの JSON、どちらを貼り付けるべきですか?

.tf ファイルはコードの形をすぐに見られる一番手軽な方法で、事前に何かを実行する必要もありません。プランの JSON は Terraform が解決済みなので、より完全です。インスタンス数は実際の値になり、モジュールは展開され、リソースのカードに予定された変更が表示されます。ざっと見るなら .tf、変更をレビューするならプランの JSON を使ってください。

複数の .tf ファイルをまとめて追加できますか?

はい。複数の .tf ファイルやモジュールのフォルダーごとドロップすると、Terraform がディレクトリ内のすべての .tf ファイルを読むのと同じように、まとめて読み取ります。ファイルを続けて入力欄に貼り付けることもできます。プランや state ファイルなどの JSON は、1 ファイルずつ読み取ります。

どのクラウドプロバイダーに対応していますか?

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 で開くには無料アカウントが必要です。

1分でキャンバスを開く

Google または GitHub でサインイン。1シートは無料で、チームが加わったらアップグレード。