1. 概要
- ephemeral変数とは(Terraform 1.10+)
- ephemeralリソース / ephemeral output
- 通常のsensitiveとの違い
- 実際のユースケース(データベースパスワード・シークレット)
ephemeral(一時的)は、Terraform 1.10で導入された新しいコンセプトです。ephemeralな値はtfstateに一切記録されない点が通常のsensitiveとの最大の違いです。
2. ephemeral変数
ephemeral = trueを指定すると、その変数の値はtfstateに記録されません。apply実行中のみ存在する「一時的な値」として扱われます。
terraform {
required_version = ">= 1.10"
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0"
}
}
}
provider "aws" {
region = "ap-northeast-1"
}
variable "environment" {
description = "環境名"
type = string
default = "dev"
}
# ephemeral = true: stateに記録されない一時的な変数
variable "db_password" {
description = "データベースパスワード(stateに記録されない)"
type = string
ephemeral = true # tfstateに保存されない
}
# 通常のsensitive変数(stateには記録される・ただし暗号化)
variable "api_key" {
description = "APIキー(stateに記録される)"
type = string
sensitive = true
}
3. ephemeral値を使えるリソース
ephemeral値はtfstateに書き込まれないため、使用できる場所が制限されます。
# ✅ ephemeral変数を使えるリソース属性(write_only属性)
resource "aws_db_instance" "main" {
identifier = "${var.environment}-main"
engine = "postgres"
engine_version = "16"
instance_class = "db.t3.micro"
allocated_storage = 20
storage_encrypted = true
db_name = "myapp"
username = "admin"
# write_only属性: stateに記録されない(ephemeral変数を使用可能)
password = var.db_password # ephemeral変数OK
skip_final_snapshot = true
tags = {
Name = "${var.environment}-main"
Environment = var.environment
ManagedBy = "terraform"
}
}
4. ephemeralリソース(ephemeral resource)
Terraform 1.10ではephemeralリソースブロックも導入されました。stateに記録されない一時的なデータソースとして機能します。
# ephemeral リソース: stateに記録されないデータ取得
ephemeral "aws_secretsmanager_secret_version" "db_password" {
secret_id = "/${var.environment}/db/password"
}
resource "aws_db_instance" "main2" {
identifier = "${var.environment}-main2"
engine = "postgres"
engine_version = "16"
instance_class = "db.t3.micro"
allocated_storage = 20
storage_encrypted = true
db_name = "myapp"
username = "admin"
# Secrets Managerから取得したパスワードをephemeralで渡す
password = ephemeral.aws_secretsmanager_secret_version.db_password.secret_string
skip_final_snapshot = true
tags = {
Name = "${var.environment}-main2"
Environment = var.environment
ManagedBy = "terraform"
}
}
5. sensitiveとephemeralの違い
| 比較 | sensitive = true | ephemeral = true |
|---|---|---|
| tfstateへの保存 | 保存される(暗号化推奨) | 保存されない |
| planでの表示 | (sensitive value) | 非表示 |
| 使用できる場所 | ほぼどこでも | write_only属性のみ |
| Terraform version | 全バージョン | 1.10+ |
| ユースケース | 一般的な機密値 | パスワード・トークン(stateに残したくない値) |
6. 関連記事
- sensitive変数の使い方 — sensitiveとの基本的な違い
- issensitive / nonsensitive — sensitive値の操作
- tfstateを手動編集する危険性 — stateにsensitive値が残る問題
7. まとめ
ephemeral = true変数はtfstateに一切記録されない(sensitiveはstateに記録される)- ephemeral値はwrite_only属性(パスワードなど)のみに使用できる
ephemeralリソースブロックはstateに記録されないデータソース(Secrets Managerのパスワード取得に最適)- Terraform 1.10+の新機能で、データベースパスワードをstateに残さないために設計された
動作確認バージョン: Terraform >= 1.10 公式ドキュメント: https://developer.hashicorp.com/terraform/language/values/variables#ephemeral-variables