我是第一次在terragrunt代码库上工作,过去我经常使用terraform而不使用terragrunt。我有点搞不懂地形的构造有多强。我通常会这样组织我的地形:
main.tf
--> module
main.tf
--> module2
main.tf这是terraform文档上的最佳实践:
根模块 Terraform总是在单个根模块的上下文中运行。完整的Terraform配置由根模块和子模块树(包括根模块调用的模块、这些模块调用的任何模块等)组成。
但地球上的任何结构似乎都不代表这一点。它的设计似乎是为了使每个模块是独立的,并使用run-all命令运行。
这对我来说似乎是个问题,从现有的代码库中我可以看到,这为每个模块初始化了terraform,我认为这会导致模块之间共享秘密的问题。因此,我更愿意使用一个根模块和多个子模块。
我找不到一个能让我这么做的地形模式?
对于如何分解这一责任,我也感到困惑,我实际上是构造了我的terraform (如上面所示),还是需要一个额外的根.hcl文件?
我在找一个就像这样我想
└── live
├── prod
│ ├── terragrunt.hcl
│ ├── app
│ │ └── terragrunt.hcl
│ ├── mysql
│ │ └── terragrunt.hcl
│ └── vpc
│ └── terragrunt.hcl
├── qa
│ ├── terragrunt.hcl
│ ├── app
│ │ └── terragrunt.hcl
│ ├── mysql
│ │ └── terragrunt.hcl
│ └── vpc
│ └── terragrunt.hcl
└── stage
├── terragrunt.hcl
├── app
│ └── terragrunt.hcl
├── mysql
│ └── terragrunt.hcl
└── vpc
└── terragrunt.hcl但是,这个示例只讨论指定provider块,而不涉及根main.tf。所以我迷路了?
发布于 2022-08-05 11:42:43
用于使用输入、创建资源和提供输出的每个TF模块。模块的布线是通过main.tf完成的,您指的是平原地形。
在现在使用Terragrunt的情况下,连接将由terragrunt.hcl文件完成。在模块级别(例如live/prod/app/terragrunt.hcl),您可以定义模块依赖项,即该模块输入变量的输入值在哪里,例如:
inputs {
username = dependency.iam.output.user.name
}考虑到这一点,您可能使用或不使用根级别的terragrunt.hcl文件。如果要调用父文件夹terragrunt.hcl代码,则需要将以下块添加到模块中:
include "root" {
path = find_in_parent_folders()
expose = true
}请参阅此函数这里的文档。
https://stackoverflow.com/questions/73248728
复制相似问题