terraform-exec の使い方
What is terraform-exec
Hashicorpにメンテナンスされているterraform cliをGolangから使うためのモジュール
GitHub - hashicorp/terraform-exec: Terraform CLI commands via Go.
How to use
package main import ( "context" "encoding/json" "fmt" "log" "github.com/hashicorp/go-version" "github.com/hashicorp/hc-install/product" "github.com/hashicorp/hc-install/releases" "github.com/hashicorp/terraform-exec/tfexec" ) func main() { installer := &releases.ExactVersion{ Product: product.Terraform, // versionは必須 Version: version.Must(version.NewVersion("1.0.6")), } execPath, err := installer.Install(context.Background()) if err != nil { log.Fatalf("error installing Terraform: %s", err) } workingDir := "path/to/working/dir/terraform" tf, err := tfexec.NewTerraform(workingDir, execPath) if err != nil { log.Fatalf("error running NewTerraform: %s", err) } err = tf.Init(context.Background(), tfexec.Upgrade(true)) if err != nil { log.Fatalf("error running Init: %s", err) } // terraform plan -out を使う場合はPlanOptionを使う planConfig := []tfexec.PlanOption{ tfexec.Out("./out.txt"), } plan, err := tf.Plan(context.Background(), planConfig...) if err != nil { log.Fatalf("error running plan: %s", err) } // 差分が有る場合はtrueになる fmt.Println(plan) show, err := tf.Show(context.Background()) if err != nil { log.Fatalf("error show: %s", err) } b, err := json.Marshal(show) if err != nil { log.Fatalf("err %s", err) } // json形式でplan結果が表示される fmt.Println(string(b)) // ファイル出力したバイナリを使う場合 // planStr2, err := tf.ShowPlanFile(context.Background(), "./out.txt") // if err != nil { // log.Fatalf("err %s", err) // } // b, err := json.Marshal(planStr2) // if err != nil { // log.Fatalf("err %s", err) // } // fmt.Println(string(b)) // tf.Apply(context.Background()) }