Terragrunt跨模块传参失败求助:依赖模块无输出检测异常
排查Terragrunt跨模块传递输出失败的问题
针对你遇到的「依赖模块无输出」错误,按以下步骤逐一排查:
1. 确认依赖模块的状态文件可正常读取输出
Terragrunt是从依赖模块的Terraform状态文件(本地或远程)读取输出值,而非仅靠outputs.tf定义:
- 进入
networks-vpc目录,执行terraform output,确认能正常输出你列出的public_subs、vpc_id等值。 - 如果用了远程状态存储(如S3),执行
terragrunt output,确认Terragrunt能正确拉取远程状态的输出。若此处报错,检查远程状态的权限、配置是否正确。
2. 简化依赖配置,排除冲突
你的ec2-amz-lnx/terragrunt.hcl同时配置了dependency和dependencies块,两者功能有重叠,可能导致解析问题:
- 暂时注释掉
dependencies块,只保留dependency块,重新执行tg run-all plan:// dependencies { // paths = ["../networks-vpc"] // }
3. 验证依赖路径的正确性
虽然相对路径../networks-vpc看起来正确,但可尝试用绝对路径测试,排除路径解析异常:
dependency "shared_infra" { config_path = "/Users/xxx/sri/aws/Infrastructure/apps/networks-vpc" }
4. 检查环境与工作区一致性
确保执行tg run-all plan时的环境配置与networks-vpc模块应用时一致:
- 确认
AWS_PROFILE、TF_WORKSPACE等环境变量未变更,避免Terragrunt读取到错误环境的状态文件。 - 检查
networks-vpc和ec2-amz-lnx是否加载了同一环境的tfvars配置(如environments/ap-southeast-2/npe/apps/下的文件)。
5. 刷新依赖模块状态并重试
进入networks-vpc目录,执行terragrunt refresh确保状态文件与实际基础设施同步,然后回到apps目录重新执行tg run-all plan。
6. 验证单模块执行是否正常
先单独执行ec2-amz-lnx模块的plan,确认依赖输出能被正确读取:
cd ec2-amz-lnx terragrunt plan
如果单独执行正常,但run-all失败,可能是run-all的状态同步机制问题,可尝试先单独apply依赖模块,再执行run-all。
内容的提问来源于stack exchange,提问作者Sri
相关产品推荐
相关产品推荐

