Terraform 要合并地图的资源中的地形循环

Terraform 要合并地图的资源中的地形循环,terraform,hcl,Terraform,Hcl,我试图在资源中动态设置字典的内容。 在我的例子中,我想设置每个Lambda特定的环境变量。我真的不想修改 local.lambda结构,但我不能完全计算出在 local.lambda dictionary,动态查找额外的变量及其值。有什么办法可以做到这一点吗 这是我的数据 locals { lambdas = { func1 = "myfunc-${local.env}" func2 = "myfunc-${local.env}"

我试图在资源中动态设置字典的内容。 在我的例子中,我想设置每个Lambda特定的环境变量。我真的不想修改 local.lambda结构,但我不能完全计算出在 local.lambda dictionary,动态查找额外的变量及其值。有什么办法可以做到这一点吗

这是我的数据

locals {
  lambdas = {
    func1 = "myfunc-${local.env}"
    func2 = "myfunc-${local.env}"
    func3 = "myfunc-${local.env}"
  }


  envvars = {
    myenv1 = "apple"
    myenv2 = "pear"
    myenv3 = "orange"
  }

  extra_envvars = {
    myenv4 = "lettuce"
    myenv5 = "carrot"
    myenv6 = "turnip"
  }

  assign_extra_vars = {
    func1 = [ myenv4, myenv5 ]
    func3 = [ myenv6 ]
  }
}
这是我的Terraform资源,其中有一小段伪代码,希望能解释我试图实现的比我的坏Terraform更好的东西

resource "aws_lambda_function" "task" {
  for_each      = local.lambdas

  environment" {
    // Pseudo code
    my_extra = map {}
    for env_var in local.assign_extra_vars[each.key] : {
      my_extra[env_var] = lookup(local.extra_envvars, env_var, "")
    }
    // end pseudo code

    variables = merge(envvars, my_extra)
 
  }
}

提前感谢您的回复。

只需对您的
本地人进行一点点重组即可实现:

本地人{
env=“dev”
lambdas={
func1=“myfunc1-${local.env}”
func2=“myfunc2-${local.env}”
func3=“myfunc3-${local.env}”
}
环境变量={
myenv1=“苹果”
myenv2=“梨”
myenv3=“橙色”
}
额外的环境变量={
func1={
myenv4=“莴苣”
myenv5=“胡萝卜”
}
func3={
myenv6=“芜菁”
}
}
}
因此,
extra_envvars
现在是一个按函数查找的映射

现在,Lambda函数变为:

资源“aws\u lambda\u函数”任务{
对于_each=local.lambdas
函数_name=each.value
role=aws\u iam\u role.iam\u for\u lambda.arn
handler=“test.test”
runtime=“nodejs12.x”
环境{
变量=合并(local.envvars,lookup(local.extra_envvars,each.key,{}))
}
}
我已经用虚拟内容填充了
handler
runtime
,为了完整起见,这就是
aws\u iam\u角色。lambda的iam\u看起来像:

资源“aws\u iam\u角色”“iam\u用于lambda”{
name=“iam_代表λ”

假设\u role\u policy=Thankyou@yvesonline我非常感谢您的回复。我希望避免额外的\u envvars中的值重复,因为我在Lambdas地图中有大量lambda,但这肯定是我尝试的一个巨大改进。很高兴这有帮助,请放心。