首页 > 解决方案 > 在 terragrunt 配置中使用变量

问题描述

我们可以在 terragrunt 配置中使用 terraform 变量吗?

下面是我的 terragrunt 配置。

#terragrunt.hcl

remote_state {
  backend = "s3"
  generate = {
    path      = "remote_state.tf"
    if_exists = "overwrite_terragrunt"
  }
  # Terragrunt built-in function:
  # sets key relative to the modules
  config = {
    bucket         = ${var.bucket_name}
    key            = ${var.key}
    encrypt        = true
  }
}

在 root.yaml 文件中,我传递了变量 bucket_name 和 key 的输入值。这些变量在 terraform 模块中定义。

#root.yaml
bucket_name: "s3-bucket"
key:    "foo"

这不起作用,terragrunt 抱怨未定义变量。如果不创建用于 terragrunt 的新变量,我们不能在 terragrunt 配置中使用 terraform 变量吗?

标签: amazon-web-servicesterraformterragruntterraform-aws-modules

解决方案


Terragrunt 在 hcl 级别上没有变量,但它允许您使用可以从文件中读取的本地变量:

#terragrunt.hcl
locals {
  config_vars    = read_terragrunt_config("config.hcl")
}

remote_state {
  backend = "s3"
  generate = {
    path      = "remote_state.tf"
    if_exists = "overwrite_terragrunt"
  }
  # Terragrunt built-in function:
  # sets key relative to the modules
  config = {
    bucket         = "${local.config_vars.locals.bucket_name}"
    key            = "${local.config_vars.locals.key}"
    encrypt        = true
  }
}
# config.hcl:
locals {
    bucket_name = "s3-bucket"
    key         = "foo"
}

推荐阅读