Terraform 输出管理

LinuxBeginner
立即练习

介绍

在 Terraform 中,输出值(output values)是一种在资源部署后暴露有关这些资源有意义数据的方式。它们类似于 Terraform 模块的返回值,可以用来轻松查询信息,例如服务器的 IP 地址、数据库连接字符串或文件路径。这使得信息可以从命令行轻松访问,并允许其他 Terraform 配置使用这些信息。

在这个 Lab 中,你将学习如何定义、应用和查看输出值。我们将从一个创建本地文件的基本 Terraform 配置开始,然后添加一个 output 块来暴露该文件的路径。

这是一个实验(Guided Lab),提供逐步指导来帮助你学习和实践。请仔细按照说明完成每个步骤,获得实际操作经验。根据历史数据,这是一个 初级 级别的实验,完成率为 95%。获得了学习者 85% 的好评率。

创建 outputs.tf 文件用于定义输出

在这一步,我们将为输出定义创建一个专门的文件。虽然你可以将 output 块放在任何 .tf 文件中,但最佳实践是将它们放在一个名为 outputs.tf 的独立文件中。这能保持你的配置井井有条,并使查找项目的所有输出变得容易。

你所有的工作都将在 ~/project 目录下完成,这是终端中的默认目录。

首先,让我们验证一下为你预先创建的 main.tf 文件。

ls -l

你应该会看到 main.tf 文件和一个 .terraform 目录。

total 4
-rw-rw-r-- 1 labex labex 279 Oct 15 12:39 main.tf

现在,使用 touch 命令创建 outputs.tf 文件。

touch outputs.tf

此命令在当前目录中创建一个名为 outputs.tf 的空文件。你可以通过再次列出文件来验证其创建。

ls -l

你现在将在文件列表中看到 outputs.tf

total 4
-rw-rw-r-- 1 labex labex 279 Oct 15 12:39 main.tf
-rw-rw-r-- 1 labex labex   0 Oct 15 12:39 outputs.tf

为 local_file 文件名定义输出

在这一步,你将在 outputs.tf 文件中定义一个 output 块。一个 output 块声明了你的 Terraform 配置的一个单独的输出值。

output 块的基本语法是:

output "NAME" {
  ## 参数放在这里
}

这里的 NAME 是一个字符串,为输出提供一个名称,你稍后将使用此名称来查询它的值。

让我们使用 nano 编辑器打开 outputs.tf 文件,并添加我们的第一个 output 块。

nano outputs.tf

现在,将以下代码添加到文件中。我们将把输出命名为 file_path

output "file_path" {

}

添加代码后,按 Ctrl+X,然后按 Y,最后按 Enter 保存文件并退出 nano

这个块目前做不了太多事情,因为它缺少一个 value 参数。我们将在下一步添加它。

在输出块中引用资源属性

在这一步,我们将通过告诉输出应该显示什么值来使其变得有用。这是通过在 output 块内部使用 value 参数来实现的。该值通常是对你的配置中定义的资源的属性的引用。

引用资源属性的语法是 <RESOURCE_TYPE>.<RESOURCE_NAME>.<ATTRIBUTE>

在我们的 main.tf 文件中,我们定义了一个资源如下:

resource "local_file" "example" {
  ## ...
}

local_file 资源有一个名为 filename 的属性,它保存了它所管理的文件的路径。要引用此属性,我们使用 local_file.example.filename

让我们将此引用添加到 output 块中。再次使用 nano 打开 outputs.tf

nano outputs.tf

修改文件以包含如下所示的 value 参数:

output "file_path" {
  value = local_file.example.filename
}

这告诉 Terraform,file_path 输出的值应该是名为 examplelocal_file 资源的 filename 属性的值。

Ctrl+X,然后按 Y,最后按 Enter 保存文件并退出 nano

运行 terraform apply 以更新配置

在这一步,你将应用配置更改。每当你添加、删除或修改输出时,都必须运行 terraform apply,以便 Terraform 识别更改并更新状态文件(state file)。状态文件是 Terraform 存储输出值的地方。

在你的终端中运行 terraform apply 命令。

terraform apply

Terraform 首先会向你展示一个执行计划(execution plan)。它会检测到你添加了一个输出,并计划添加它。由于 local_file 资源尚不存在,它也会计划创建它。

系统会提示你确认操作。输入 yes 并按 Enter

Terraform used the selected providers to generate the following execution plan.
Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  ## local_file.example will be created
  + resource "local_file" "example" {
      + content              = "This is an example file managed by Terraform."
      + content_base64sha256 = (known after apply)
      + content_base64sha512 = (known after apply)
      + content_md5          = (known after apply)
      + content_sha1         = (known after apply)
      + content_sha256       = (known after apply)
      + content_sha512       = (known after apply)
      + directory_permission = "0777"
      + file_permission      = "0777"
      + filename             = "./example.txt"
      + id                   = (known after apply)
    }

Plan: 1 to add, 0 to change, 0 to destroy.

Changes to Outputs:
  + file_path = "./example.txt"

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value: yes

local_file.example: Creating...
local_file.example: Creation complete after 0s [id=ec3adcab998872def2df6200fb03992ac6f237a4]

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

Outputs:

file_path = "./example.txt"

如你在输出中看到的,应用成功,并且 Terraform 现在显示了 file_path 输出及其对应的值。

运行 terraform output 查看文件名

在这一步,你将使用 terraform output 命令来查看状态文件(state file)中的输出值。这对于检索有关你的基础设施的信息非常有用,而无需手动解析状态文件或重新运行 terraform apply

要查看配置中定义的所有输出,只需在不带任何参数的情况下运行该命令。

terraform output

这将以人类可读的格式显示所有输出。

file_path = "./example.txt"

你也可以通过提供特定输出的名称作为参数来查询它。这在脚本中或当你只需要单个信息时非常有用。

terraform output file_path

此命令将仅打印指定输出的原始值。

"./example.txt"

这使得在 shell 脚本中轻松使用输出,例如,将其分配给变量:FILE=$(terraform output -raw file_path)-raw 标志会移除引号。

总结

恭喜你完成本次实验(Lab)!

在本次实验中,你学习了 Terraform 中管理输出的基础知识。你成功地:

  • 通过创建专用的 outputs.tf 文件来组织你的配置。
  • 定义了一个 output 块来声明一个输出值。
  • output 块中引用了一个资源属性,以暴露其值。
  • 使用 terraform apply 应用了配置,使输出可用。
  • 使用 terraform output 从命令行查询了输出值。

Terraform 输出是一个强大的功能,用于从你的基础设施中提取重要信息,并将你的 Terraform 工作流与其他工具和脚本集成。