如何用for/for_each循环简化Terraform ALB子网映射配置?
简化Terraform ALB子网与EIP映射配置
当然可以,用Terraform的for表达式结合zip函数就能把重复的映射配置合并成一个代码块,既简洁又方便维护。
优化后的配置
替换你原来的subnet_mapping部分,用以下代码即可:
subnet_mapping = [ for pair in zip(var.public_subnets, var.allocation_id) : { subnet_id = pair[0] allocation_id = pair[1] } ]
逻辑说明
zip函数会将var.public_subnets和var.allocation_id两个列表按索引一一配对,生成形如(subnet_id, allocation_id)的元组集合for循环遍历每一组元组,自动生成对应的映射对象,完全替代原来手动写的三组配置
可选:添加长度校验(避免错误)
为了防止两个列表长度不匹配导致的配置错误,可以在allocation_id变量中添加验证规则:
variable "allocation_id" { type = list(string) description = "List of allocation ids of elastic IPs" default = ["eipalloc-058fa2edc336f1xxx","eipalloc-012227feb7cf9xxx","eipalloc-075bf28dc2b5cxxx"] validation { condition = length(var.allocation_id) == length(var.public_subnets) error_message = "allocation_id列表长度必须与public_subnets一致。" } }
内容的提问来源于stack exchange,提问作者jurasjarzyna
相关产品推荐
相关产品推荐

