🎉

Terraform v1.8.0でリリースされそうなプロバイダ独自関数を試す

2024/03/15に公開

はじめに

こんにちは! SDBのどいです。

2024年03月06日に、terraform v1.8のベータ版がプレリリースされましたね!🎉

https://github.com/hashicorp/terraform/releases/tag/v1.8.0-beta1

いくつか新機能がリリースされるようなので、先取りして試してみようと思います。
本記事では、新機能のうちプロバイダ独自関数について実際に試してみます。

🎉 新機能 🎉

provider独自関数を利用可能に

今まではTerraform標準の関数を利用できましたが、それに加えてプロバイダが独自関数を実装し利用できるようになります。
provider::provider_name::function_name()と記述することで、プロバイダが提供する独自関数を呼び出すことができます。

providerは固定のプレフィックスです。

provider_nameは、tfファイル内に定義したrequired_providersブロックに記述したプロバイダ名を指定します。
例えば、以下のようにAWS Providerを指定した場合、provider_nameawsになります。

terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.40.0"
    }
  }
}

function_nameはプロバイダが独自に定義した関数名を指定します。
AWS Providerの場合、ResourceやDataブロックと同様に、ドキュメントに関数の使用方法が記載されているので、そちらで確認できます。
v5.40.0時点では、以下の2つの関数が使用できます。

以降は、v5.40.0時点でリリースされている2つの関数を例に使い方を見ていきます。

arn_build

https://registry.terraform.io/providers/hashicorp/aws/latest/docs/functions/arn_build

arnを構成する先頭のarn以外の5つの要素(partition, service, region, account-id, resource-id)を引数に与えて、arnの文字列を生成する関数です。

main.tf
terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.40.0"
    }
  }
}

output "arn_build" {
  value = provider::aws::arn_build("aws", "iam", "", "***456789***", "user/doi")
}
% terraform plan

Changes to Outputs:
  + sg = "arn:aws:iam::***456789***:user/doi"

arn_parse

https://registry.terraform.io/providers/hashicorp/aws/latest/docs/functions/arn_parse

arnを引数に与えて、arnを構成する先頭のarn以外の5つの要素(partition, service, region, account-id, resource-id)を持つ辞書変数に変換してくれる関数です。

main.tf
terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.40.0"
    }
  }
}

output "arn_parse" {
  value = provider::aws::arn_parse("arn:aws:iam::***456789***:user/doi")
}
% terraform plan

Changes to Outputs:
  + arn_parse = {
      + account_id = "***456789***"
      + partition  = "aws"
      + region     = ""
      + resource   = "user/doi"
      + service    = "iam"
    }

もともとAWS Providerでは、aws_arnというData Sourceが提供されており、ARNのパース自体は可能でしたが、
一度Dataブロックを定義してからプロパティを参照するという手順を踏まなければいけませんでした。
arn_parse関数を使えばこのような手間が省けるかなと思います。

main.tf
terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.40.0"
    }
  }
}

data "aws_arn" "arn" {
  arn = "arn:aws:iam::***456789***:user/doi"
}

output "arn_data" {
  value = data.aws_arn.arn
}
Changes to Outputs:
  + arn_data = {
      + account   = "***456789***"
      + arn       = "arn:aws:iam::***456789***:user/doi"
      + id        = "arn:aws:iam::***456789***:user/doi"
      + partition = "aws"
      + region    = ""
      + resource  = "user/doi"
      + service   = "iam"
    }

まとめ

本記事では、terraform v1.8でリリース(されそうな)新機能のうち、プロバイダ独自関数の使用方法について紹介しました。
これからのv1.8の正式リリースに期待したいと思います。

ソーシャルデータバンク テックブログ

Discussion