18.2K Views
October 23, 23
スライド概要
Terraform活用大全 - IaCの今。 Lunch LT ( https://findy.connpass.com/event/298972/ ) の発表資料
トイプードルを飼い始めました。
Terraform Terraform Lunch LT に test コマンドがやってきた 活用大全 | IaCの今。 2023.10.25 by Koki Sato @koki_develop
自己紹介 佐藤 光輝 株式会社 学習 部 ソフトウェアエンジニア Classi PMF @koki-develop @koki_develop @kou_pg_0131 by Koki Sato @koki_develop
アジェンダ に test コマンドがやってきた! 2. 基本的な使い方 3. できること 4. まとめ 1. Terraform by Koki Sato @koki_develop
Terraform by Koki Sato @koki_develop に test コマンドがやってきた!
Terraform に test コマンドがやってきた! 最近アツいアップデートが多い Terraform ( 一部抜粋 ) v1.4 null_resource 加 v1.5 を置き換えるビルトインの ブロック追加 ブロック追加 既存リソースからの HCL 生成機能追加 import check by Koki Sato @koki_develop terraform_data リソース追
Terraform に test コマンドがやってきた! そして最近リリースされた Terraform v1.6 HashiCorp Blog Terraform 1.6 adds a test framework for enhanced code validation コマンド追加 ← 今日紹介する機能 ブロックの に Expression を指定できるようになった ( 一部抜粋 ) test import by Koki Sato @koki_develop id
基本的な使い方 by Koki Sato @koki_develop
基本的な使い方 テストの書き方 例えばこんな Terraform コードがある場合 # main.tf バケットを作成する # S3 resource "aws_s3_bucket" "main" { bucket = "example-bucket" } by Koki Sato @koki_develop
基本的な使い方 テストの書き方 テストファイルは 拡張子で作成する テストの内容は ブロックに記述する .tftest.hcl run # main.tftest.hcl run "example_test" { # `command = apply` command = plan assert { # attribute # S3 condition = aws_s3_bucket.main.bucket == "example-bucket" error_message = " " } } にすると実際にリソースを作成して検証することができる リソースの この例の場合は by Koki Sato @koki_develop をテストする バケット名をテストしている 失敗したときのエラーメッセージ
基本的な使い方 テストを実行する terraform test でテストを実行する $ terraform test main.tftest.hcl... in progress run "example_test"... pass main.tftest.hcl... tearing down main.tftest.hcl... pass かんたん!! by Koki Sato @koki_develop
できること by Koki Sato @koki_develop
できること テストファイル用のディレクトリを使用する テストファイルは tests/ ディレクトリにまとめることもできる . ├── main.tf └── tests/ └── main.tftest.hcl ディレクトリ名は -test-directory フラグで指定することもできる ディレクトリをテストファイル用ディレクトリとして指定する例 # `my_tests/` $ terraform test -test-directory=my_tests by Koki Sato @koki_develop
できること 変数を設定する 例えばこんな example_value # main.tf variable "example_value" { type = string } by Koki Sato @koki_develop 変数がある場合
できること 変数を設定する テスト内では variables ブロックを使用して変数を設定することができる # main.tftest.hcl 変数の値を設定 # variables { example_value = "test value" } run "example_test" { command = plan assert { condition = var.example_value == "test value" error_message = " " } } 失敗したときのエラーメッセージ by Koki Sato @koki_develop
できること 変数を設定する run ブロックごとに変数を設定することもできる # main.tftest.hcl run "example_test" { # `run` variables { example_value = "customized value" } ブロックの内側で変数を設定 command = plan assert { condition = var.example_value == "customized value" error_message = " " } 失敗したときのエラーメッセージ } by Koki Sato @koki_develop
できること 変数を設定する 他にも、通常の変数と同じように次の方法も使える 環境変数 , ファイル , ファイル , フラグ TF_VAR_* terraform.tfvars *.auto.tfvars -var -var-file by Koki Sato @koki_develop terraform.tfvars.json *.auto.tfvars.json
できること Custom Conditions と組み合わせて使う や み合わせて使うことができる 失敗パターンもテストできる Input Variable Validation by Koki Sato @koki_develop check ブロック等の Custom Conditions と組
できること Custom Conditions と組み合わせて使う 例えばこんな変数がある場合 variable "example_value" { type = number 偶数のみ許可 # validation { condition = var.example_value % 2 == 0 error_message = "must be even number" } } by Koki Sato @koki_develop
できること Custom Conditions と組み合わせて使う の が失敗することを確認する # var.example_value validation run "one" { command = plan variables { example_value = 1 # } expect_failures = [var.example_value] } 変数の値を設定 の # var.example_value validation run "two" { command = plan variables { example_value = 2 # } } が成功することを確認する 変数の値を設定 by Koki Sato @koki_develop
できること Custom Conditions と組み合わせて使う 都度手作業で変数を設定 ~ 実行して検証する、みたいな ことが不要になった 特に共用モジュールの開発者にとっては入力値の検証を厳密且つ宣言的に テストできるようになったのは大きい terraform plan by Koki Sato @koki_develop
できること 他にもテスト内で次のようなことができる プロバイダの設定を上書きする の値を検証する Data Source を読み込む モジュールを読み込む などなど output by Koki Sato @koki_develop
まとめ by Koki Sato @koki_develop
まとめ 今回の機能追加によって、 Terraform コードに対するテスト導入のハード ルが一気に低くなった Terraform のバージョンを 1.6 以上にして ファイルを作 るだけ! テスト用のディレクトリにまとめることもできるので、ファイルが散ら かることもない HCL で書ける = 新しい記法を覚える必要がない → Terraform のテストを小さく始めることができるようになった *.tftest.hcl by Koki Sato @koki_develop
参考資料 Terraform 1.6 adds a test framework for enhanced code validation Write Terraform Tests | Terraform | HashiCorp Developer Tests - Configuration Language | Terraform | HashiCorp Developer Testing Terraform - Terraform CLI | Terraform | HashiCorp Developer by Koki Sato @koki_develop