我是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"
}
答案 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
希望这会有所帮助!