Terraform 在随后的 'apply' 中删除 Azure 资源而不更改任何配置

Terraform deletes Azure resources in subsequent 'apply' without any config change

我试图测试处理对现有资源的外部更改然后在下一个应用程序中将我的 HCL 配置同步到当前状态的场景。我可以使用 'taint' 修改资源来实现这一点,但 TF 删除了在第一个 'apply' 期间部署的其他资源。下面是具有 3 个子网(prod、dmz 和应用程序)和 3 个关联的 NSG 的 VNet 的模块代码。我通过修改其中一个 NSG 进行了测试,但 TF 删除了所有子网-

VNET-

resource "azurerm_virtual_network" "BP-VNet" {

name = var.Vnetname
location = var.location
resource_group_name = var.rgname
address_space = var.vnetaddress
subnet {
    name = "GatewaySubnet"
    address_prefix = "10.0.10.0/27"
}

}

子网 -

resource "azurerm_subnet" "subnets" {
count = var.subnetcount
name = "snet-prod-${lookup(var.snettype, count.index, "default")}-001"
address_prefixes = ["10.0.${count.index+1}.0/24"]
resource_group_name = var.rgname
virtual_network_name = azurerm_virtual_network.BP-VNet.name

}

NSG-

    resource "azurerm_network_security_group" "nsgs" {
count = var.subnetcount
name = "nsg-prod-${lookup(var.snettype, count.index, "default")}"
resource_group_name = var.rgname
location = var.location
--------
}

堡垒子网-

    resource "azurerm_subnet" "bastionsubnet" {
  name = "AzureBastionSubnet"
  virtual_network_name = azurerm_virtual_network.BP-VNet.name
  resource_group_name = var.rgname
  address_prefixes = [ "10.0.5.0/27" ]
}

第二次申请的最终结果是-

只有网关子网。它不应该删除其余 4 个子网。为什么会这样?

解决方案可能会让您感到困惑。您可以将 GatewaySubnetazurerm_virtual_network 块中分离到 azurerm_subnet 块中。代码如下所示:

resource "azurerm_subnet" "gateway" {
  name = "GatewaySubnet"
  resource_group_name = var.rgname
  virtual_network_name = azurerm_virtual_network.BP-VNet.name
  address_prefixes = ["10.0.10.0/27"]
}

我不知道具体原因,但它解决了你的问题。