获取Terraform资源已存在错误,Terraform刚刚创建了资源

获取Terraform资源已存在错误,Terraform刚刚创建了资源,terraform,terraform-provider-azure,Terraform,Terraform Provider Azure,我正在用Terraform在Azure中建立一个虚拟网络 我有几个VNET,每个VNET都有自己的网络安全组,100%在Terraform中管理,在运行Terraform之前,除了资源组之外没有其他资源 当我第一次运行terraformapply时,所有资源都被正确创建。但是,如果我尝试再次运行apply来更新其他资源,我会收到一个错误,说明NSG资源已经存在 Error: A resource with the ID "/subscriptions/0000000000000000/

我正在用Terraform在Azure中建立一个虚拟网络

我有几个VNET,每个VNET都有自己的网络安全组,100%在Terraform中管理,在运行Terraform之前,除了资源组之外没有其他资源

当我第一次运行
terraformapply
时,所有资源都被正确创建。但是,如果我尝试再次运行apply来更新其他资源,我会收到一个错误,说明NSG资源已经存在

Error: A resource with the ID
"/subscriptions/0000000000000000/resourceGroups/SynthArtInfra/providers/Microsoft.Network/networkSecurityGroups/SynthArtInfra_ServerPoolNSG"
already exists - to be managed via Terraform this resource needs to be
imported into the State. Please see the resource documentation for
"azurerm_network_security_group" for more information.
为什么Terraform会抱怨现有资源,而它应该已经在它的控制之下

编辑: 这是与NSG相关的代码,其他一切都与VPN网关有关:

# Configure the Azure provider
terraform {
  required_providers {
    azurerm = {
      source = "hashicorp/azurerm"
      version = ">= 2.26"
    }
  }
}

provider "azurerm" {
  features {}
}

data "azurerm_resource_group" "SynthArtInfra" {
    name     = "SynthArtInfra"
    location = "Somewhere" # not real
    most_recent = true
}


resource "azurerm_virtual_network" "SynthArtInfra_ComputePool" {
  name = "SynthArtInfra_ComputePool"
  location = azurerm_resource_group.SynthArtInfra.location
  resource_group_name = azurerm_resource_group.SynthArtInfra.name
  address_space = ["10.6.0.0/16"]
}

resource "azurerm_subnet" "ComputePool_default" {
  name = "ComputePool_default"
  resource_group_name = azurerm_resource_group.SynthArtInfra.name
  virtual_network_name = azurerm_virtual_network.SynthArtInfra_ComputePool.name
  address_prefixes = ["10.6.0.0/24"]
}


resource "azurerm_network_security_group" "SynthArtInfra_ComputePoolNSG" {
  name                = "SynthArtInfra_ComputePoolNSG"
  location            = azurerm_resource_group.SynthArtInfra.location
  resource_group_name = azurerm_resource_group.SynthArtInfra.name

  security_rule {
    name                       = "CustomSSH"
    priority                   = 119
    direction                  = "Inbound"
    access                     = "Allow"
    protocol                   = "*"
    source_port_range          = "*"
    destination_port_range     = "0000" # not the real port number
    source_address_prefix      = "*"
    destination_address_prefix = "*"
  }    
   
}

另一件奇怪的事情是,我们的订阅有一个安全策略,可以自动将NSG添加到没有NSG的资源中。但奇怪的是,在应用我的terraform脚本之后,NSG被创建了,但实际上并没有与子网关联,而且安全策略已经创建了新的NSG。这需要解决,但我不认为它会导致此错误。

我认为这是我第一次使用Terraform,所以在应用和销毁操作的中途,我遇到了很多错误


我最终手动删除了Azure中的所有资源,并删除了Terraform的本地缓存,然后一切都开始工作。

能否显示您的完整代码?您是否可以编辑您的问题以包括计划输出?您是否也可以发布策略?正如ydaetskcoR所提到的,它提供了计划输出,但两次运行都是如此。听起来您的策略可能有点奇怪,但通常导入错误意味着您的terraform没有状态信息,希望创建一个新资源,但找到了已经创建的资源。感谢您的输入!我知道发生了什么,看看我的答案