0

以下文件结构:

.
├── account.hcl
├── prod
│   ├── env.hcl
│   └── s3
│       └── terragrunt.hcl
├── region.hcl
└── stage
    ├── env.hcl
    └── s3
        └── terragrunt.hcl

在 prod 和 stage 中,env.hcl 是相同的,不是 DRY:

locals {
  environment = "prod"
  project     = "foo"
}

但是,如果我在我的根文件夹(account.hcl 所在的位置)中使用一些 globaltags.hcl,我如何能够将标签与环境名称结合起来?

在 terragrunt.hcl 中有来自示例的变量收集器,例如:

locals {
  # Automatically load environment-level variables
  environment_vars = read_terragrunt_config(find_in_parent_folders("env.hcl"))

  # Extract out common variables for reuse
  env = local.environment_vars.locals.environment
}

以及不同存储桶名称的输入,例如:

inputs = {
  bucketnames   = [
                   "foo-${local.env}",
                   "bar-${local.env}",
                   "baz-${local.env}"
                  ]
  tags          = local.environment_vars.locals
}

在这里我不知道如何为每个存储桶使用不同的 acl 设置?

4

1 回答 1

0

“全局”标签的解决方案是:在您的根文件夹中,您使用的是 common.hcl,其中包含您的标签

locals {
  Project = "OneApp"
  Foo     = "Bar"
}

在根文件夹下,您通过“dev”、“stage”等文件夹定义不同的环境。在每个文件夹/环境中,您应该放置 env.hcl,例如:

locals {
  environment = "prod"
}

现在在您的模块级别 (root/dev/s3/terragrunt.hcl) 只需包含以下几行。进入您的本地块:

common = read_terragrunt_config(find_in_parent_folders("common.hcl"))

并在您的输入块中:

tags = merge(local.common.locals,local.environment_vars.locals,)

现在您可以在模块级别运行 terragrunt,也可以从根级别运行 terragrunt(通过 terragrunt run-all)。它将遍历所有子文件夹/环境并将您的全局标签与环境标签结合起来。

于 2021-02-17T11:56:21.403 回答