You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Terraform销毁资源遇ApplicationGatewaySubnetInboundTrafficBlockedByNSG错误求助

问题分析

Azure Application Gateway V2 SKU要求其所在子网的NSG必须始终允许GatewayManager服务标签访问65200-65535端口(用于Azure管理平面与网关的通信)。销毁时Terraform默认按创建顺序的反向销毁资源,当前代码中仅让网关依赖NSG而非NSG规则,导致Terraform可能先删除AllowGatewayManagerInbound规则,此时网关仍存在,触发Azure的端口阻断检查,最终销毁失败。

解决方案

1. 调整代码依赖关系(推荐)

修改Application Gateway模块的depends_on,使其直接依赖NSG规则而非NSG本身。这样Terraform会强制销毁时先删除Application Gateway,再删除NSG规则,避免规则被删除时网关仍存在的冲突。

修改后的代码:

module "app_gateway" {
  source               = "../../modules/app_gateway"
  name                 = "${azurerm_resource_group.app.name}-${var.location}"
  location             = azurerm_resource_group.app.location
  resource_group_name  = azurerm_resource_group.app.name
  vnet_subnet_id       = azurerm_subnet.gateway.id
  app_public_dns_zone  = local.app_public_dns_zone
  a_record_domain_name = local.a_record_subdomain
  key_vault            = local.key_vault
  ssl_certificates     = local.ssl_certificates
  env                  = local.suffix
  tags                 = var.tags
  depends_on = [
    azurerm_network_security_rule.gateway_allow_gateway_manager_https_inbound
  ]
}

2. 流水线分步销毁(备选)

若无法修改代码依赖,可在Jenkins流水线中拆分销毁步骤,先单独销毁网关,再销毁剩余资源:

# 第一步:仅销毁Application Gateway模块
terraform destroy -target=module.app_gateway -auto-approve

# 第二步:销毁剩余所有资源
terraform destroy -auto-approve

3. 额外检查:子网与NSG的关联

确保网关子网已正确关联NSG(若未关联需补充配置),避免其他潜在问题:

resource "azurerm_subnet" "gateway" {
  name                 = "gateway"
  resource_group_name  = azurerm_resource_group.app.name
  virtual_network_name = azurerm_virtual_network.primary.name
  address_prefixes     = ["10.0.1.0/24"]
  # 关联NSG
  network_security_group_id = azurerm_network_security_group.gateway.id
}

内容的提问来源于stack exchange,提问作者Sunil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 22:50:33