地方エンジニアの学習日記

興味ある技術の雑なメモだったりを書いてくブログ。たまに日記とガジェット紹介。

【Terraform】Terraform 1.6 で追加されたtestについて書いてみる

この記事は「terraform Advent Calendar 2023」の23日目の記事です!

terraform testとは

terraform 1.6で入ったtest機能はTerraform module を実際にplanやapplyをして動作を確信するための機能です。1.5まではexperimental features(実験的な機能)として提供されてきましたが1.6で正式リリースとなったようです。(軽く見てる感じ1.5の時のtestコードは動かなそうに見えてるのでアップデート後に修正が必要そうです。)

developer.hashicorp.com

  • terraform plan をした結果をテストできる
  • terraform apply をした結果をテストできる

使ってみる

resource "local_file" "helloworld" {
  content  = "hello world!"
  filename = "hello.txt"
}

resource "null_resource" "example_dir" {
  provisioner "local-exec" {
    command = "mkdir -p ${path.module}/new_directory"
  }
}

テストは run ブロックを使用し以下のように書くことができます。

run "test01" {
  assert {
    condition = local_file.helloworld.content == "hello world!"
    error_message = "error message"
  }

  assert {
    condition = local_file.helloworld.filename == "hello.txt"
    error_message = "error message"
  }
}

run "test02" {
  assert {
    condition = local_file.helloworld.content == "hello world!"
    error_message = "error message"
  }
}

実行すると以下のように出力されます

$ terraform test
main.tftest.hcl... in progress
  run "test01"... pass
  run "test02"... pass
main.tftest.hcl... tearing down
main.tftest.hcl... pass

Success! 2 passed, 0 failed.

個人的な用途

チーム開発ですぐに使うかと言われると正直そこまで必要かは怪しいかなと思った。あくまでもmoduleのテストに特化したもので普通にresourceを定義していく分にはあまり使わないかなと思う。プライベートモジュールとかを書く際には確かにあると便利だと思うので毎回書くほどのものではないかなぁという印象で使っている。ただそれは自分で意識して書く場合はそこまで重要じゃないと思っているだけでTerraformテストフレームワークが公式で提供されることでAIの学習が進み自動生成される世界がすぐ来るだろうから自分で書くことはないけど普段の開発では自動生成されてCIに組み込まれていて人間は手直しするくらいという開発フローすはすぐ来るんじゃないかなと思った。