HashiCorpはインフラストラクチャ・アズ・コード言語であるTerraformのバージョン1.8をリリースした。このリリースではプロバイダー定義関数を導入している。これにより、計算スタイルのタスクを処理するカスタム関数をプロバイダ内で作成できるようになる。AWS、GCP、Kubernetesを含むいくつかのプロバイダーは、このリリースと同時に新しいプロバイダー定義関数を導入した。バージョン1.8では、リソースの種類を超えたリファクタリングの改善も導入されている。
プロバイダ定義関数は、呼び出し構文provider::provider_name::function_name()
を持つ任意のTerraform式で使用できる。これらの関数は、データの変換、データの解析、データの組み立て、バリデーションとアサーションの簡略化など、いくつかのタスクを実行できる。
Terraform 1.8のリリースと同時に、いくつかのTerraformプロバイダーがプロバイダー定義関数を含むように更新された。5.40リリースの Terraform AWSプロバイダには、ARN(Amazon Resource Names)を解析・構築するプロバイダ定義関数が追加された。例えば、arn_parseは指定されたリソースのアカウントIDを取得するのに使える。
# ECRリポジトリを作成するresource "aws_ecr_repository" "hashicups" { name = "hashicups" image_scanning_configuration { scan_on_push = true }} # ECRリポジトリのアカウントIDを出力する。hashicups_ecr_repository_account_id" { value = provider::aws::arn_parse(aws_ecr_repository.hashicups.arn).account_id}
Terraform Google Cloudプロバイダの 5.23リリースには、Terraform設定内で管理されていないリソースIDからリージョン、ゾーン、名前、プロジェクトを解析する機能が含まれている。
resource "google_cloud_run_service_iam_member" "example_run_invoker_jane" { member = "user:jane@example.com" role = "run.invoker" service = provider::google::name_from_id(var.example_cloud_run_service_id) location = provider::google::location_from_id(var.example_cloud_run_service_id) project = provider::google::project_from_id(var.example_cloud_run_service_id)}
Terraform Kubernetesプロバイダの 2.28リリースには、KubernetesマニフェストをTerraformにエンコードおよびデコードするためのプロバイダ定義関数が含まれている。
resource "kubernetes_manifest" "example" { manifest = provider::kubernetes::manifest_decode(file("${path.module}/manifest.yaml"))}
HashiCorp Terraform extension for Visual StudioCodeのバージョン2.30.0では、プロバイダ定義関数のシンタックスハイライトとオートコンプリートがサポートされている。
Terraformの最近のフォークであるOpenTofuは、プロバイダ定義関数のサポートを追加する予定であることを示している。ユーザーのjanosdebugsは OpenTofuのGitHubレポに「プロバイダ実装関数はTSC(技術運営委員会)に提示され、OpenTofu 1.8で計画されている」と投稿した。本稿執筆時点では、OpenTofuはバージョン1.6.2である。
このリリースでは、サポートされているリソースをリソースタイプ間で、より高速かつエラーの少ない方法で移動するための新機能も導入されている。これは移動されたブロックの動作を強化するもので、移動先のリソースタイプが移動元のリソースタイプから変換できると宣言している場合、異なるタイプのリソース間の移動をサポートする。プロバイダはこのサポートを追加することで、プロバイダ名の変更やリソースの分割など様々なユースケースに対応できる。
Terraform 1.8はGitHubまたはTerraform Cloudから入手可能だ。リリースの詳細はHashiCorpブログ、アップグレードガイド、変更履歴に記載されている。