HashiCorpは、新しいテストフレームワークを含むさまざまな新機能を備えたTerraform 1.6をリリースした。その他の改善点には、config-driven import、Terraform Cloud CLIワークフロー、およびAmazon S3バックエンドの変更が含まれている。このバージョンは、TerraformがBusiness Source License v1.1(BSL 1.1)の下でリリースされる最初のバージョンとなる。
このテストフレームワークは、Terraform configurationの機能を検証するテストの作成と実行を可能にしている。テストは、Terraformで使用されるHashiCorp Configuration Language(HCL)構文で記述される。一連の実行
ブロックは、さまざまな入力やprovider設定に対するアサーションを含む単体テストや統合テストを作成するために使用される。
以下の例では、入力変数をバケット名としてAWS S3バケットを作成している。
# main.tfprovider "aws" { region = "eu-central-1"}variable "bucket_prefix" { type = string}resource "aws_s3_bucket" "bucket" { bucket = "${var.bucket_prefix}-bucket"}output "bucket_name" { value = aws_s3_bucket.bucket.bucket}
以下のテストファイルは、バケットを作成するために planコマンドを実行し、バケット名が期待されるものと一致するかどうかを検証している。
# valid_string_concat.tftest.hclvariables { bucket_prefix = "test"}run "valid_string_concat" { command = plan assert { condition = aws_s3_bucket.bucket.bucket == "test-bucket" error_message = "S3バケット名が期待どおりではありませんでした" }}
run
ブロックは、applyとplanの両方を含むいくつかのフィールドとブロックをサポートしており、オプションとしてテストへの入力として変数、モジュール、プロバイダも指定できる。
テストは検証といくつかの微妙な点で異なる。検証はplanおよびapplyで実行されるが、テストはterraform test
でのみ実行される。ただし、testコマンドは既存の検証も実行する。検証はモジュールユーザに公開されるため、失敗メッセージはそれに合わせて作成する必要がある。
新しいテストフレームワークは、Terraformバージョン 0.15※で導入された実験的なtestコマンドを廃止し、置き換えている。v1.6.xアップグレードガイドが、実験的コマンドと最終コマンドの変更点レビューを提供している。
※訳者補足:バージョンの隔たりが大きかったので、念のためCHANGELOG 0.15.0を確認。"There is now a terraform test command, which is currently an experimental feature serving as part of the Module Testing Experiment." 確かに導入されている。
このリリースは、Terraform 1.5で導入されたconfig-driven import機能を拡張している。この機能は、既存のリソースをTerraformにインポートする手段を提供する。バージョン1.5では、importブロックのid
属性は静的な値のみをサポートしていた。今回のリリースでは、id
属性は文字列補間のサポートを含め、他の値を参照する式を受け付けるようになった。
import { # これでimport IDを変数を使用して指定できます id = var.bucket_name to = aws_s3_bucket.example} import { # aws_s3_bucket_versioningリソースはそのimport IDにAWSアカウントを含む id = "${var.bucket_name},${data.aws_caller_identity.current.account_id}" to = aws_s3_bucket_versioning.example}
Amazon S3リモートステートバックエンドも、AWS SDK および Terraform AWS providerとの連携が強化された。これには、いくつかの属性のネストされたブロックへの移動、環境変数のサポート、AWSサービス・エンドポイントのカスタマイズのためのいくつかの新しいオプションが含まれる。
Terraform Cloudのユーザーはクラウドにplanを保存して後でapplyできるようになった。この新しい実行モードは Terraform 1.6 CLI または Terraform Cloud APIで動作する。
このリリースに対するソーシャルメディア上の反応はさまざまだった。 多くのユーザーは、新しいテストフレームワークの追加を賞賛した。しかしながら、このリリースが最近のライセンス変更(BSL 1.1の使用)と重なったことに失望したユーザーもいた。
Terraform 1.6はGitHubから入手可能だ。リリースの詳細については、HashiCorpブログ、アップグレードガイド、および変更履歴から確認してほしい。