0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

terraform チートシート

Posted at

🧩 Terraform 便利関数まとめ(主要カテゴリ別)

Terraform には、lookup() のように「map」「list」「string」「数値」などを安全・柔軟に扱うための便利なビルトイン関数がたくさんあります。
ここでは、カテゴリ別に体系的に整理します。Terraform を書く上で「実務で頻出&覚えると劇的に便利」なものを厳選しました。


🗺️ ① map / object / 構造体関連

関数 用途
lookup(map, key, default) mapから安全に値を取得 lookup(var.env, "tags", {})
merge(map1, map2, …) 複数mapを統合(後勝ち) merge(local.base, var.override)
keys(map) mapのキー一覧を取得(list形式) keys(var.environments)
values(map) mapの値一覧を取得(list形式) values(var.environments)
zipmap(keys, values) 2つのlistをmapに変換 zipmap(["a","b"], [1,2]) → {a=1,b=2}
tomap(value) listやobjectをmapに変換 tomap(local.obj)
coalesce(…) 最初の非null値を返す coalesce(var.tag_override, var.default_tag)
try(expr, default) 式が失敗したらdefaultを返す(lookupの上位互換) try(var.settings["value"], "default")

💡 ポイント

  • lookup() は存在チェック用。
  • try() は「エラーごとキャッチ」できるためより安全。

📋 ② list / set / 配列操作系

関数 用途
length(list) 要素数を返す length(var.subnets)
element(list, index) 指定位置の要素を取得(循環する) element(["a","b","c"], 4)"b"
index(list, value) 要素の位置を返す index(["a","b","c"], "b")1
contains(list, value) 含まれているか判定 contains(var.azs, "ap-northeast-1a")
concat(list1, list2, …) リストを結合 concat(var.a, var.b)
flatten(list) ネストしたリストを1階層にする flatten([[1,2],[3,4]])[1,2,3,4]
distinct(list) 重複要素を除外 distinct(["a","b","a"])["a","b"]
sort(list) ソート sort(["c","a","b"])["a","b","c"]
toset(list) listをsetに変換(重複除去) toset(["a","a","b"])
tolist(set) setをlistに変換 tolist(var.myset)
chunklist(list, size) 指定サイズで分割 chunklist([1,2,3,4,5], 2)[[1,2],[3,4],[5]]

💡 ポイント

  • flatten()distinct()concat() はモジュールで複数リソースを扱うときによく登場。

🔤 ③ string / テキスト操作系

関数 用途
join(delim, list) リストを区切り文字で結合 join(",", ["a","b"])"a,b"
split(delim, string) 文字列を区切ってリスト化 split(".", "a.b.c")["a","b","c"]
upper(string) 大文字化 upper("dev")"DEV"
lower(string) 小文字化 lower("PROD")"prod"
replace(string, old, new) 置換 replace("abc", "a", "z")"zbc"
regex(regex, string) 正規表現マッチで最初の結果を返す regex("[0-9]+", "ver123")"123"
regexall(regex, string) 全マッチ結果を返す regexall("[a-z]", "abc123")["a","b","c"]
format(fmt, args…) printf風フォーマット format("subnet-%03d", 5)"subnet-005"
trimspace(string) 前後の空白除去 trimspace(" hello ")"hello"
substr(string, offset, length) 部分文字列 substr("abcdef", 2, 3)"cde"

💡 ポイント

  • Terraform は YAML/JSON変換で文字列を多用するため、join / replace / format は必須レベル。

🧮 ④ 数値 / 条件 / 論理演算系

関数 用途
min(a, b, …) 最小値 min(3,5)3
max(a, b, …) 最大値 max(3,5)5
abs(num) 絶対値 abs(-5)5
ceil(num) 切り上げ ceil(3.2)4
floor(num) 切り捨て floor(3.9)3
coalesce(a, b, c) 最初の非null値 coalesce(null, "x")"x"
try(expr, fallback) エラーになったら fallback try(var.data[0], "none")
can(expr) 式が評価できるかboolで返す can(var.map["key"])true/false
ternary(cond, a, b) 条件演算子 var.flag ? "yes" : "no" と同義

💡 ポイント

  • Terraformには if文がないため、? :coalesce()try() が代わりになります。

🧱 ⑤ 型変換 / コレクションユーティリティ

関数 用途
tolist(any) 任意の値をlistに変換 tolist(var.myset)
toset(any) list→set変換 toset(["a","a","b"])
tomap(any) object→map変換 tomap(local.config)
tostring(any) 任意の型をstringに変換 tostring(var.number)
tonumber(string) stringをnumberに変換 tonumber("123")123
jsonencode(any) HCLをJSON文字列に変換 jsonencode(var.config)
jsondecode(string) JSON文字列をHCL値に変換 jsondecode(file("config.json"))

💡 ポイント

  • API構築やLambdaなど「JSON入出力」を扱うときに jsonencode/decode が非常に便利。

⏰ ⑥ 時間 / ランダム値系

関数 用途
timestamp() 現在のUTC時刻をISO8601形式で返す "2025-10-18T07:40:00Z"
uuid() ランダムUUIDを生成 "e7a2f1b8-..."
file(path) ファイルの内容を文字列で取得 file("user_data.sh")
filebase64(path) ファイルをbase64エンコードして取得 filebase64("cert.pem")

🔄 ⑦ for式 / フィルタリング / map操作系

構文 用途
[for x in list : expr] 各要素を変換してlist生成 [for n in [1,2,3] : n*2][2,4,6]
{for k,v in map : k => expr} 各要素を変換してmap生成 {for k,v in var.map : k => upper(v)}
if 条件 フィルタリング {for k,v in var.map : k => v if v.enabled}
for_each リソースやモジュールの繰り返し for_each = var.instances

💡 ポイント

  • Terraform は命令的言語ではないので、for式と関数を組み合わせてデータを加工するのが基本設計。

🧠 よく使う関数組み合わせパターン(実務で超便利)

目的 使用関数
mapにキーが存在しない場合に安全に取得 lookup() lookup(var.cfg, "region", "ap-northeast-1")
複数タグをまとめる merge() + lookup() merge(local.base, lookup(var.env,"tags",{}))
ネストlistをフラット化 flatten() flatten([aws_subnet.public, aws_subnet.private])
値の存在チェック contains() / can() contains(var.azs, "ap-northeast-1a")
複数mapを一括で結合 merge() + for merge(var.common, { for k,v in var.env : k => v })
JSON変換してLambdaへ渡す jsonencode() user_data = jsonencode(local.config)

✅ まとめ

カテゴリ 主な関数 主な用途
Map操作 lookup, merge, keys, values, zipmap, try 設定やタグのマージ・安全参照
List操作 flatten, distinct, concat, contains サブネットやリソース集合の加工
文字列操作 replace, join, split, format 名前生成・正規表現処理
型変換 tostring, tonumber, jsonencode/decode データ交換・構成管理
条件系 coalesce, try, can 柔軟なデフォルト処理
for式 [for ...], {for ...} 動的構築・filter処理
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?