如何在Terraform中从Lambda模块数组提取属性生成函数名称数组?
解决方案
这问题我太熟了!在Terraform里批量提取列表中每个元素的指定属性,用for表达式就能完美解决,完全不用手动逐个拼接。
假设你原本的lambda_functions是定义在变量或者本地值里的,只需要通过下面的方式生成目标列表:
情况1:如果lambda_functions是变量(var)
locals { # 生成只包含函数名的新列表 lambda_function_names = [for lambda in var.lambda_functions : lambda.this_lambda_function_name] }
情况2:如果lambda_functions是本地值(local)
如果你的原列表是直接定义在locals里的,那代码可以写成这样:
locals { lambda_functions = [module.lambda1, module.lambda2, module.lambda3, module.lambda4] # 自动提取每个模块的函数名 lambda_function_names = [for lambda in local.lambda_functions : lambda.this_lambda_function_name] }
原理说明
for lambda in ...会遍历原列表中的每一个lambda模块实例lambda.this_lambda_function_name会取出当前模块实例的this_lambda_function_name属性- 整个表达式最终会返回一个新的数组,格式完全符合你的需求:
[module.lambda1.this_lambda_function_name, module.lambda2.this_lambda_function_name, ...]
之后你就可以通过local.lambda_function_names来引用这个新列表,而且后续如果要新增lambda模块,只要在原lambda_functions列表里添加,新列表会自动同步更新,非常省心!
内容的提问来源于stack exchange,提问作者onkami
相关产品推荐
相关产品推荐

