Azure Terraform为App Service配置动态IP限制添加VNet子网报错如何解决?
问题原因
Azure App Service的IP限制规则要求单条规则只能配置三类来源中的一种:IP地址段、虚拟网络子网、服务标签,不能同时配置多种。你新增的子网规则同时填写了ip_add = "0.0.0.0/0"和subnet_id,触发了API的校验错误。terraform plan阶段仅做本地语法和配置逻辑校验,不会调用Azure API做业务规则校验,所以不会提前报错,只有apply阶段真实发送请求到Azure时才会触发错误。
解决方案
- 修正变量定义
首先调整你新增的子网条目,删除IP地址配置,将ip_add设为null;同时建议统一变量内的赋值符号为等号(避免混合冒号带来的语法隐患),另外之前的服务标签条目也可以同步修正,删除多余的IP地址配置:
locals { ip_address_list2 = [ { ip_add = "20.20.20.3/32", subnet_id = null, service_tag = null, prior = "140", name = "test1" }, { ip_add = "10.10.10.2/32", subnet_id = null, service_tag = null, prior = "141", name = "test2" }, { ip_add = null, subnet_id = null, service_tag = "AppService", prior = "142", name = "Service_Tag" }, { ip_add = null, subnet_id = azurerm_subnet.subnet.id, service_tag = null, prior = "143", name = "VirtualNetwork" } ] }
- 优化dynamic块逻辑(可选,增强兼容性)
如果想避免后续新增规则时再出现同类问题,可以调整dynamic块的逻辑,仅当对应字段不为空时才传入参数:
site_config { dynamic "ip_restriction" { for_each = local.ip_address_list2 content { action = "Allow" priority = ip_restriction.value["prior"] name = ip_restriction.value["name"] ip_address = ip_restriction.value["ip_add"] != null ? ip_restriction.value["ip_add"] : null virtual_network_subnet_id = ip_restriction.value["subnet_id"] != null ? ip_restriction.value["subnet_id"] : null service_tag = ip_restriction.value["service_tag"] != null ? ip_restriction.value["service_tag"] : null } } }
调整后重新执行terraform apply即可正常部署。
内容的提问来源于stack exchange,提问作者Igor
相关产品推荐
相关产品推荐

