Terraform部署Azure资源配置depends_on仍报子网不存在错误
Terraform Cloud部署Azure首次报子网不存在、二次执行成功问题修复
问题根因
这个问题和depends_on配置无关,你代码里额外加的depends_on其实是冗余配置:当你在网卡配置中通过azurerm_subnet.avd_default_core_internal.id引用子网资源时,Terraform本身就会自动识别隐式依赖,保证先创建子网再创建网卡。
实际触发报错的原因是Azure资源控制平面的异步复制延迟+旧版azurerm Provider的轮询逻辑缺陷:
- 旧版azurerm Provider调用Azure API创建子网收到成功响应后,会立刻将子网标记为创建完成,开始执行后续依赖资源的创建
- 但Azure侧子网创建完成后,资源信息需要几秒到几十秒的时间同步到全区域的控制节点,这时候发起网卡、路由表关联的创建请求,就会收到「子网不存在」的错误
- 第二次执行apply时,子网已经完成全域同步,因此所有资源可以正常创建。
修复方案
按优先级选以下任意一种方案即可,推荐优先选第一种:
- 升级azurerm Provider到3.0以上的稳定版本
新版azurerm Provider已经给子网、vnet等网络资源补全了创建后的就绪校验逻辑,会持续轮询确认资源在Azure侧可查询后,才标记资源创建完成,从根本上避免异步延迟导致的依赖错误。升级后不需要保留冗余的depends_on配置,隐式依赖就足够保证顺序正确。 - 若暂时无法升级Provider,将子网改为虚拟网络的内嵌块定义
不要使用独立的azurerm_subnet资源定义子网,直接在azurerm_virtual_network资源的subnet内嵌块中声明子网,这种写法下vnet创建完成时子网已经完全就绪,不会出现独立subnet资源的提前返回问题,参考配置如下:
resource "azurerm_virtual_network" "avd_default" { name = "Vnet_${var.prefix}_Core-Prod" resource_group_name = azurerm_resource_group.avd_default_core_rg.name location = azurerm_resource_group.avd_default_core_rg.location address_space = [var.avd_address_space] # 内嵌定义两个子网,不再使用独立azurerm_subnet资源 subnet { name = "Subnet_${var.prefix}_Core-Prod" address_prefix = var.core_address_prefixes } subnet { name = "Subnet_${var.prefix}_Internet-Prod" address_prefix = var.internet_address_prefixes } } # 网卡引用子网的方式改为通过vnet资源获取subnet id resource "azurerm_network_interface" "avd_default_dc01" { name = "dc01-nic" location = azurerm_resource_group.avd_default_core_rg.location resource_group_name = azurerm_resource_group.avd_default_core_rg.name dns_servers = [var.private_ip_dc01, "8.8.8.8"] ip_configuration { name = "ipconfig1" # 从vnet的内嵌子网属性取id subnet_id = azurerm_virtual_network.avd_default.subnet[0].id private_ip_address_allocation = "Static" private_ip_address = var.private_ip_dc01 } }
- 临时兼容方案:给所有依赖子网的资源增加创建延迟
如果既不能升级Provider也不能改子网定义方式,可以通过time_sleep资源在子网创建完成后强制等待30-60秒再创建后续依赖资源,不过这种方案稳定性较差,不推荐长期使用。
验证方式
配置修改完成后,执行terraform plan确认执行计划符合预期,首次执行terraform apply即可完成所有资源部署,不需要二次执行。
内容的提问来源于stack exchange,提问作者Richard
相关产品推荐
相关产品推荐

