tfdiff: Terraformのモジュール間の差分を調べるためのツールを作った
Terraformでモジュール間の差分を比較するツールtfdiffを作りました。
tfdiffとは tfdiffはTerraformのモジュール同士を比較・表示するコマンドラインツールです。 単純なファイル比較ではなく、HCLを解析して以下の要素ごとに差分を表示します:
モジュール呼び出し(module calls) 出力(outputs) リソース(resources) データソース(data sources) 変数(variables) Terraformを使っていると、モジュール間でどんな違いがあるか比較したくなる時があります。 特に、ルートモジュールでproductionやstagingを分けて管理している時、呼び出しているモジュールが足りていなくて環境毎の差分が発生していたり、引数の差分が適切ではなかったりすることがあります。 こういうルートモジュール間の差分を確認するために素朴にdiffコマンドで比較するのもいいですが、モジュールの構造を考慮した差分が見たいケースもあります。 tfdiffはそういった用途で使えるツールです。
サンプル 以下のように、example/leftとexample/rightの2つのルートモジュールがあるとします。
example/ ├── left/ │ ├── main.tf │ ├── outputs.tf │ └── variables.tf └── right/ ├── main.tf ├── outputs.tf └── variables.tf left/main.tfにのみリソースが定義されている場合 片方でのみ定義して、もう片方で定義し忘れている場合を考えます。
# Web application infrastructure resource "aws_instance" "web" { ami = "ami-0c02fb55956c7d316" instance_type = "t2.micro" tags = { Name = "WebServer" Environment = "production" } } このとき、tfdiffは以下のように差分として検出します。
% ./dist/tfdiff ./examples/basic/{left,right} --- ./examples/basic/left +++ .
