terraform output
terraform output 从状态文件中提取并显示 output 变量的值。它是在命令行查询基础设施信息、在脚本中提取数据、在模块间传递值的核心命令。
用法
terraform output [options] [NAME]- 不传
NAME时,显示根模块中声明的所有 output。 - 传入
NAME时,只显示该 output 的值。
查看所有 output
terraform output输出示例:
app_bucket = "myapp-dev-app"
logs_bucket = "myapp-dev-logs"
sessions_table = "myapp-dev-sessions"标记为 sensitive 的 output 在此处显示为 <sensitive>。
查看单个 output
terraform output app_bucket输出该 output 的值(带引号):
"myapp-dev-app"TIP
指定 output 名称时,即使该 output 标记为 sensitive,也会显示实际值。Terraform 只在列出所有 output 时才隐藏敏感值。
选项
-json
以 JSON 格式输出,适用于脚本解析和自动化处理:
# 所有 output 的 JSON
terraform output -json
# 单个 output 的 JSON
terraform output -json app_bucket列出所有 output 时,每个 output 包含 value、type、sensitive 字段:
{
"app_bucket": {
"value": "myapp-dev-app",
"type": "string",
"sensitive": false
}
}可以配合 jq 或 python3 提取特定值:
terraform output -json | python3 -c "import sys,json; print(json.load(sys.stdin)['app_bucket']['value'])"-raw
直接输出字符串值,不带引号和格式化,适合在 shell 脚本中直接使用:
terraform output -raw app_bucket输出:
myapp-dev-app-raw 只支持 string、number、bool 类型。对于 list、map 等复合类型,需使用 -json。
-no-color
禁用带颜色的输出:
terraform output -no-color自动化中的用法
Shell 脚本集成
-raw 适合直接赋值给 shell 变量:
BUCKET=$(terraform output -raw app_bucket)
aws s3 ls "s3://$BUCKET"JSON 管道处理
-json 适合复杂数据结构的提取和处理:
# 提取列表中的第一个元素
terraform output -json instance_ips | jq -r '.[0]'
# 将所有 output 写入文件用于后续步骤
terraform output -json > outputs.jsonCI/CD 中传递值
在多阶段 CI/CD 流水线中,terraform output 常用于将基础设施信息传递给后续部署步骤:
# 基础设施阶段
terraform apply -auto-approve
terraform output -json > infra-outputs.json
# 应用部署阶段
BUCKET=$(cat infra-outputs.json | jq -r '.app_bucket.value')注意事项
terraform output只显示根模块的 output。子模块的 output 必须在根模块中通过output块显式暴露。-json和-raw输出中,sensitive值以明文显示。- 如果状态为空(从未执行过
apply),命令会报错:No outputs found。 terraform output是只读命令,不会修改状态或资源。
实验环境(Azure / miniblue 版)
点击下方按钮在新标签页中打开 Azure 版 Killercoda 实验环境,预装了 Terraform + miniblue(Azure 本地模拟器),所有 output 子命令与 AWS 版完全一致。
打开实验环境 ↗