Terraform销毁使用for_each创建的资源

时间:2019-09-25 09:01:00

标签: azure arm terraform

我是Terraform的新手,正在尝试获得一些经验。但是我在一开始遇到一些问题。我声明了具有某些名称的变量,这些名称将在Azure中创建为Web应用程序,并以相同的名称连接到Web应用程序的数据库。稍后在代码中,我将运行for_each并创建资源。我的问题是,资源创建得很好,但是没有被运行terraform destroy命令破坏。

在创建这些资源之后,如果我运行Terraform plan,则会同时收到一条错误消息,指出它无法联系Azure api。如果我在Azure门户中手动删除那些资源,则不会出现错误。

如果我运行Terraform destroy -target azurerm_mysql_database.mladenl222,则成功,但是资源没有被销毁。

如果我使用ARM模板创建Azure Web应用程序,则会发生相同的问题。我使用预定义的ARM模板并在Terraform Code中传递一些参数来创建Web应用程序。一切正常,并且正在创建资源,但是不会被Terraform destroy Command破坏。指挥官成功了,但是什么也没有删除。下面是一些代码示例。

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"
}

1 个答案:

答案 0 :(得分:0)

我使用了以下内容,terraform的apply和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

希望这会有所帮助!