文档

Terraform Output 介绍

更新时间:
一键部署

前面的内容中,我们已经介绍了资源、依赖关系和变量,这节我们将探索输出值(Output)。

什么是输出值

输出值类似于常见的编程语言中的返回值。通过输出值,你可以在命令行的输出中查看你创建的基础设施资源的信息。

输出值有多个用途。最常见的场景是在 apply 之后在运行日志中打印出根模块资源的属性,比如,ECS 实例的大多数详细信息是在 apply 时计算的,因此只能在创建后进行推断。

除此之外,输出值还用于将一个资源生成的信息传递给另一个资源。例如,你可以将 ECS 实例的特定属性的值(如IP地址)提取到另一个需要该信息的资源(如安全组规则)中。

输出值的语法

输出值用 output 块声明。你可以在 Terraform 配置文件的任何地方声明输出值,但推荐的最佳实践是将它们声明在名为 outputs.tf 的单独文件中。

image (25).png

关键字 'output' 旁边的标签为输出值的名称。和变量名称一样,输出值的名称在当前模块中必须是唯一的。output块内可以包含的参数有以下几种:

  1. value

    这是一个必需参数,向模块的用户返回一个值

  2. description

    这是一个可选参数,用于提供输出目的和预期值的说明。description 常用于文档描述。

  3. 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 将显示在屏幕上:

截屏2024-07-14 19.56.30.png

除此之外,对于已经创建成功的资源,你可以通过运行 terraform output 命令随时查询项目中使用的所有输出值。

输出值的最佳实践

当声明输出值的时候,我们提供一下几条建议:

  1. 仅输出有用的信息

    仅输出有用的信息,例如计算出的信息,避免输出只是重复的变量值或提供的已知信息的值。例如,对于网络资源,以下计算属性是有用的:

    1. id,它是资源的标识符

    2. router_id,它是 VPC 创建成功后系统自动创建的路由器的标识符

    3. route_table_id,它是 VPC 创建成功后系统自动创建的路由表的标识符

  2. 和变量一样,提供有意义的名称和描述

  3. 将代码组织起来,将所有输出值包含在名为output.tf的文件中

  4. 标记敏感输出

    不要尝试手动加密敏感值,而是依赖于内置的敏感状态管理来支持。将敏感值设置到输出值时,要确保这些值被标记为敏感。当一个值被标记为敏感时,该数据将在 terraform plan 或 terraform apply 命令的输出中将被掩盖。