Command: output

The terraform output command is used to extract the value of an output variable from the state file.

Usage

Usage: terraform output [options] [NAME]

With no additional arguments, output will display all the outputs for the root module. If an output NAME is specified, only the value of that output is printed.

The command-line flags are all optional. The following flags are available:

Examples

These examples assume the following Terraform output snippet.

output "instance_ips" {
  value = aws_instance.web.*.public_ip
}

output "lb_address" {
  value = aws_alb.web.public_dns
}

output "password" {
  sensitive = true
  value = var.secret_password
}

To list all outputs:

$ terraform output
instance_ips = [
  "54.43.114.12",
  "52.122.13.4",
  "52.4.116.53"
]
lb_address = "my-app-alb-1657023003.us-east-1.elb.amazonaws.com"
password = <sensitive>

Note that outputs with the sensitive attribute will be redacted:

$ terraform output password
password = <sensitive>

To query for the DNS address of the load balancer:

$ terraform output lb_address
"my-app-alb-1657023003.us-east-1.elb.amazonaws.com"

To query for all instance IP addresses:

$ terraform output instance_ips
instance_ips = [
  "54.43.114.12",
  "52.122.13.4",
  "52.4.116.53"
]

Use in automation

The terraform output command by default displays in a human-readable format, which can change over time to improve clarity.

For scripting and automation, use -json to produce the stable JSON format. You can parse the output using a JSON command-line parser such as jq:

$ terraform output -json instance_ips | jq -r '.[0]'
54.43.114.12

For the common case of directly using a string value in a shell script, you can use -raw instead, which will print the string directly with no extra escaping or whitespace.

$ terraform output -raw lb_address
my-app-alb-1657023003.us-east-1.elb.amazonaws.com

The -raw option works only with values that Terraform can automatically convert to strings. Use -json instead, possibly combined with jq, to work with complex-typed values such as objects.

Terraform strings are sequences of Unicode characters rather than raw bytes, so the -raw output will be UTF-8 encoded when it contains non-ASCII characters. If you need a different character encoding, use a separate command such as iconv to transcode Terraform's raw output.