【Terraform】よりスッキリ書くために組み込み関数を!(String Functions編)

10月 11, 2023

ご無沙汰しております!絶賛FF14にハマり込んでいる人です。


本日は記事のタイトルにもある通り、よりスッキリ見通しのいいterraformを書くために組み込み関数としてどのようなものが用意されているのかを把握しておこうと言う記事となっております。


苦労して書いた複数行や苦肉の策で書いた一文も、実は組み込み関数を利用すればもっとシンプルに解決できるかもしれないですよ!


そんなわけで早速公式が用意している関数リストをもとに確認してみます。今回は文字列の操作に利用するString Functionsに属する関数をみていきましょう。
https://developer.hashicorp.com/terraform/language/functions/

String Functions

名前の通り文字列を扱う関数たちです。公式には20もの関数が紹介されており、他のFunctionsよりも使用頻度は高いでしょう。その中でも特に利用頻度が高そうなものをピックアップしてみたいと思います。


endswith Functionは引数の文字列が特定のサフィックスを持つか検証する際に便利です。

endswith("hello world", "world")  //true

リソース名のサフィックスに特定の文字を含めておくことでNameタグから条件にマッチしたリソースだけを取り出して操作するといった使用方法が考えられます。ちなみにプレフィックスを判断したい場合は

startswith("hello world", "hello") //true

のようにstartswith Functionを利用すると良いでしょう。


format Functionは文字列に特定の文字列を加えることができます。

format("Hello, %s!", "Ander") //Hello, Ander!

パスやARNの指定などに便利そうです。


join Functionは文字列のlistを一つの文字列として結合することができます。

join(", ", ["foo", "bar", "baz"]) //foo, bar, baz

同じくパスやARNの指定などに便利そうです。ちなみにsplit Functionを使用すれば逆に区切ることもできます。

split(",", "foo,bar,baz")
// [
//   "foo",
//   "bar",
//   "baz",
// ]



lower, upper Functionは文字列を全て大文字、小文字に揃えます。

lower("HELLO") //hello
upper("hello") //HELLO

例えば環境変数のキーは大文字で指定していることが多いと思いますので、特定の値を取ってきてそのままupper Functionで環境変数のキーに指定するといったケースなど考えられそうです。


regex FunctionはString Functionsの中では最も利用されるのではないでしょうか。正規表現を利用した文字列の抽出などに利用します。既存のリソース名などから数字などを除いた文字列を抽出し別のリソース名に転用するなどのケースが考えられそうです。

regex("[a-z]+", "53453453.345345aaabbbccc23454") //aaabbbccc

regexall Functionを利用することで含まれる全ての文字列をリスト形式で抽出することも可能です。

regexall("[a-z]+", "1234abcd5678efgh9")
// [
//   "abcd",
//   "efgh",
// ]


replace関数を利用することで特的の文字列の置き換えが可能です。置き換えもとの文字列には正規表現も利用できるようですね。

replace("hello world", "/w.*d/", "everybody")  //hello everybody

特定リソースのNameを取り出し、一部置き換えをした上で新たなリソースを作成するなどのケースが考えられそうです。


substr Functionを利用すると文字列の特定の箇所から特定の長さの部分を抽出することが可能です。

substr("hello world", 1, 4) //ello
substr("hello world", -5, -1) //world

開始地点は0である点に注意してください。またマイナス数値を指定することで末尾から文字列を抽出することも可能です。


trim, trimprefix, trimsuffix, trimspace Functionはそれぞれ対象の文字列から切り取りを行う関数です。

trim("?!hello?!", "!?") //"hello"
trimprefix("helloworld", "hello") //world
trimsuffix("helloworld", "world") //hello
trimspace("  hello\n\n") //hello

trim functionは対象から特定の文字列を全て切り取ります。対してtrimprefix, trimsuffixは文頭、あるいは末尾から特定の文字列を切り取ります。trimspaceはその名の通りスペースを切り取ります。

まとめ

今回はterraformにデフォルトで組み込まれているString Functionsの中から有用そうなものをいくつかピックアップしてみました。


リソース名の指定や特定条件のリソース抽出など使用できるケースは多岐に渡りそうです。日頃からどんどん使用して快適なterraform Lifeを目指していきたいところですね!


以上、最後まで読んでいただきありがとうございました!

Terraform

Posted by CY