Terraform基于AWS账号标签筛选部署CloudFormation StackSet
Terraform 按标签筛选AWS账号实现CloudFormation StackSet定向部署
针对你当前两个等长、索引一一对应的账号ID/标签值列表场景,直接用for表达式按索引做条件匹配即可,不需要额外引入复杂函数。
直接适配现有本地变量的实现写法
直接在locals块中补全test_account_ids的逻辑即可:
locals { account_ids = module.organization.organization_accounts.*.id account_types = module.accounts.tags_all.*.Env test_account_ids = [ for idx, env_tag in local.account_types : local.account_ids[idx] if env_tag == "test" ] }
这个写法会遍历标签列表的每一个索引,当对应位置的Env标签值等于test时,就把同索引位置的账号ID加入结果集,完全匹配你给出的输出结构,最终生成的账号ID列表可以直接传给StackSet资源的目标账号参数,和之前全账号部署的参数格式完全兼容。
可选的鲁棒性优化写法
如果后续担心模块输出的两个列表顺序出现错位,可以跳过分离的列表,直接从组织账号的原始结构体筛选,不依赖列表顺序对应关系:
test_account_ids = [ for acct in module.organization.organization_accounts : acct.id if try(acct.tags_all.Env, "") == "test" ]
注意事项
- 标签值匹配严格区分大小写,你给出的示例中生产环境Env值为大写开头的
Prod、测试环境为全小写的test,判断条件里的字符串要和实际标签值完全一致,避免出现筛漏、错配问题 - 如果后续要新增其他环境的筛选逻辑,比如筛选生产账号,只需要复制同样的逻辑修改if后的判断条件即可
内容的提问来源于stack exchange,提问作者hlesnt395
相关产品推荐
相关产品推荐

