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

为何Terraform始终试图删除函数应用的Swift子网连接?

排查Terraform反复标记App Service Swift VNet连接删除的问题

以下是针对你遇到的问题的具体排查方向和解决步骤:

1. 检查资源ID的严格匹配

Terraform对字符串是严格大小写匹配的,即使Azure资源ID本身不区分大小写:

  • 执行 terraform state show azurerm_app_service_virtual_network_swift_connection.func_app_vnet_swift_connection,提取输出中的app_service_id和subnet_id。
  • 执行 terraform console,输入data.azurerm_subnet.subnet.id和azurerm_windows_function_app.func_app.id,对比两者的输出和状态文件中的值是否完全一致(包括大小写、字符顺序)。
    如果存在差异,需要修正代码中的引用,或者手动更新状态文件(操作前务必备份状态)。

2. 验证子网的强制属性配置

Swift连接要求关联的子网必须禁用两个网络策略,否则Terraform会认为资源不符合预期,触发重建(先删后建):

  • 用Azure CLI执行:
az network vnet subnet show --resource-group <你的资源组名> --vnet-name <虚拟网络名> --name <子网名>
  • 检查输出中的privateEndpointNetworkPolicies和privateLinkServiceNetworkPolicies是否均为Disabled。
    如果不是,需要在子网的Terraform代码中明确添加这两个配置:
resource "azurerm_subnet" "subnet" {
  # 其他属性...
  private_endpoint_network_policies    = "Disabled"
  private_link_service_network_policies = "Disabled"
}

然后重新apply,确保子网属性符合要求。

3. 排查Provider版本问题

Azurerm Provider的部分旧版本存在azurerm_app_service_virtual_network_swift_connection资源的虚假变更检测bug:

  • 查看你的versions.tf或provider.tf中的azurerm版本约束,比如是否为<3.0或较旧的3.x版本。
  • 尝试升级到最新稳定版(比如3.70以上),修改provider配置后执行terraform init -upgrade,再重新plan验证。

4. 移除多余的depends_on

azurerm_app_service_virtual_network_swift_connection资源本身已经通过app_service_id隐式依赖于azurerm_windows_function_app,手动添加的depends_on可能导致Terraform的依赖计算异常:

  • 移除代码中的depends_on块,重新plan看是否还会触发删除操作。

5. 检查状态漂移

如果有手动修改、其他Terraform实例或Azure自动化工具修改了App Service或子网的属性,会导致Terraform状态与实际资源不一致:

  • 执行 terraform refresh,让Terraform同步最新的资源状态到本地状态文件。
  • 再次执行terraform plan,观察是否还会出现删除连接的变更提示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 11:17:46