问题描述
有没有办法在 Terraform 或 Terragrunt 中包含详细的调试输出?作为对这门语言较新的用户,我经常在不清楚发生了什么的情况下感到困惑。能够检查特定的值对我很有帮助,比如确认本地变量和变量是否具有我期望的值,获取已创建组件的 ID 等。我可以通过创建输出并在那里分配值来包含这些信息;但是如果我在调试一个模块,我就必须在模块的输出中包含输出,然后在调用代码的输出中再次包含它,以便能够看到;然后在交付解决方案之前必须删除这些条目。我希望有一种更像 C# 的 Debug.WriteLine(/*...*/)
或 PowerShell 的 Write-Verbose #...
的解决方案,即我可以在其中指定我想要检查的值,但只在启用详细输出时在终端中显示这些输出,因此这些语句可以在需要时切换打开,而不会影响交付的解决方案。这门语言中是否存在类似的功能?到目前为止,我在文档中没有找到相关记录,也没有通过谷歌搜索找到解决方案。
解决方案
在 Terraform 和 Terragrunt 中,你可以考虑使用 local-exec
Provisioner 来将信息推送到外部脚本或文件中,然后在运行过程中单独监视这些输出。然而,你可能会遇到运行顺序的问题。HCL(HashiCorp Configuration Language,用于编写 Terraform 和 Terragrunt 配置的语言)的处理顺序与传统编程语言的自上而下处理不同,它会为正在创建的资源计算一个依赖树,因此 local-exec
可能不会在你期望运行它们的时间运行。
以下是一个可能的解决方案:
- 使用
local-exec
Provisioner 将信息输出到外部脚本或文件中。 - 监视外部脚本或文件,以查看你希望检查的信息。
以下是步骤示例:
- 在 Terraform 或 Terragrunt 配置中的资源定义中,使用
local-exec
Provisioner 来运行你的脚本。例如:
resource "your_resource_type" "your_resource_name" {
# 配置其他参数
provisioner "local-exec" {
command = "your_script.sh"
}
}
- 创建一个脚本(例如
your_script.sh
),在其中编写你想要输出的信息。例如:
#!/bin/bash
echo "Value of local variable: ${local.your_variable}"
echo "Created component ID: ${your_resource_name.id}"
- 运行 Terraform 或 Terragrunt 命令,并监视脚本的输出,以查看你的调试信息。请注意,这些信息只会在启用详细输出时才会显示。
注: 虽然这种方法可能会满足你的需求,但它可能会引入一些依赖性和复杂性,特别是在依赖于脚本的情况下,因为其他用户必须安装所需的解释器以满足这个非功能性需求。确保在使用这种方法时,仔细考虑其影响和限制。
提示:如果你想要更多关于 Terraform 和 Terragrunt 的详细信息,可以查阅官方文档,以便更深入地了解如何在你的项目中实现详细输出和调试功能。
希望这些解决方案能够帮助你在 Terraform 和 Terragrunt 中实现所需的详细输出功能。记得根据实际情况进行调整,并在需要时启用详细输出来获取更多信息。