1. 概要
abs— 絶対値を返すceil— 切り上げfloor— 切り捨てmax/min— 最大値・最小値pow— べき乗- 実際のユースケース
Terraformの数値関数は、EC2インスタンス数の計算・ストレージサイズの丸め・動的な割り当て数の計算など、インフラ構成値を動的に決定する場面で活躍します。
2. abs — 絶対値
abs(number)は数値の絶対値を返します。
# terraform consoleで確認
> abs(-5)
5
> abs(3.7)
3.7
> abs(0)
0
3. ceil / floor — 切り上げ・切り捨て
ceil(number)は切り上げ、floor(number)は切り捨てで整数を返します。
# terraform consoleで確認
> ceil(1.1)
2
> ceil(1.9)
2
> floor(1.9)
1
> floor(1.1)
1
インスタンス数の計算(切り上げ)
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"
}
variable "total_requests_per_second" {
description = "秒間リクエスト数"
type = number
default = 100
}
variable "requests_per_instance" {
description = "1インスタンスあたりの処理可能リクエスト数"
type = number
default = 30
}
locals {
# 必要なインスタンス数を切り上げで計算
# 例: 100rps ÷ 30rps/instance = 3.33 → ceil → 4台
required_instances = ceil(var.total_requests_per_second / var.requests_per_instance)
# 最低2台を保証
instance_count = max(local.required_instances, 2)
}
data "aws_ami" "amazon_linux_2023" {
most_recent = true
owners = ["amazon"]
filter {
name = "name"
values = ["al2023-ami-*-x86_64"]
}
}
resource "aws_instance" "web" {
count = local.instance_count
ami = data.aws_ami.amazon_linux_2023.id
instance_type = "t3.micro"
root_block_device {
volume_size = 20
volume_type = "gp3"
encrypted = true
}
tags = {
Name = "${var.environment}-web-${count.index + 1}"
Environment = var.environment
ManagedBy = "terraform"
}
}
4. max / min — 最大値・最小値
max(a, b, c, ...)は引数の最大値、min(a, b, c, ...)は最小値を返します。リストの場合はmax(list...)を使います。
# terraform consoleで確認
> max(1, 5, 3)
5
> min(1, 5, 3)
1
> max([10, 20, 5]...)
20
> min([10, 20, 5]...)
5
locals {
# スケーリング時の上下限を保証
desired_count = 5
min_count = 2
max_count = 10
# 下限・上限を超えないよう制限
safe_count = max(min(local.desired_count, local.max_count), local.min_count)
}
5. pow — べき乗
pow(base, exponent)はbaseのexponent乗を返します。
# terraform consoleで確認
> pow(2, 10)
1024
> pow(10, 3)
1000
locals {
# ストレージサイズを2のべき乗で計算
# base_gb = 4, factor = 3 → 4 * 2^3 = 32GB
base_gb = 4
scale_factor = 3
volume_size = pow(2, local.scale_factor) * local.base_gb
}
6. 関連記事
- sum / alltrue / anytrue — 集計関数 — リストの合計・論理演算
- parseint / signum / log — 高度な数値関数 — 高度な数値処理
- for_each の使い方 — 計算したカウントでリソースを作成
- for式 — リスト・mapを変換・フィルタリング
- 型システム入門 — string/number/bool/list/map/object
- locals(ローカル値)— DRYなコードを書く
7. まとめ
abs(n)— 絶対値。負の数を正に変換ceil(n)— 切り上げ。インスタンス数の計算に便利floor(n)— 切り捨てmax(a, b, ...)/min(a, b, ...)— 最大値・最小値。max(list...)でリストにも使えるpow(base, exp)— べき乗。ストレージサイズの計算などに使う
動作確認バージョン: Terraform >= 1.9 公式ドキュメント: https://developer.hashicorp.com/terraform/language/functions/abs