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

Mee*_*101 9 terraform terragrunt terraform-provider-aws

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

# main.tf 

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


module "bar" {
   source = "../modules/s3"
}
Run Code Online (Sandbox Code Playgroud)

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

# terragrunt.hcl

terraform {
  source = "./main.tf

  }


inputs {
}
Run Code Online (Sandbox Code Playgroud)

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

Cas*_*sey 13

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

terragrunt 不支持多个源,我们一次只能调用一个模块。

terraform { ... }更长的答案:将您的块terragrunt.hcl视为指向“根 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"  |
|                  |         |                |
|                  |         |                |
+------------------+         +----------------+
Run Code Online (Sandbox Code Playgroud)

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