如何解决获取Terraform资源已存在,并且Terraform刚创建的资源存在错误
我正在使用terraform在Azure中建立虚拟网络。
我有几个VNet,每个VNet都有自己的网络安全组,并在terraform中进行了100%的管理,除了资源组之外没有其他资源可以运行terraform。
当我第一次运行terraform apply
时,所有资源都正确创建。但是,如果我尝试再次运行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添加到没有资源的资源中。但是奇怪的是,在应用了我的terraform脚本之后,创建了NSG,但实际上并未与子网关联,并且安全策略创建了新的NSG。需要解决此问题,但认为不会导致此错误。
解决方法
我认为这是我第一次使用Terraform,所以在应用和销毁操作中途会遇到很多错误。
我最终手动删除了Azure中的所有资源并删除了Terraform的本地缓存,然后一切开始正常工作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。