You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Terragrunt疑问:root.hcl中find_in_parent_folders()为何能找到子目录配置文件?

Terragrunt中find_in_parent_folders()函数的工作原理疑问

我在使用Terragrunt时遇到一个疑问:我的root.hcl配置里用find_in_parent_folders()函数读取account.hcl、region.hcl和env.hcl文件,按函数设计它是从当前目录向上(从下到上)查找文件,但我发现它确实能找到目标配置文件,想知道具体原因和工作原理。

我的root.hcl配置如下:

locals {
    account_vars = read_terragrunt_config(find_in_parent_folders("account.hcl"))
    region_vars  = read_terragrunt_config(find_in_parent_folders("region.hcl"))
    env_vars     = read_terragrunt_config(find_in_parent_folders("env.hcl"))
}

项目目录结构:

├── demo
│   ├── account.hcl
│   └── us-east-1
│       ├── dev
│       │   ├── env.hcl
│       │   └── vpc
│       │       └── terragrunt.hcl
│       └── region.hcl
└── root.hcl

我猜测它的工作方式类似C++的include——当在底层文件夹(比如vpc)执行terragrunt apply时,会向上遍历目录并将配置内容导入自身,但没找到相关依据,想了解具体工作原理。


解答

find_in_parent_folders()的核心工作逻辑非常直接:从执行Terragrunt命令的当前工作目录开始,逐层向上遍历父目录,直到找到指定文件名的文件,或者到达文件系统根目录为止。

结合你的场景,当你在vpc目录下执行terragrunt apply时:

  • 查找account.hcl:遍历路径为 vpc → dev → us-east-1 → demo,最终在demo目录下找到目标文件
  • 查找region.hcl:遍历路径为 vpc → dev → us-east-1,在us-east-1目录下找到目标文件
  • 查找env.hcl:遍历路径为 vpc → dev,在dev目录下找到目标文件

另外需要明确一个关键细节:你的root.hcl能被加载执行,是因为子目录的terragrunt.hcl通常会通过include块引入根配置(比如include "root" { path = find_in_parent_folders("root.hcl") })。此时root.hcl中find_in_parent_folders()的执行上下文,依然是你执行命令时的当前工作目录(即vpc目录),而不是root.hcl所在的目录——这就是它能精准定位到各层级配置文件的核心原因。

这种设计的目的,就是为了让多环境、多区域的Terraform配置能通过目录层级自动关联,无需手动硬编码文件路径,大幅提升配置的可维护性。

内容的提问来源于stack exchange,提问作者dim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 03:35:01