是否可以使用 terragrunt 调用多个 terraform 模块

is it possible to call multiple terraform modules using terragrunt

我正在尝试从 terragrunt 调用多个模块。我了解到目前terragrunt不支持多源,一次只能调用一个模块。所以,我创建了一个 main.tf 文件来前端多个模块。

# main.tf 

module "foo" {
   source = "../modules/vpc"
}


module "bar" {
   source = "../modules/s3"
}

在 terragrunt 内部调用 main.tf 作为源,以为会调用模块 foo 和模块 bar。

# terragrunt.hcl

terraform {
  source = "./main.tf

  }


inputs {
}

这可以使用 terragrunt 吗?我需要一次对多个 Terraform 模块进行分组。

简而言之,是的,您发布的两个文件片段可以使用。

terragrunt doesn't support multiple sources and we can only call one module at a time.

更长的答案:将 terragrunt.hcl 中的 terraform { ... } 块视为指向“root terraform 模块”的指针很有用。这个根模块只是任何其他 terraform 模块,但很特别,因为它位于所有 terraform 配置的根或顶部。

因此 terragrunt 仅支持一个根模块,但该根模块可以根据需要使用任意多的附加模块。

terragrunt 给我们的强大功能是重新使用这些根模块的能力。在 vanilla terraform 中你不能重复使用这个根模块。

在您的示例中,terragrunt 文件指向同一文件中的根模块 (./main.tf)。这工作得很好,但是因为我们使用 terragrunt 来保持干燥,我们通常会将这个根模块放在不同的目录中,甚至可能在 git 存储库中并在 terragrunt.hcl 文件中适当地引用它

这是一个简图:

         +-------------------------------+
         |       /my/root-module         |
         |                               |
         |           main.tf             |
         |                               |
         +--------------+----------------+
+------------------+    |    +----------------+
|  /my/modules/vpc |    |    | /my/modules/s3 |
|                  |    |    |                |
|   module "foo"   <----+---->  module "bar"  |
|                  |         |                |
|                  |         |                |
+------------------+         +----------------+

未显示指向 /my/root-module 的 terragrunt.hcl 文件,它可以位于磁盘上的其他位置或 git.

我有以下结构。

project    
│
└───live
│   │
│   └───dev
│       │   terragrunt.hcl
│       │   
│       └───aws-ec2
|       |      terragrunt.hcl   
|       └───aws-rds
|              terragrunt.hcl
│   
└───modules
    │   
    └───ec2
    │      files.tf
    └───rds
           files.tf

在开发中,我是 运行 terragrunt plan-all(已弃用,但如果您不介意依赖项导致的错误,则可以使用)。最新的 cli 选项是 terragrunt run-all (command),但我认为除了 terragrunt 文件之外,您还需要一个 terraform 文件。

可在此处找到更多信息: