在 Terraform/Terragrunt 中包含详细输出信息

87次阅读
没有评论

问题描述

有没有办法在 Terraform 或 Terragrunt 中包含详细的调试输出?作为对这门语言较新的用户,我经常在不清楚发生了什么的情况下感到困惑。能够检查特定的值对我很有帮助,比如确认本地变量和变量是否具有我期望的值,获取已创建组件的 ID 等。我可以通过创建输出并在那里分配值来包含这些信息;但是如果我在调试一个模块,我就必须在模块的输出中包含输出,然后在调用代码的输出中再次包含它,以便能够看到;然后在交付解决方案之前必须删除这些条目。我希望有一种更像 C# 的 Debug.WriteLine(/*...*/) 或 PowerShell 的 Write-Verbose #... 的解决方案,即我可以在其中指定我想要检查的值,但只在启用详细输出时在终端中显示这些输出,因此这些语句可以在需要时切换打开,而不会影响交付的解决方案。这门语言中是否存在类似的功能?到目前为止,我在文档中没有找到相关记录,也没有通过谷歌搜索找到解决方案。

解决方案

在 Terraform 和 Terragrunt 中,你可以考虑使用 local-exec Provisioner 来将信息推送到外部脚本或文件中,然后在运行过程中单独监视这些输出。然而,你可能会遇到运行顺序的问题。HCL(HashiCorp Configuration Language,用于编写 Terraform 和 Terragrunt 配置的语言)的处理顺序与传统编程语言的自上而下处理不同,它会为正在创建的资源计算一个依赖树,因此 local-exec 可能不会在你期望运行它们的时间运行。

以下是一个可能的解决方案:

  1. 使用 local-exec Provisioner 将信息输出到外部脚本或文件中。
  2. 监视外部脚本或文件,以查看你希望检查的信息。

以下是步骤示例:

  1. 在 Terraform 或 Terragrunt 配置中的资源定义中,使用 local-exec Provisioner 来运行你的脚本。例如:
resource "your_resource_type" "your_resource_name" {
  # 配置其他参数

  provisioner "local-exec" {
    command = "your_script.sh"
  }
}
  1. 创建一个脚本(例如 your_script.sh),在其中编写你想要输出的信息。例如:
#!/bin/bash
echo "Value of local variable: ${local.your_variable}"
echo "Created component ID: ${your_resource_name.id}"
  1. 运行 Terraform 或 Terragrunt 命令,并监视脚本的输出,以查看你的调试信息。请注意,这些信息只会在启用详细输出时才会显示。

注: 虽然这种方法可能会满足你的需求,但它可能会引入一些依赖性和复杂性,特别是在依赖于脚本的情况下,因为其他用户必须安装所需的解释器以满足这个非功能性需求。确保在使用这种方法时,仔细考虑其影响和限制。

提示:如果你想要更多关于 Terraform 和 Terragrunt 的详细信息,可以查阅官方文档,以便更深入地了解如何在你的项目中实现详细输出和调试功能。

希望这些解决方案能够帮助你在 Terraform 和 Terragrunt 中实现所需的详细输出功能。记得根据实际情况进行调整,并在需要时启用详细输出来获取更多信息。

正文完