1. output
1.1 使用说明✅
output
可以打印已定义的变量,并且可以公开信息以供其他 Terraform
配置使用。输出值类似于编程语言中的返回值。
terraform output
命令被用来提取状态文件中输出值的值。
声明
输出值的声明使用输出块,例如:
hcl
output "instance_ip_addr" {
value = aws_instance.server.private_ip
}
output "instance_ip_addr" {
value = aws_instance.server.private_ip
}
output
关键字后紧跟的就是输出值的名称。在当前模块内的所有输出值的名字都必须是唯一的。output
块内的 value
参数即为输出值,它可以像是上面的例子里那样某个 resource 的输出属性,也可以是任意合法的表达式。
1.2 用法✅
terraform output [options] [NAME]
terraform output [options] [NAME]
如果不添加参数,output
命令会展示根模块内定义的所有输出值。如果指定了 NAME
,只会输出相关输出值。
可以使用以下参数:
-json
:设置该参数后 Terraform 会使用 JSON 格式输出。如果指定了NAME
,只会输出相关输出值。该参数搭配jq
使用可以构建复杂的流水线
-raw
:设置该参数后 Terraform 会将指定的输出值转换为字符串,并将该字符串直接打印到输出中,不带任何特殊格式。这在使用 shell 脚本时很方便,但它仅支持字符串、数字和布尔值。处理复杂的数据类型时还请使用-json
。
-no-color
:不输出颜色-state=path
:状态文件的路径,默认为terraform.tfstate
。启用远程 Backend 时该参数无效
使用-json和jq查询指定主机的ip
bash
$ terraform output -json ecs_public_ip | jq
$ terraform output -json ecs_public_ip | jq
1.3 案例
vim outputs.tf
yaml
output "ecs_public_ip" {
value=alicloud_instance.instance.public_ip
description = "this is instance public ip"
}
output "ecs_public_ip" {
value=alicloud_instance.instance.public_ip
description = "this is instance public ip"
}
通过 . 获取值
❌ 注意
- 在运行
terraform apply
后,根模块会在终端中打印输出值。 - 输出值只有在执行
terraform apply
后才会被计算,使用terraform plan
并不会计算输出值。 - 子模块可以使用输出将其资源属性的子集暴露给父模块。
- 子模块的output.tf只会应用到本层级中,不会传递到根目录。若需要传递到根目录,需要在根目录的output.tf文件中定义块引用子层级中的output.tf中的值。通过两次输出,使得主文件中的output变量能够输出到命令行中。