terraform console — 式・関数をインタラクティブに試す

1. 概要

  • terraform consoleとは何か
  • 起動方法と基本操作
  • 変数・ローカル値・リソース属性の確認
  • 組み込み関数の動作確認
  • 式のデバッグに使う実践パターン

terraform consoleは、Terraformの式・関数・変数をインタラクティブに評価できるREPL(Read-Eval-Print Loop)です。関数の動作確認や複雑な式のデバッグに使います。


2. 起動と終了

$ terraform console

# 終了するには
> exit
または Ctrl+D

terraform consoleはカレントディレクトリの.tfファイルを読み込んでから起動します。terraform init済みの状態で実行してください。


3. 組み込み関数の確認

terraform consoleを使うと、関数の動作を手早く確認できます。

# 文字列関数
> join(", ", ["Tokyo", "Osaka", "Nagoya"])
"Tokyo, Osaka, Nagoya"

> split("-", "ap-northeast-1")
["ap", "northeast", "1"]

> format("web-%02d", 5)
"web-05"

> replace("My App", "/ /", "-")
"My-App"

> lower("HELLO WORLD")
"hello world"
# コレクション関数
> length(["a", "b", "c"])
3

> keys({dev = "t3.micro", prd = "t3.medium"})
["dev", "prd"]

> contains(["dev", "stg", "prd"], "prod")
false

> merge({a = 1}, {b = 2})
{
  "a" = 1
  "b" = 2
}
# 型変換
> toset(["a", "b", "a", "c"])
toset(["a", "b", "c"])   # 重複が除去される

> tolist(toset(["c", "a", "b"]))
["a", "b", "c"]   # ソートされる

4. 変数・ローカル値を確認する

.tfファイルで定義した変数・localsの値をconsoleで確認できます。

# main.tf
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 "instance_types" {
  description = "環境ごとのインスタンスタイプ"
  type        = map(string)
  default = {
    dev = "t3.micro"
    stg = "t3.small"
    prd = "t3.medium"
  }
}

locals {
  instance_type = lookup(var.instance_types, var.environment, "t3.micro")
  resource_prefix = "${var.environment}-myapp"
}
$ terraform console

> var.environment
"dev"

> var.instance_types
{
  "dev" = "t3.micro"
  "prd" = "t3.medium"
  "stg" = "t3.small"
}

> local.instance_type
"t3.micro"

> local.resource_prefix
"dev-myapp"

5. 複雑な式をデバッグする

for式・条件式・関数の組み合わせなど、複雑な式の動作確認に役立ちます。

# for式の動作確認
> [for k, v in {dev = "t3.micro", prd = "t3.medium"} : "${k}: ${v}"]
[
  "dev: t3.micro",
  "prd: t3.medium",
]

# 条件式
> var.environment == "prd" ? "t3.medium" : "t3.micro"
"t3.micro"

# 複数の関数を組み合わせた式
> join(", ", [for k in keys({dev = 1, prd = 2}) : upper(k)])
"DEV, PRD"

# cidr計算
> cidrsubnet("10.0.0.0/16", 8, 0)
"10.0.0.0/24"

> cidrsubnet("10.0.0.0/16", 8, 1)
"10.0.1.0/24"

6. -var オプションで変数を上書きする

$ terraform console -var="environment=prd"

> var.environment
"prd"

> local.instance_type
"t3.medium"
# tfvarsファイルを指定
$ terraform console -var-file="prd.tfvars"

7. -plan オプションで計画後の値を確認する

-plan オプションを使うと、terraform planを事前に実行した後の計画済み状態に対して式を評価できます。まだ作成されていないリソースの値も確認できます。

$ terraform console -plan

> aws_instance.web.id
(known after apply)

> aws_instance.web.ami
"ami-0abc1234..."

注意: -plan実行中はプロバイダーへのAPI呼び出しが行われる場合があります。externalデータソースなどは実際の外部コマンドを実行することがあるため注意してください。


8. スクリプトとして使う(非対話型)

terraform consoleにパイプで入力を渡すと、非対話型で使えます。最後のコマンドの出力のみが表示されます。

# 単一の式を評価
echo 'cidrsubnet("10.0.0.0/8", 8, 1)' | terraform console
# → "10.1.0.0/16"

# 複数コマンドを渡す(最後の結果のみ表示)
printf 'upper("hello")\nlower("WORLD")' | terraform console
# → "world"

9. terraform consoleを使うべき場面

場面確認方法
新しい組み込み関数の動作確認consoleで引数を変えながら試す
for式やsplat式のデバッグconsoleで式を評価する
cidr計算の確認cidrsubnetなどをconsoleで実行
variableのデフォルト値確認var.変数名で参照
localsの計算結果確認local.ローカル名で参照

10. 関連記事


11. まとめ

  • terraform consoleはTerraformのREPL — 関数・式・変数をインタラクティブに確認できる
  • 起動にはカレントディレクトリに.tfファイルが必要(terraform init済みの状態)
  • var.変数名local.ローカル名で設定値を確認できる
  • -var-var-fileで変数を上書きして異なる環境をシミュレートできる
  • 複雑なfor式・条件式のデバッグに非常に有効

動作確認バージョン: Terraform >= 1.9 公式ドキュメント: https://developer.hashicorp.com/terraform/cli/commands/console