Terragrunt Validator 是一个用于校验、lint、审计和检查 Terragrunt 配置的技能。Terragrunt 是 Terraform/OpenTofu 的轻量封装,用于保持配置 DRY、管理多个模块以及管理远程 state。本技能适用于以下场景:校验 Terragrunt HCL 文件(*.hcl、terragrunt.hcl、terragrunt.stack.hcl);处理 Terragrunt Stacks(unit/stack 块、terragrunt stack generate/run);用 terragrunt plan 执行 dry-run 测试;对 Terragrunt/Terraform 代码进行最佳实践 lint;检测并研究自定义 provider 或模块;调试 Terragrunt 配置问题;检查依赖图;格式化 HCL 文件;对基础设施代码运行安全扫描(Trivy、Checkov);生成运行报告与摘要。
版本兼容性:本技能面向 Terragrunt 0.93+,该版本包含新的 CLI 重新设计。0.93+ 的关键变化包括:terragrunt run --all 取代 terragrunt run-all 用于多模块操作;terragrunt dag graph 取代 terragrunt graph-dependencies 用于依赖可视化;terragrunt hcl validate --inputs 取代 validate-inputs 用于输入校验。HCL 语法校验可通过 terragrunt hcl fmt --check 或 terragrunt hcl validate 完成;完整校验需要 terragrunt init && terragrunt validate。若使用较旧的 Terragrunt 版本,部分命令可能需要调整。
核心能力一:综合校验套件。运行脚本 bash scripts/validate_terragrunt.sh [TARGET_DIR] 可一次执行全部检查,包括 HCL 格式化(terragrunt hcl fmt --check)、HCL 输入校验(terragrunt hcl validate --inputs)、Terragrunt 配置语法、Terraform 配置校验、tflint lint、Trivy(或旧版 tfsec)安全扫描、依赖图校验以及 dry-run 计划。支持的环境变量包括:SKIP_PLAN=true 跳过 terragrunt plan;SKIP_SECURITY=true 跳过安全扫描;SKIP_LINT=true 跳过 tflint;SKIP_INIT=true 跳过校验前的 terragrunt init;SKIP_BACKEND_INIT=true 以 -backend=false 运行 init(适用于 CI/离线);SOFT_FAIL_SECURITY=true 报告安全发现但不使流程失败;TG_STRICT_MODE=true 启用严格模式(对废弃特性报错)。
核心能力二:自定义 Provider 与模块检测。使用 python3 scripts/detect_custom_resources.py [DIRECTORY] [--format text|json] 检测自定义 Terraform provider(非 HashiCorp)、远程模块(Git、Terraform Registry、HTTP)、provider 版本以及模块版本与来源,输出格式支持 text 与 json。检测到自定义资源时,文档建议对每个检测到的自定义资源(provider 和模块)查找文档,可通过 WebSearch 或 Context7 MCP 完成,并注意与 Terraform/Terragrunt 版本的兼容性。
技能还提供分步校验命令:格式校验、配置校验、Terraform 校验、tflint lint、Trivy 安全扫描(推荐;tfsec 已合并入 Trivy 且不再积极维护)、Checkov 替代扫描、依赖图校验(0.93+ 使用 terragrunt dag graph,可用 graphviz 生成图片)以及 dry-run 计划。
多模块操作方面,使用 run --all(取代已废弃的 run-all)执行 validate、plan、apply、destroy,并可配合 --parallelism 和严格模式(--strict-mode 或 TG_STRICT_MODE=true)。HCL 输入校验部分(0.93+ 新增)介绍 terragrunt hcl validate --inputs、--show-config-path,以及结合 run --all 的用法。Strict Mode 部分介绍 CLI 标志、环境变量、terragrunt info strict 以及具体严格控制项:cli-redesign、deprecated-commands、root-terragrunt-hcl、skip-dependencies-inputs、bare-include。
新 CLI 命令部分涵盖:terragrunt render --json(可 --write 输出到 terragrunt.rendered.json)、terragrunt info print(取代 terragrunt-info,输出 config_path、download_dir、terraform_binary、working_dir)、terragrunt find(支持 --json、--dag)与 terragrunt list,以及运行摘要与报告(--summary-disable、--report-file=report.json/.csv)。
Terragrunt Stacks(v0.78.0+ GA)部分介绍使用 terragrunt.stack.hcl 声明式生成基础设施,包括 unit 与 stack 块示例、stack generate / run / clean / output 命令,以及通过 no_validation 属性跳过特定 unit 校验。
exec 命令部分允许在 Terragrunt 上下文中对 unit 运行任意程序,例如 terragrunt exec -- tflint、terragrunt exec -- checkov -d .、terragrunt exec -- aws s3 ls 等,可使 unit 的 inputs 以 TF_VAR_ 前缀环境变量提供,并可结合 run --all 使用。
Feature Flags(生产特性)部分介绍如何在 terragrunt.hcl 中定义 feature 块、通过 CLI --feature 或环境变量 TG_FEATURE 启用,以及结合 run --all 使用。Experiments 部分介绍用于尝试尚未 GA 的不稳定特性的开关。