是否可以使用 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 文件。
可在此处找到更多信息:
我正在尝试从 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 文件。
可在此处找到更多信息: