Terraform新手求助:结合多列表遍历资源创建AWS组织策略
解决方案
你需要将文件名、对应描述和文件内容整合成结构化映射,这样就能在创建资源时方便遍历并获取每个元素的信息。
步骤1:整合关联数据
修改本地变量,添加一个整合了文件名、描述和文件内容的映射:
locals { files = split(",", var.filenames) descs = split(",", var.descriptions) # 验证文件名和描述的数量必须一致 _validate_desc_count = length(local.files) == length(local.descs) ? true : error("文件名列表和描述列表的元素数量必须一一对应") # 整合每个文件的名称、描述和对应的内容 file_policy_details = { for idx, filename in local.files : filename => { description = local.descs[idx] content = data.local_file.p_files[filename].content } } }
步骤2:遍历整合后的映射创建策略资源
使用for_each遍历上面的file_policy_details,直接获取每个策略需要的字段:
resource "aws_organizations_policy" "org_policies" { for_each = local.file_policy_details name = each.key # 文件名作为策略名称 content = each.value.content # 对应文件的内容 description = each.value.description # 对应索引的描述 }
关键说明
- 通过索引关联
local.files和local.descs,确保每个文件名对应正确的描述,前提是输入的逗号分隔字符串元素数量完全匹配。 - 添加的
_validate_desc_count会在Terraform初始化时检查数量是否一致,避免因索引越界导致的错误。 data.local_file.p_files按文件名作为key存储,所以可以直接用filename作为键值获取对应的文件内容。
内容的提问来源于stack exchange,提问作者user2175783
相关产品推荐
相关产品推荐

