Terraform动态生成筛选DEV账号ID的list(map)变量实现方法
Terraform 过滤DEV环境账号生成指定格式列表
直接改locals块的逻辑就行,你原来的写法有三个明显问题:
- 变量名不匹配:你定义的映射叫
account_map,代码里引用的是不存在的local.account_group - 逻辑冗余:不需要嵌套双层for循环加
flatten,单层循环加条件判断完全能满足需求 - 取值逻辑错误:
lookup取到的是账号对应的环境标签字符串,对字符串做循环会把内容拆成单个字符,根本拿不到正确的账号ID
可用配置
如果你的账号源就是account_map,直接用下面的写法:
locals { account_map = { 111111111111 = "DEV" 222222222222 = "DEV" 333333333333 = "STG" 444444444444 = "DEV" 555555555555 = "PROD" 666666666666 = "DEV" } instance_data = [ for acc_id, acc_env in local.account_map : { id = acc_id } if acc_env == "DEV" ] }
如果你的账号列表实际来自module.organization.organization_accounts输出,只需要把遍历对象换成这个数据源,加个标签判断即可:
locals { account_map = { 111111111111 = "DEV" 222222222222 = "DEV" 333333333333 = "STG" 444444444444 = "DEV" 555555555555 = "PROD" 666666666666 = "DEV" } instance_data = [ for account in module.organization.organization_accounts : { id = account.id } if lookup(local.account_map, account.id, "") == "DEV" ] }
执行后输出结果和你预期完全一致:
+ instance_data = [ + { + id = "111111111111" }, + { + id = "222222222222" }, + { + id = "444444444444" }, + { + id = "666666666666" } ]
内容的提问来源于stack exchange,提问作者hlesnt395
相关产品推荐
相关产品推荐

