この記事は「terraform Advent Calendar 2023」の23日目の記事です!
terraform testとは
terraform 1.6で入ったtest機能はTerraform module を実際にplanやapplyをして動作を確信するための機能です。1.5まではexperimental features(実験的な機能)として提供されてきましたが1.6で正式リリースとなったようです。(軽く見てる感じ1.5の時のtestコードは動かなそうに見えてるのでアップデート後に修正が必要そうです。)
- 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に組み込まれていて人間は手直しするくらいという開発フローすはすぐ来るんじゃないかなと思った。