Terraform Output 介绍
前面的内容中,我们已经介绍了资源、依赖关系和变量,这节我们将探索输出值(Output)。
什么是输出值
输出值类似于常见的编程语言中的返回值。通过输出值,您可以在命令行的输出中查看您创建的基础设施资源的信息。
输出值有多个用途。最常见的场景是在 apply 之后在运行日志中打印出根模块资源的属性,比如,ECS 实例的大多数详细信息是在 apply 时计算的,因此只能在创建后进行推断。
除此之外,输出值还用于将一个资源生成的信息传递给另一个资源。例如,你可以将 ECS 实例的特定属性的值(如IP地址)提取到另一个需要该信息的资源(如安全组规则)中。
输出值的语法
输出值用 output 块声明。你可以在 Terraform 配置文件的任何地方声明输出值,但推荐的最佳实践是将它们声明在名为 outputs.tf 的单独文件中。
关键字 'output' 旁边的标签为输出值的名称。和变量名称一样,输出值的名称在当前模块中必须是唯一的。output块内可以包含的参数有以下几种:
value
这是一个必需参数,向模块的用户返回一个值
description
这是一个可选参数,用于提供输出目的和预期值的说明。description 常用于文档描述。
sensitive
这是另一个可选参数,用于掩盖资源属性的值。当需要隐藏一些需要保密的资源属性(如密码信息、Access Secret Key)时,此参数很有用。
在如下的例子中,我们为名为 my-vpc 的对象声明了一个输出值 vpc_id:
# 创建 VPC
resource "alicloud_vpc" "my-vpc" {
vpc_name = "tf-vpc"
cidr_block = "10.0.0.0/16"
}
output "vpc_id" {
value = alicloud_vpc.my-vpc.id
}
运行 terraform apply 成功之后,my-vpc 的 ID 将显示在屏幕上:
除此之外,对于已经创建成功的资源,你可以通过运行 terraform output 命令随时查询项目中使用的所有输出值。
输出值的最佳实践
当声明输出值的时候,我们提供一下几条建议:
仅输出有用的信息
仅输出有用的信息,例如计算出的信息,避免输出只是重复的变量值或提供的已知信息的值。例如,对于网络资源,以下计算属性是有用的:
id,它是资源的标识符
router_id,它是 VPC 创建成功后系统自动创建的路由器的标识符
route_table_id,它是 VPC 创建成功后系统自动创建的路由表的标识符
和变量一样,提供有意义的名称和描述
将代码组织起来,将所有输出值包含在名为outputs.tf的文件中
标记敏感输出
不要尝试手动加密敏感值,而是依赖于内置的敏感状态管理来支持。将敏感值设置到输出值时,要确保这些值被标记为敏感。当一个值被标记为敏感时,该数据将在 terraform plan 或 terraform apply 命令的输出中将被掩盖。