自由気ままに書いちゃおう

好きなことをつらつらと・・・

【Terraform】(初心者向け)よく使う関数とメタ引数_その2

以下記事の続きとなり、その2です。

www.guri2o1667.work

よく使うfunction/MetaArguments

1.endswith

endswith関数は、指定された文字列が特定のサフィックス(接尾辞)で終わるかどうかを判定します。

この例では、local.filenameが".txt"で終わるかどうかを確認しています。

locals {
  filename = "example.txt"
  is_txt_file = endswith(local.filename, ".txt")
}

2.startswith

startswith関数は、指定された文字列が特定のプレフィックス(接頭辞)で始まるかどうかを判定します。

この例では、local.pathが"/home/"で始まるかどうかを確認しています。

locals {
  path = "/home/user/example.txt"
  is_home_directory = startswith(local.path, "/home/")
}

3.format

format関数は、指定された書式に従って文字列をフォーマットします。

この例では、ユーザー名を挨拶文に埋め込んでいます。

locals {
  user = "testuser"
  greeting = format("Hello, %s!", local.user) # 
}

4.merge

merge関数は、複数のマップを一つに統合します。

この例では、デフォルトのタグとリソース固有のタグを組み合わせています。

locals {
  default_tags = {
    Environment = "Development"
  }
  resource_tags = {
    Project = "Terraform Demo"
  }
  combined_tags = merge(local.default_tags, local.resource_tags)
}

5.lower / uppper

lower関数は、文字列を全て小文字に変換します。upper関数は逆に全て大文字に変換します。

この例では、文字列を小文字または大文字に変換しています。

locals {
  original_text = "Terraform AWS"
  lower_text = lower(local.original_text) # "terraform aws"
  upper_text = upper(local.original_text) # "TERRAFORM AWS"
}

6.regex / regexall

regex関数は、正規表現に基づいて文字列から特定の部分を抽出します。regexallは一致するすべての部分を抽出します。

この例では、ログエントリから特定の数字を抽出しています。

locals {
  log_entry = "Error: Invalid value at line 42"
  error_line = regex("line ([0-9]+)", local.log_entry) # ["line 42", "42"]
  all_numbers = regexall("[0-9]+", local.log_entry) # ["42"]
}

7. replace

replace関数は、文字列内の特定の部分を別の文字列で置き換えます。

この例では、URLのドメイン部分を置き換えています。

locals {
  original_url = "https://oldsite.example.com"
  updated_url = replace(local.original_url, "oldsite", "newsite") # "https://newsite.example.com"
}

8.substr

substr関数は、文字列の指定された範囲のサブストリングを返します。

この例では、文字列の特定の部分を抽出しています。

locals {
  full_string = "Hello Terraform"
  substring = substr(local.full_string, 6, 9) # "Terraform"
}

9. trim / trimprefix / trimsuffix / trimspace

trimは指定されたセットの文字を文字列の両端から取り除きます。

trimprefixとtrimsuffixはそれぞれ文字列の始めまたは終わりから特定の文字列を取り除きます。

trimspaceは文字列の両端の空白を取り除きます。

この例では、特定の文字や空白を文字列から取り除いています。

locals {
  padded_string = "  Terraform  "
  trimmed = trimspace(local.padded_string) # "Terraform"
  prefix_string = "Hello Terraform"
  without_prefix = trimprefix(local.prefix_string, "Hello ") # "Terraform"
  suffix_string = "Terraform World"
  without_suffix = trimsuffix(local.suffix_string, " World") # "Terraform"
}

10. can

can関数は、指定された式がエラーなしで評価できるかどうかを判定し、ブール値を返します。

この例では、local.dataマップに特定のキーが存在するかどうかをチェックしています。

locals {
  padded_string = "  Terraform  "
  trimmed = trimspace(local.padded_string) # "Terraform"
  prefix_string = "Hello Terraform"
  without_prefix = trimprefix(local.prefix_string, "Hello ") # "Terraform"
  suffix_string = "Terraform World"
  without_suffix = trimsuffix(local.suffix_string, " World") # "Terraform"
}

11. template

この例では、template_fileデータソースを使用しています。

これはtemplate関数を使って動的に文字列を生成する方法です。

template属性では、埋め込み文字列リテラル(<<-EOT と EOT で囲まれた部分)を使用しています。

この中に${user_name}と${user_role}というプレースホルダーがあり、vars属性では、これらのプレースホルダーに代入する変数の値を定義しています。

この例では、localsブロックで定義された変数を使用しています。

outputブロックでは、レンダリングされたテンプレートの内容を出力しています。この場合、ユーザー名と役割が挿入された挨拶文が生成されます。

locals {
  user_name = "John Doe"
  user_role = "Developer"
}

data "template_file" "example" {
  template = <<-EOT
  Hello, ${user_name}!
  Your role is: ${user_role}.
  EOT

  vars = {
    user_name = local.user_name
    user_role = local.user_role
  }
}

output "rendered_template" {
  value = data.template_file.example.rendered
}

以上です。