Skip to main content

Working with Ephemeral Values

1. Understanding Ephemeral Values

Property Description Usage
ephemeral Indicates that a value is temporary and should not be stored in state ephemeral = true

Example: Defining Ephemeral Values

resource "aws_instance" "example" {
  ami           = data.aws_ami.ubuntu.id
  instance_type = "t2.micro"

  ephemeral = true
}
Note: Ephemeral values are not persisted in Terraform's state file and are recalculated on every run.

2. Using Ephemeral Variables

Property Description Usage
ephemeral Defines a variable that is not stored in state
variable "example" {
  type = string
  ephemeral = true
}

Example: Defining an Ephemeral Variable

variable "temp_token" {
  type = string
  ephemeral = true
}
Note: Ephemeral variables are useful for sensitive data that should not be persisted in state files.

3. Using Ephemeral Outputs

Property Description Usage
ephemeral Indicates that the output is ephemeral and will not be stored in state
output "ephemeral_output" {
  value = "temporary_value"
  ephemeral = true
}

Example: Defining an Ephemeral Output

output "temp_data" {
  value = data.external.temp_data.result
  ephemeral = true
}
Note: Ephemeral outputs are useful for temporary data that should not persist in state files.
Warning: Ephemeral outputs are not available in state files and cannot be referenced by other resources.

4. Managing Ephemeral Resources

Property Description Default
count Number of instances to create 1
for_each Map or set of strings to iterate over none
depends_on List of resources this resource depends on none
lifecycle Configuration for lifecycle rules none

Example: Using for_each with ephemeral resources

resource "aws_instance" "web" {
  for_each = var.instance_types

  ami           = data.aws_ami.ubuntu.id
  instance_type = each.value

  tags = {
    Name = "web-${each.key}"
  }
}

Example: Using lifecycle rules to manage ephemeral resources

resource "aws_s3_bucket" "temp_bucket" {
  bucket = "temporary-bucket-${random_string.suffix.result}"

  lifecycle {
    prevent_destroy = true
  }
}
Note: Ephemeral resources are typically used for temporary infrastructure that should not persist after the Terraform state is destroyed.

5. Using Ephemeral Data Sources

Ephemeral data sources in Terraform allow you to reference values that are not stored in state, making them useful for temporary or runtime-only data.

Property Description Example
type Must be set to ephemeral
data "aws_ami" "latest" {
  type = "ephemeral"
}
read Defines the read operation logic (optional)
read = {
  value = "runtime_value"
}

Example: Using Ephemeral Data Source for Runtime Values

data "ephemeral" "runtime_info" {
  read = {
    value = "current_timestamp"
  }
}

resource "aws_instance" "example" {
  ami           = data.aws_ami.latest.id
  instance_type = "t2.micro"
  tags = {
    runtime_value = data.ephemeral.runtime_info.value
  }
}
Note: Ephemeral data sources are not persisted in state and should be used for runtime-only values.

6. Handling Ephemeral Provider Configuration

Property Description Values Notes
provider Defines the ephemeral provider aws, azure, gcp Must match the provider name in your configuration
alias Unique alias for the provider instance test, staging Required when using multiple provider instances
region Region where the ephemeral resources are created us-east-1, eu-west-1 Must be a valid AWS region

Example: Ephemeral Provider Configuration

provider "aws" {
  alias  = "ephemeral"
  region = "us-east-1"
}

resource "aws_instance" "ephemeral_instance" {
  provider = aws.ephemeral
  ami           = "ami-12345678"
  instance_type = "t2.micro"
}
Note: Ephemeral providers are typically used for testing or temporary environments where resources are not intended to persist.

7. Comparing Ephemeral vs Sensitive

Feature Ephemeral Sensitive
Purpose Prevents state persistence of a value Prevents logging and display of a value
State Storage false (value not stored in state) true (value stored in state)
Logging Value is logged if visible in output Value is masked in logs and UI
Use Case Temporary values like random IDs or timestamps Secrets like passwords, tokens, keys
Example
resource "random_id" "temp" {
  byte_length = 8
  keepers = {
    timestamp = timestamp()
  }
}
resource "aws_secret_manager_secret" "db_password" {
  name = "prod-db-password"
  secret_string = "secret123"
  sensitive = true
}

8. Using Ephemeral Values in Modules

Ephemeral values in Terraform modules allow you to define values that are computed at runtime but not stored in the state, making them useful for temporary or sensitive data.

Property Description Usage
ephemeral Flag to mark a value as ephemeral ephemeral = true

Example: Defining an Ephemeral Value in a Module

variable "temp_secret" {
  type = string
  ephemeral = true
}

output "temp_value" {
  value = var.temp_secret
  sensitive = true
}
Note: Ephemeral values are not persisted in the Terraform state file, which makes them ideal for sensitive or temporary data that should not be stored.

9. Understanding Ephemeral Limitations

Limitation Description Impact
No State Persistence Ephemeral values are not stored in Terraform state, making them unavailable for future operations or reference. Values cannot be used in subsequent Terraform runs or referenced by other resources.
Computed Only Ephemeral values are computed at runtime and cannot be set directly or configured in configuration files. Cannot be used for static configuration or predefined values.
No Diff Tracking Terraform does not track changes to ephemeral values, so they do not affect plan or apply operations. Changes in ephemeral values do not trigger resource updates or diffs.
Limited to Functions Ephemeral values can only be created using Terraform functions and expressions, not from external sources. Cannot integrate with external systems or data sources directly.
Note: Ephemeral values are useful for runtime computations but should not be relied upon for persistent configuration or state management.

10. Implementing Ephemeral Patterns

Example: Using ephemeral values in a data source

data "aws_ami" "latest" {
  most_recent = true
  filter {
    name   = "name"
    values = ["ubuntu/images/ubuntu-20.04/amd64/server-20.04"]
  }
  filter {
    name   = "virtualization-type"
    values = ["hvm"]
  }
}
Property Description Usage
most_recent Boolean to select the most recent AMI true or false
filter.name Name of the filter to apply String value like "name"
filter.values List of values to match the filter Array of strings
Note: Ephemeral values in Terraform are useful for dynamically fetching data at runtime, such as the latest AMI or region-specific resources.

Example: Using ephemeral values in a resource

resource "aws_instance" "web" {
  ami           = data.aws_ami.latest.id
  instance_type = "t3.micro"
}

Key Points

  • Ephemeral values are fetched at runtime, not stored in state.
  • They are useful for resources that change frequently or depend on external data.
  • Use data blocks to define ephemeral values.

Was this article helpful?