0
0
Terraformcloud~5 mins

File functions (file, templatefile) in Terraform - Commands & Configuration

Choose your learning style9 modes available
Introduction
Sometimes you need to use the contents of a file inside your Terraform configuration. The file and templatefile functions help you read files and use their content or templates to create dynamic configurations.
When you want to include a static configuration file content inside your Terraform resource.
When you need to generate a configuration file from a template with variables filled in.
When you want to keep your Terraform code clean by separating large text blocks into files.
When you want to reuse the same template with different values for multiple resources.
When you want to manage scripts or config files that your infrastructure needs.
Config File - main.tf
main.tf
variable "app_name" {
  type    = string
  default = "my-app"
}

variable "port" {
  type    = number
  default = 8080
}

resource "local_file" "static_config" {
  filename = "static_config.txt"
  content  = file("static_config.txt")
}

resource "local_file" "templated_config" {
  filename = "templated_config.txt"
  content  = templatefile("config_template.txt", { app_name = var.app_name, port = var.port })
}

This Terraform file defines two variables: app_name and port.

It creates two local files using the local_file resource:

  • static_config: reads the entire content of static_config.txt using the file function and writes it to a file.
  • templated_config: uses the templatefile function to read config_template.txt, replace variables app_name and port with values, and writes the result to a file.

This shows how to use both file functions to manage file contents and templates in Terraform.

Commands
Initialize the Terraform working directory to download required providers and set up the environment.
Terminal
terraform init
Expected OutputExpected
Initializing the backend... Initializing provider plugins... - Finding latest version of hashicorp/local... - Installing hashicorp/local v2.3.0... - Installed hashicorp/local v2.3.0 (signed by HashiCorp) Terraform has been successfully initialized! You may now begin working with Terraform. Try running "terraform plan" to see any changes that are required for your infrastructure.
Apply the Terraform configuration to create the local files with content from file and templatefile functions.
Terminal
terraform apply -auto-approve
Expected OutputExpected
local_file.static_config: Creating... local_file.static_config: Creation complete after 0s [id=static_config.txt] local_file.templated_config: Creating... local_file.templated_config: Creation complete after 0s [id=templated_config.txt] Apply complete! Resources: 2 added, 0 changed, 0 destroyed.
-auto-approve - Skip interactive approval to apply changes immediately
Show the content of the static file that was read and written by the file function.
Terminal
cat static_config.txt
Expected OutputExpected
This is a static configuration file. It contains fixed settings for the app.
Show the content of the templated file generated by the templatefile function with variables replaced.
Terminal
cat templated_config.txt
Expected OutputExpected
Application Name: my-app Listening Port: 8080
Key Concept

If you remember nothing else from this pattern, remember: use file() to read static file content and templatefile() to fill templates with variables inside Terraform.

Common Mistakes
Using file() when you need variable substitution inside the file content.
file() reads the file as-is without replacing variables, so your template variables remain unchanged.
Use templatefile() with a variables map to replace placeholders in the file content.
Providing incorrect file paths to file() or templatefile().
Terraform will fail to find the file and error out during plan or apply.
Ensure the file path is relative to the Terraform root directory or provide an absolute path.
Not defining variables used in templatefile() leading to errors.
Terraform cannot replace undefined variables and will fail.
Declare all variables used in the templatefile() call in your Terraform configuration.
Summary
Use the file() function to read the full content of a static file into Terraform.
Use the templatefile() function to read a file and replace variables with values.
Apply Terraform to create or update files with the desired content using these functions.