Terraform如何向带count属性的aws_network_interface传递子网ID
为count迭代的aws_network_interface正确传入subnet_id的方法
你已经通过三个独立的aws_subnet数据源分别拿到了AZA、AZB、AZC三个可用区的子网信息,要给count=3的网卡资源按迭代顺序传对应子网ID,最稳妥可维护的方式是用有序列表做索引映射:
先把三个子网ID按迭代匹配顺序整理为本地列表
新增locals块,按照和var.private_ips索引一一对应的顺序存放三个子网的ID,比如count=0对应AZA、count=1对应AZB、count=2对应AZC就按这个顺序写:locals { target_subnet_ids = [ data.aws_subnet.AZA.id, data.aws_subnet.AZB.id, data.aws_subnet.AZC.id ] }在资源中通过count.index从列表取值
直接把subnet_id参数赋值为对应索引的列表项即可:resource "aws_network_interface" "my_network_interface" { count = 3 private_ips = [var.private_ips[count.index]] subnet_id = local.target_subnet_ids[count.index] // 其余原有配置保持不变 }
注意:一定要保证
target_subnet_ids里的子网顺序和var.private_ips的顺序对齐,否则会出现私网IP和可用区子网错位匹配的问题。
不推荐用多层三元判断的写法(比如count.index == 0 ? data.aws_subnet.AZA.id : count.index == 1 ? data.aws_subnet.AZB.id : data.aws_subnet.AZC.id),这种写法后续调整子网顺序、增减可用区的时候维护成本很高,很容易写出bug。
内容的提问来源于stack exchange,提问作者stargazer
相关产品推荐
相关产品推荐

