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