1. 概要
chomp— 末尾の改行を除去trimspace— 前後の空白を除去trim— 指定した文字を前後から除去trimprefix/trimsuffix— プレフィックス・サフィックスを除去- 実際のユースケース
Terraformの文字列トリム関数は、外部データの読み込みや変数値の前処理で活躍します。特にファイルから読み込んだスクリプトの改行処理や、動的に生成したリソース名の余分な記号の除去に便利です。
2. chomp — 末尾の改行を除去
chomp(string)は文字列末尾の改行文字(\n・\r\n)を取り除きます。
# terraform consoleで確認
> chomp("hello\n")
"hello"
> chomp("hello\r\n")
"hello"
> chomp("hello")
"hello"
ファイルから読み込んだホスト名の改行を除去する
terraform {
required_version = ">= 1.9"
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0"
}
}
}
provider "aws" {
region = "ap-northeast-1"
}
variable "environment" {
description = "環境名"
type = string
default = "dev"
}
locals {
# ファイルに書かれたホスト名の末尾改行を除去
# db_host.txt の内容: "mydb.cluster.rds.amazonaws.com\n"
db_host = chomp(file("${path.module}/db_host.txt"))
# テンプレートから生成したNginx設定の末尾改行を整理
nginx_conf = chomp(templatefile("${path.module}/nginx.conf.tpl", {
server_name = "example.com"
}))
}
data "aws_ami" "amazon_linux_2023" {
most_recent = true
owners = ["amazon"]
filter {
name = "name"
values = ["al2023-ami-*-x86_64"]
}
}
resource "aws_instance" "web" {
ami = data.aws_ami.amazon_linux_2023.id
instance_type = "t3.micro"
user_data = base64encode(local.nginx_conf)
root_block_device {
volume_size = 20
volume_type = "gp3"
encrypted = true
}
tags = {
Name = "${var.environment}-web"
Environment = var.environment
ManagedBy = "terraform"
}
}
3. trimspace — 前後の空白を除去
trimspace(string)は文字列の先頭と末尾にある空白(スペース・タブ・改行)をすべて除去します。
# terraform consoleで確認
> trimspace(" hello ")
"hello"
> trimspace("\n hello\n ")
"hello"
> trimspace("hello")
"hello"
locals {
# 変数に余分な空白が混入している場合に整理
raw_bucket_name = " my-app-bucket "
bucket_name = trimspace(local.raw_bucket_name) # "my-app-bucket"
}
4. trim — 指定した文字を前後から除去
trim(string, cutset)は文字列の先頭と末尾から、cutsetに含まれる文字をすべて除去します。
# terraform consoleで確認
> trim("/path/to/dir/", "/")
"path/to/dir"
> trim("***hello***", "*")
"hello"
> trim(" /hello/ ", "/ ")
"hello"
locals {
# パス文字列から先頭・末尾のスラッシュを除去
raw_path = "/api/v1/users/"
clean_path = trim(local.raw_path, "/") # "api/v1/users"
}
5. trimprefix / trimsuffix — プレフィックス・サフィックスを除去
trimprefix(string, prefix)は文字列の先頭から指定したプレフィックスを除去します。trimsuffix(string, suffix)は末尾から除去します。プレフィックス・サフィックスが存在しない場合は元の文字列をそのまま返します。
# terraform consoleで確認
> trimprefix("dev-myapp", "dev-")
"myapp"
> trimprefix("prd-myapp", "dev-")
"prd-myapp" # プレフィックスが一致しない場合はそのまま
> trimsuffix("myapp-blue", "-blue")
"myapp"
> trimsuffix("myapp-green", "-blue")
"myapp-green" # サフィックスが一致しない場合はそのまま
variable "environment" {
type = string
default = "dev"
}
variable "service_name" {
type = string
default = "dev-myapp" # 環境プレフィックスが付いている
}
locals {
# "dev-" プレフィックスを取り除いてサービス名だけ取り出す
base_name = trimprefix(var.service_name, "${var.environment}-")
}
6. 比較表
| 関数 | 動作 | ユースケース |
|---|---|---|
chomp(str) | 末尾の改行のみ除去 | ファイル読み込み後の改行整理 |
trimspace(str) | 前後のすべての空白を除去 | 外部データの前処理 |
trim(str, cutset) | 前後から指定文字を除去 | パスのスラッシュ除去など |
trimprefix(str, prefix) | 先頭のプレフィックスを除去 | 環境名プレフィックスの除去 |
trimsuffix(str, suffix) | 末尾のサフィックスを除去 | 拡張子や色名の除去 |
7. 関連記事
- upper / lower / title / substr — 文字列ケース変換 — 大文字小文字変換
- startswith / endswith / regex / regexall — 文字列のマッチング
- file / fileexists / fileset の使い方 — ファイルから文字列を読み込む
8. まとめ
chomp(str)— 末尾の改行を除去。file()で読み込んだ内容の整理に定番trimspace(str)— 前後のすべての空白(スペース・タブ・改行)を除去trim(str, cutset)— 前後から指定した文字セットの文字を除去trimprefix(str, prefix)— 先頭のプレフィックスを除去(一致しない場合はそのまま)trimsuffix(str, suffix)— 末尾のサフィックスを除去(一致しない場合はそのまま)
動作確認バージョン: Terraform >= 1.9 公式ドキュメント: https://developer.hashicorp.com/terraform/language/functions/chomp