Terraform中如何生成符合IAM模块要求的字符串列表映射
解决方案
把原来生成列表的for表达式改成生成map的形式,Terraform中可以通过{ for ... in ... : key => value }的语法直接构建符合要求的映射结构:
locals { proj_bindings = { for role in var.my_list_of_roles : role => [for sa in google_service_account.service_accounts : sa.member] } }
说明
- 原代码用
[]包裹for表达式,生成的是列表类型,每个元素是仅含单个角色键的小map,不符合projects_iam模块要求的map(list(string))类型。 - 修改后用
{}包裹for表达式,遍历var.my_list_of_roles中的每个角色作为map的键,对应的值是所有服务账号成员组成的列表,最终生成的就是单map结构,每个角色对应一组成员列表,完全匹配模块参数要求。
生成的结果结构示例:
proj_bindings = { "roles/role1" = [ "serviceAccount:xxx@xxx.iam.gserviceaccount.com", "serviceAccount:yyy@yyy.iam.gserviceaccount.com", ] "roles/role2" = [ "serviceAccount:xxx@xxx.iam.gserviceaccount.com", "serviceAccount:yyy@yyy.iam.gserviceaccount.com", ] }
内容的提问来源于stack exchange,提问作者red888
相关产品推荐
相关产品推荐

