Azure Terraform正在摧毁为每个人创建的资源

Azure Terraform正在摧毁为每个人创建的资源,azure,arm,terraform,Azure,Arm,Terraform,我是新的地形和实验,以获得一些经验。但一开始我遇到了一些问题。我用一些名称声明变量,这些名称将被创建为Azure中的web应用以及连接到同名web应用的数据库。在后面的代码中,我将为每个_运行并创建资源。我的问题是,资源被创建得很好,但运行terraform destroy命令并没有破坏它们 在创建这些资源的同时,如果我运行Terraform plan,我会收到一条巨大的错误消息,说明它无法联系Azure api。如果我在Azure portal中手动删除这些资源,则不会出现错误 如果我运行Te

我是新的地形和实验,以获得一些经验。但一开始我遇到了一些问题。我用一些名称声明变量,这些名称将被创建为Azure中的web应用以及连接到同名web应用的数据库。在后面的代码中,我将为每个_运行并创建资源。我的问题是,资源被创建得很好,但运行terraform destroy命令并没有破坏它们

在创建这些资源的同时,如果我运行Terraform plan,我会收到一条巨大的错误消息,说明它无法联系Azure api。如果我在Azure portal中手动删除这些资源,则不会出现错误

如果我运行Terraform destroy-target azurerm_mysql_database.mladenl222,它会成功,但资源不会被销毁

如果我使用ARM模板创建Azure web应用程序,也会出现同样的问题。我使用预定义的ARM模板创建web应用程序,并在Terraform代码中传递一些参数。所有工作正常,资源正在被创建,但它并没有被Terraform destroy命令破坏。命令状态为成功,但未删除任何内容。下面是一些代码示例

variable "students_2025"{
    type = set(string)
    default = ["test222","test12345"]
}

resource "azurerm_mysql_database" "default" {
   for_each = var.students_2025 
  name                = "${each.key}"
  resource_group_name = azurerm_resource_group.RG_mok_2025.name
  server_name         = azurerm_mysql_server.wp-db-mok-2025.name
  charset             = "utf8"
  collation           = "utf8_unicode_ci"
}

我使用了以下工具,terraform apply and destroy正在按预期工作:

variable "students_2025"{
    type = set(string)
    default = ["test222","test12345"]
}

resource "azurerm_resource_group" "test" {
  name     = "amgar-mysql-server"
  location = "West Europe"
}

resource "azurerm_mysql_server" "test" {
  name                = "amgar-sql-server"
  location            = "${azurerm_resource_group.test.location}"
  resource_group_name = "${azurerm_resource_group.test.name}"

  sku {
    name     = "B_Gen5_2"
    capacity = 2
    tier     = "Basic"
    family   = "Gen5"
  }

  storage_profile {
    storage_mb            = 5120
    backup_retention_days = 7
    geo_redundant_backup  = "Disabled"
  }

  administrator_login          = "mysqladminun"
  administrator_login_password = "H@Sh1CoR3!"
  version                      = "5.7"
  ssl_enforcement              = "Enabled"
}

resource "azurerm_mysql_database" "test" {
  for_each = var.students_2025
  name                = each.key
  resource_group_name = "${azurerm_resource_group.test.name}"
  server_name         = "${azurerm_mysql_server.test.name}"
  charset             = "utf8"
  collation           = "utf8_unicode_ci"
}
我使用的是最新的terraform版本0.12.9


希望这有帮助

我不确定foreach的问题,但是对于模板,它是预期的。terraform对你的模板一无所知。因此,它将无法删除模板创建的资源。如果从命令行中删除
-target
选项,Terraform是否会按预期销毁对象?
-target
选项仅用于特殊情况,不用于日常使用,并为地形的行为增加了相当多的额外复杂性。您应该能够在大多数情况下运行所有Terraform命令,而无需
-target
。您好,谢谢您的回答。如果我只是尝试运行terraform destroy,我会得到如下所示的错误消息。对于由for_创建的每个资源都相同。如果运行terraform apply,将显示相同的错误消息。我需要手动删除azure portal中的这些资源,以便能够在其他资源上运行计划或应用。对AzureRM应用程序服务源代码管理“mladenl222”发出读取请求时出错:web.AppsClient#GetSourceControl:响应请求失败:StatusCode=400