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

是否可以使用terragrunt调用多个terraform模块,terraform,terraform-provider-aws,terragrunt,Terraform,Terraform Provider Aws,Terragrunt,我正在尝试从terragrunt调用多个模块。我知道目前terragrunt不支持多个源,我们一次只能调用一个模块。因此,我创建了一个main.tf文件来前端多个模块 # main.tf module "foo" { source = "../modules/vpc" } module "bar" { source = "../modules/s3" } 在terragrunt内部,调用main

我正在尝试从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不支持多个源,我们一次只能调用一个模块

更详细的回答:将
terragrunt.hcl
中的
terraform{…}
块看作指向“根terraform模块”的指针是很有用的。这个根模块只是任何其他terraform模块,但它是特殊的,因为它位于所有terraform配置的根或顶部

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

terragrunt给我们的能力是重用这些根模块。在香草terraform中,您不能重复使用此根模块

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

下面是一个快速示意图:

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

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

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

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

更详细的回答:将
terragrunt.hcl
中的
terraform{…}
块看作指向“根terraform模块”的指针是很有用的。这个根模块只是任何其他terraform模块,但它是特殊的,因为它位于所有terraform配置的根或顶部

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

terragrunt给我们的能力是重用这些根模块。在香草terraform中,您不能重复使用此根模块

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

下面是一个快速示意图:

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

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

我具有以下结构

project    
│
└───live
│   │
│   └───dev
│       │   terragrunt.hcl
│       │   
│       └───aws-ec2
|       |      terragrunt.hcl   
|       └───aws-rds
|              terragrunt.hcl
│   
└───modules
    │   
    └───ec2
    │      files.tf
    └───rds
           files.tf
在dev中,我正在运行
terragrunt plan all
(这是不推荐使用的,但如果您不介意由依赖项引起的错误,则可以使用)。最新的cli选项是
terragrunt run all(command)
,但我认为除了terragrunt文件之外,您还需要一个terraform文件

更多信息可在此处找到:


    • 我有以下结构

      project    
      │
      └───live
      │   │
      │   └───dev
      │       │   terragrunt.hcl
      │       │   
      │       └───aws-ec2
      |       |      terragrunt.hcl   
      |       └───aws-rds
      |              terragrunt.hcl
      │   
      └───modules
          │   
          └───ec2
          │      files.tf
          └───rds
                 files.tf
      
      在dev中,我正在运行
      terragrunt plan all
      (这是不推荐使用的,但如果您不介意由依赖项引起的错误,则可以使用)。最新的cli选项是
      terragrunt run all(command)
      ,但我认为除了terragrunt文件之外,您还需要一个terraform文件

      更多信息可在此处找到:


      这是正确的。在我的例子中,我有一个复杂的目录结构,不可能从根目录使用applyall/runall命令。相反,我将多个模块分组为一个模块,然后直接调用该根模块。这是正确的。在我的例子中,我有一个复杂的目录结构,不可能从根目录使用applyall/runall命令。与此相反,我将多个模块分组为一个模块,然后直接调用该根模块。它需要位于您有子模块的路径上的某个位置(/my/modules/vpc、/my/modules/s3)。我试过了,但没有成功。当您在terragrunt.hcl中将/my/root模块作为源引用时,它会根据您在路径中使用(//)指定的任何根来下载所有模块配置。在本例中,它将是source=//my/root模块。所以terragrunt将下载/my目录级别的所有内容,该目录将涵盖这两个模块。如果这不是真的,请告诉我,是否可以将root-m