abs / ceil / floor / max / min / pow — 数値関数まとめ

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. 関連記事


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