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

Terragrunt未生成backend.tf与provider.tf,需从根目录执行init吗?

问题描述

目录结构:

├── terragrunt.hcl
├── test_include
│   ├── first_level
│   │   └── terragrunt.hcl
│   └── terragrunt.hcl

进入test_include/first_level目录执行terragrunt init或plan时,未生成backend.tf或provider.tf文件,且当前使用本地backend。请问是否需要先从根目录执行terragrunt init?

根目录terragrunt.hcl内容:

remote_state {
  backend = "gcs"

  generate = {
    path      = "backend.tf"
    if_exists = "overwrite_terragrunt"
  }

  config = {
    project  = "google-project-1"
    location = "northamerica-northeast1"
    bucket   = "tfstate-123"
    prefix   = "include_demo/${path_relative_to_include()}/terraform.tfstate"

    gcs_bucket_labels = {
      owner = "terragrunt_state"
      name  = "terraform_state_storage"
    }
  }
}

generate "provider" {
  path      = "provider.tf"
  if_exists = "overwrite_terragrunt"

  contents = <<EOF
   provider "google" {
      region = "northamerica-northeast1"
      # version = "5.32.0"
    }
  EOF
}

test_include/terragrunt.hcl内容:

inputs = {
  account = "account"
}

test_include/first_level/terragrunt.hcl内容:

include "root" {
  path   = find_in_parent_folders()
  expose = true
}

terraform {
  source = "../../module/"
}

inputs = {
  env  = "env"
  name = "gaurang"
}

解答

不需要先从根目录执行terragrunt init,问题出在find_in_parent_folders()的查找逻辑上:
当你在test_include/first_level目录执行Terragrunt命令时,find_in_parent_folders()会优先找到test_include目录下的terragrunt.hcl,而非根目录的配置文件。而这个目录的配置里没有定义remote_state和generate块,因此不会生成backend.tf和provider.tf,只能使用默认的本地backend。

可以通过两种方法解决:

  • 方法一:直接指定根目录配置路径,修改test_include/first_level/terragrunt.hcl的include块:
    include "root" {
      path   = "${get_terragrunt_dir()}/../../terragrunt.hcl"
      expose = true
    }
    
  • 方法二:让test_include层继承根目录配置,修改test_include/terragrunt.hcl:
    include "root" {
      path   = find_in_parent_folders()
      expose = true
    }
    
    inputs = {
      account = "account"
    }
    

修改后,在test_include/first_level目录执行terragrunt init,就能正确继承根目录的remote_state和generate配置,生成对应的backend.tf和provider.tf文件,并使用GCS作为远程backend。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 02:36:09