» Environment Variables

Terraform refers to a number of environment variables to customize various aspects of its behavior. None of these environment variables are required when using Terraform, but they can be used to change some of Terraform's default behaviors in unusual situations, or to increase output verbosity for debugging.

» TF_LOG

If set to any value, enables detailed logs to appear on stderr which is useful for debugging. For example:

export TF_LOG=TRACE

To disable, either unset it or set it to empty. When unset, logging will default to stderr. For example:

export TF_LOG=

For more on debugging Terraform, check out the section on Debugging.

» TF_LOG_PATH

This specifies where the log should persist its output to. Note that even when TF_LOG_PATH is set, TF_LOG must be set in order for any logging to be enabled. For example, to always write the log to the directory you're currently running terraform from:

export TF_LOG_PATH=./terraform.log

For more on debugging Terraform, check out the section on Debugging.

» TF_INPUT

If set to "false" or "0", causes terraform commands to behave as if the -input=false flag was specified. This is used when you want to disable prompts for variables that haven't had their values specified. For example:

export TF_INPUT=0

» TF_VAR_name

Environment variables can be used to set variables. The environment variables must be in the format TF_VAR_name and this will be checked last for a value. For example:

export TF_VAR_region=us-west-1
export TF_VAR_ami=ami-049d8641
export TF_VAR_alist='[1,2,3]'
export TF_VAR_amap='{ foo = "bar", baz = "qux" }'

For more on how to use TF_VAR_name in context, check out the section on Variable Configuration.

» TF_CLI_ARGS and TF_CLI_ARGS_name

The value of TF_CLI_ARGS will specify additional arguments to the command-line. This allows easier automation in CI environments as well as modifying default behavior of Terraform on your own system.

These arguments are inserted directly after the subcommand (such as plan) and before any flags specified directly on the command-line. This behavior ensures that flags on the command-line take precedence over environment variables.

For example, the following command: TF_CLI_ARGS="-input=false" terraform apply -force is the equivalent to manually typing: terraform apply -input=false -force.

The flag TF_CLI_ARGS affects all Terraform commands. If you specify a named command in the form of TF_CLI_ARGS_name then it will only affect that command. As an example, to specify that only plans never refresh, you can set TF_CLI_ARGS_plan="-refresh=false".

The value of the flag is parsed as if you typed it directly to the shell. Double and single quotes are allowed to capture strings and arguments will be separated by spaces otherwise.

» TF_DATA_DIR

TF_DATA_DIR changes the location where Terraform keeps its per-working-directory data, such as the current remote backend configuration.

By default this data is written into a .terraform subdirectory of the current directory, but the path given in TF_DATA_DIR will be used instead if non-empty.

In most cases it should not be necessary to set this variable, but it may be useful to do so if e.g. the working directory is not writable.

The data directory is used to retain data that must persist from one command to the next, so it's important to have this variable set consistently throughout all of the Terraform workflow commands (starting with terraform init) or else Terraform may be unable to find providers, modules, and other artifacts.

» TF_IN_AUTOMATION

If TF_IN_AUTOMATION is set to any non-empty value, Terraform adjusts its output to avoid suggesting specific commands to run next. This can make the output more consistent and less confusing in workflows where users don't directly execute Terraform commands, like in CI systems or other wrapping applications.

This is a purely cosmetic change to Terraform's human-readable output, and the exact output differences can change between minor Terraform versions.

For more details see Running Terraform in Automation.